Search All of the Math Forum:
Views expressed in these public forums are not endorsed by
Drexel University or The Math Forum.


Torsten
Posts:
1,472
Registered:
11/8/10


Re: Alternative solution for NAN
Posted:
Feb 27, 2013 7:56 AM


"Carl S." wrote in message <kgkurb$1t8$1@newscl01ah.mathworks.com>... > "Torsten" wrote in message <kgku2t$t2g$1@newscl01ah.mathworks.com>... > > "Carl S." wrote in message <kgktg9$rhc$1@newscl01ah.mathworks.com>... > > > "Carl S." wrote in message <kgkpep$h9u$1@newscl01ah.mathworks.com>... > > > > "Torsten" wrote in message <kgko7b$e4d$1@newscl01ah.mathworks.com>... > > > > > "Carl S." wrote in message <kgkmon$aeo$1@newscl01ah.mathworks.com>... > > > > > > "Torsten" wrote in message <kgklbh$6ph$1@newscl01ah.mathworks.com>... > > > > > > > "Carl S." wrote in message <kgki2g$rie$1@newscl01ah.mathworks.com>... > > > > > > > > The following code gives NAN (Not a Number) values > > > > > > > > [U,D]=eig(N); > > > > > > > > > > > > > > > > To solve this problem, I wrote that > > > > > > > > while(det(N) == 0) > > > > > > > > N=(1e10.*randi(1,size(N)))*eye(size(N)); > > > > > > > > end > > > > > > > > > > > > > > > > But, the loop does not stop > > > > > > > > > > > > > > Your matrix N within the loop always has determinant (1e10)^(size(N)) > > > > > > > which may become very small if N is large. > > > > > > > > > > > > > > :( Are there any alternative solution instead of this loop to solve the NAN problem ? > > > > > > > > > > > > > > Depends on the original matrix N. > > > > > > > > > > > > > > Best wishes > > > > > > > Torsten. > > > > > > > > > > > > Dear Torsten, > > > > > > The matrix N has standard deviation values of grayscale images. So, it changes for each image. How to solve the NAN problem in this case ? > > > > > > > > > > > I have tried this, > > > u=1e10; > > > while(det(N) == 0) > > > N=u.*eye(size(N)); > > > u=u*100; > > > end > > > > > > Now, it works without giving NAN value. But, I am not sure that this algorithm correct results. Do you think that this is meaningful or I can get unexpected results ? Any suggestions ? > > > > The matrix N you get after the while loop is a scalar multiple of the identity matrix and in general has nothing in common with your original matrix N. > > You will have to find out why eig produces NaN values for your original matrix N. > > Are you sure all elements of N are finite ? > > > > Best wishes > > Torsten. > > Yes, Torsten, they are finite > > My goal is to fit means(mu) and standard deviations(N) to Gaussian shape. The codes that I wrote above are from the function ; > > function res=MultivariateGaussianPDF(x,mu,N) > while(det(N) == 0) > N=(1e10.*randi(1,size(N)))*eye(size(N)); > end > > [M,d]=size(x); > [U,D]=eig(N); % <=causes NAN problem :(( > > W=sqrt(inv(D))*U; > Wx=W*(xones(M,1)*mu)'; > res=(1/sqrt((2*pi)^d*det(N)))*exp(0.5*sum(Wx.^2,1));
The while statement is complete nonsense. The only thing I can imagine what is meant is > while(det(N) == 0) > N=N+1e10*eye(size(N)); > end
Best wishes Torsten.



