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 therefore

W=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