```Date: Feb 27, 2013 5:44 PM
Author: Tony Kittler
Subject: Re: Alternative solution for NAN

"Steven_Lord" <slord@mathworks.com> wrote in message <kgldag\$ir9\$1@newscl01ah.mathworks.com>...> > > "Carl  S." <tkittler@gmail.com> wrote in message > news:kgkurb\$1t8\$1@newscl01ah.mathworks.com...> > "Torsten" wrote in message <kgku2t\$t2g\$1@newscl01ah.mathworks.com>...> > *snip*> > >> 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)> > 1) Don't use DET to test for singularity. This matrix:> > A = 1e-10*eye(400);> > has determinant 0 (due to underflow) but it's a scaled identity matrix, > which is about as well-behaved as you can get. If you _must_ test for > singularity, check with COND or RCOND.> > 2) Don't test a floating-point number for exact, bit-for-bit equality unless > you need exact, bit-for-bit equality. Compare with a tolerance instead.> > >     N=(1e-10.*randi(1,size(N)))*eye(size(N));> > end> >> > [M,d]=size(x);> > [U,D]=eig(N); % <=causes NAN problem   :((> > Show the group a SMALL matrix N with which you can reproduce this behavior.> > *snip*> > 3) If you have Statistics Toolbox, do one of these functions do what you > want?> > http://www.mathworks.com/help/stats/multivariate-normal-distribution-1.html> > http://www.mathworks.com/help/stats/normal-distribution-1.html> > If not, please explain more _in words not code or equations_ specifically > what you mean/are trying to do when you say you want to fit means and > standard deviations to a Gaussian shape.> > -- > Steve Lord> slord@mathworks.com> To contact Technical Support use the Contact Us link on > http://www.mathworks.com Thanks Steven and Torsten,(It is difficult to prepare a small group of matrix N.  I am trying to find likelihood of an image. Codes are working for many images, but gives this NAN error for some of them)I examined all codes again and saw that the error is due to the non-positive definite values of N. So, I wrote that[U,D]= chol(N);if D ~= 0 % <= if N not positive definite    positivedefiniteN = topdm(N); %<=topdm converts N to a positive definite matrix    [U,D]= chol(positivedefiniteN );end(For topdm function, the link is http://www.mathworks.com/matlabcentral/fileexchange/35938-converts-a-non-positive-definite-symmetric-matrix-to-positive-definite-symmetric-matrix/content/topdm.m)But, the value of D returns zero thereforeW=sqrt(inv(D))*U;returns NAN and inf values, since, inv(D)=inf:((I have tried this        nonsingularD = pinv(D);but nonsingularD  is equal to zero, so it does not solve this problem
```