Indeed, that makes sense.
Also, as Chris said, there are more numbers after the coma than the ones that appear on screen when you print the piddle. inv($c) x $c is not equal to the identity matrix in some cases, but the determinant of the matrix could be regarded too low to consider that the inversion is possible, I guess. Thanxa lot for your help and effort to help me understand this -- now solved -- problem.
Stéphane

Le 13/06/2011 18:58, Luis Mochan a écrit :
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] <mailto:[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] <mailto:[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] <mailto:[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] <mailto:[email protected]>
    > http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
    >
    >
    >
    > _______________________________________________
    > Perldl mailing list
    > [email protected] <mailto:[email protected]>
    > http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
    >
    >

    _______________________________________________
    Perldl mailing list
    [email protected] <mailto:[email protected]>
    http://mailman.jach.hawaii.edu/mailman/listinfo/perldl


_______________________________________________
Perldl mailing list
[email protected]
http://mailman.jach.hawaii.edu/mailman/listinfo/perldl

Reply via email to