Search All of the Math Forum:
Views expressed in these public forums are not endorsed by
Drexel University or The Math Forum.
|
|
|
|
Re: Alternative solution for NAN
Posted:
Feb 27, 2013 5:44 PM
|
|
"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
|
|
|
|