I guess Robert is right. Two points [[X1,Y1],[X2,Y2]] become, after substracting their mean, [[DeltaX1, DeltaY1],[-DeltaX1,-DeltaY1]], with covariance matrix [[DeltaX1**2, DeltaX1*DeltaY1],[DeltaX1*DeltaY1,DeltaY1**2]], which has determinant DeltaX1**2*DeltaY1**2-(DeltaX1*DeltaY1)**2=0. More than two 2D points are required to have non singular covariant matrices. Regards, Luis
On Sun, Jun 12, 2011 at 11:08 PM, Robert Young <[email protected]>wrote: > Whether the covariance matrix will be singular or not depends on the > dimension of the matrix you start with. The covariance matrix of an n > x n matrix like yours will always be singular, but because of rounding > errors, you'll sometimes end up with an invertible result. The reason > is that any n points in n-space lie on an (n-1)-dimensional hyperplane > (in your case, any two points in the plane lie on a line), and since > there's no variability in the direction perpendicular to that > hyperplane, the covariance matrix will be singular. > > Best, > Robert Young > > On Sun, Jun 12, 2011 at 4:36 PM, Stéphane Lévy <[email protected]> > wrote: > > Hello, > > The deteminant of the cut and pasted matrix is "very small" but it's not > > equal to zero. > > I wonder how you can say that the matrix is not invertible in the first > > place? > > The covariance matrix based on a random matrix has nearly 0.0% chance to > > happen to be non-invertible. > > I think the matrix is invertible. > > And I do have a message error if I ask for inversion of a not-ivertible > > matrix, as follows : > > ------------------- > > Perl> my $m = pdl([1,1],[1,1]) > > > > [ > > [1 1] > > [1 1] > > ] > > > > Perl> inv($m) > > [!] Runtime error: PDL: PDL::inv: got a singular matrix or LU > decomposition > > > > Caught at file (eval 47), line 4, pkg PerlConsole::Console > > ------------------- > > The determinant of a (2,2) matrix : ([a,b],[c,d]) is : ad - bc > > I find the problem to be not solved for the moment. > > Thank you for your help again, I hope we will find a solution to this > > matter. > > Stéphane > > > > Le 10/06/2011 15:14, Chris Marshall a écrit : > > > > You matrix is not invertible which is why the first > > answer comes out funny. The matrix inverse routine > > does not do checking for condition numbers, etc > > before it calculates the inverse. If you print the > > determinant you'll see it is very small (i.e. floating > > point zero within round-off). > > > > The reason your cut and paste "check" worked > > is because you only included the top several places > > from the sprint of the numbers which is enough to > > make the determinant farther from 0 and the matrix > > then invertible. It is not actually inverting the > > same matrix.... > > > > --Chris > > > > On Fri, Jun 10, 2011 at 5:54 AM, Stéphane Lévy <[email protected]> > > wrote: > > > > Hello, > > I have found unexpected, astonishing results using the PDL matrix inv() > > function by 2 different ways. > > In the first way I manipulate PDL objects all the way, in the second way > I > > recreate objects by pasting values of the original PDL object into a new > PDL > > object. > > First way gives unexpected, wrong result, second way leads to accurate > > result. I do not understand this and it worries me a bit as I am supposed > to > > use intensively PDL matrix functions. > > Anybody can give me an explanation of this, and tell me what I should do > > differently when I manipulate objects? > > Here is what I did : > > > > # step 1A : creating a (2,2) matrix > > Perl> my $m = random(2,2) > > $PDL1 = > > [ > > [0.65707276 0.12124598] > > [0.95303134 0.43850649] > > ] > > ; > > > > # step 1B : computing cov table of the matrix > > Perl> my $c = $m->cov_table() > > $PDL1 = > > [ > > [0.071777584 0.068924048] > > [0.068924048 0.066183954] > > ] > > ; > > > > # step 1C : testing if the the matrix multiplied by its inverse is equal > to > > identity matrix > > Perl> $c x inv($c) > > $PDL1 = > > [ > > [ 1 0] > > [-0.125 1.125] > > ] > > ; > > # we observe that step 1C leads to unexpected result > > > > # step 2A : pasting the content of PDL obtained in step 1B to a new PDL > > object : the 2 PDL objects are supposedly perfectly identical > > Perl> $m = pdl([0.071777584,0.068924048],[0.068924048,0.066183954]) > > $PDL1 = > > [ > > [0.071777584 0.068924048] > > [0.068924048 0.066183954] > > ] > > ; > > > > # step 2B : same as step 1C, testing if the the matrix multiplied by its > > inverse is equal to identity matrix > > Perl> $m x $m->inv() > > $PDL1 = > > [ > > [1 0] > > [0 1] > > ] > > ; > > # we observe that step 2B leads to expected result > > > > Thank you. > > Best regards. > > Stéphane > > > > > > _______________________________________________ > > Perldl mailing list > > [email protected] > > http://mailman.jach.hawaii.edu/mailman/listinfo/perldl > > > > > > > > _______________________________________________ > > Perldl mailing list > > [email protected] > > http://mailman.jach.hawaii.edu/mailman/listinfo/perldl > > > > > > _______________________________________________ > Perldl mailing list > [email protected] > http://mailman.jach.hawaii.edu/mailman/listinfo/perldl >
_______________________________________________ Perldl mailing list [email protected] http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
