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