[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: Setting precision in Ruby-GSL calculations ?

M. Edward (Ed) Borasky

7/30/2006 10:58:00 PM

Nuralanur@aol.com wrote:
> Dear Ed,
>
> thank you for responding.
> Well, I tried transposing as you said too, but then I lost
> confidence in the algorithm implemented there, because
>
> for m=[[10,5,-10],[2,-11,10]].to_gsl_matrix, I then get
> a matrix u of size (3,2), (it should be 3,3), and u*u.transposed
> is
>
> [ 8.889e-001 -2.222e-001 -2.222e-001
> -2.222e-001 5.556e-001 -4.444e-001
> -2.222e-001 -4.444e-001 5.556e-001 ],
>
> so nowhere near a unit matrix, either ...
>
> With respect to the sizes, I am expecting to be able to keep
> (m1,m2) somewhere in the range of 50 or below each.
>
> Best regards,
>
> Axel
>

Here's what I get from R:

> m=matrix(c(10, 5 ,-10 ,2 ,-11 ,10), nrow=3, ncol=2)
> m
[,1] [,2]
[1,] 10 2
[2,] 5 -11
[3,] -10 10
> svd(m)
$d
[1] 18.973666 9.486833

$u
[,1] [,2]
[1,] -0.2981424 8.944272e-01
[2,] -0.5962848 -4.472136e-01
[3,] 0.7453560 -1.489694e-16

$v
[,1] [,2]
[1,] -0.7071068 0.7071068
[2,] 0.7071068 0.7071068



> m=t(m)
> m
[,1] [,2] [,3]
[1,] 10 5 -10
[2,] 2 -11 10
> svd(m)
$d
[1] 18.973666 9.486833

$u
[,1] [,2]
[1,] -0.7071068 0.7071068
[2,] 0.7071068 0.7071068

$v
[,1] [,2]
[1,] -0.2981424 8.944272e-01
[2,] -0.5962848 -4.472136e-01
[3,] 0.7453560 -1.859678e-16





1 Answer

M. Edward (Ed) Borasky

7/30/2006 11:10:00 PM

0

M. Edward (Ed) Borasky wrote:
> Nuralanur@aol.com wrote:
>> Dear Ed,
>>
>> thank you for responding.
>> Well, I tried transposing as you said too, but then I lost
>> confidence in the algorithm implemented there, because
>>
>> for m=[[10,5,-10],[2,-11,10]].to_gsl_matrix, I then get
>> a matrix u of size (3,2), (it should be 3,3), and u*u.transposed
>> is
>> [ 8.889e-001 -2.222e-001 -2.222e-001 -2.222e-001 5.556e-001
>> -4.444e-001 -2.222e-001 -4.444e-001 5.556e-001 ],
>>
>> so nowhere near a unit matrix, either ...
>>
>> With respect to the sizes, I am expecting to be able to keep
>> (m1,m2) somewhere in the range of 50 or below each.
>>
>> Best regards,
>>
>> Axel
>
> Here's what I get from R:
>
> > m=matrix(c(10, 5 ,-10 ,2 ,-11 ,10), nrow=3, ncol=2)
> > m
> [,1] [,2]
> [1,] 10 2
> [2,] 5 -11
> [3,] -10 10
> > svd(m)
> $d
> [1] 18.973666 9.486833
>
> $u
> [,1] [,2]
> [1,] -0.2981424 8.944272e-01
> [2,] -0.5962848 -4.472136e-01
> [3,] 0.7453560 -1.489694e-16
>
> $v
> [,1] [,2]
> [1,] -0.7071068 0.7071068
> [2,] 0.7071068 0.7071068
>
>
>
> > m=t(m)
> > m
> [,1] [,2] [,3]
> [1,] 10 5 -10
> [2,] 2 -11 10
> > svd(m)
> $d
> [1] 18.973666 9.486833
>
> $u
> [,1] [,2]
> [1,] -0.7071068 0.7071068
> [2,] 0.7071068 0.7071068
>
> $v
> [,1] [,2]
> [1,] -0.2981424 8.944272e-01
> [2,] -0.5962848 -4.472136e-01
> [3,] 0.7453560 -1.859678e-16
Oh ... I see what's up now. m is 3x2. Thus its rank must be 2 or less.
So we do the svd (the first one above) and get a 3x2 u, which is
correct. Now multiply u.transpose by u. In R, that's

> m
[,1] [,2]
[1,] 10 2
[2,] 5 -11
[3,] -10 10
> svd=svd(m)
> svd
$d
[1] 18.973666 9.486833

$u
[,1] [,2]
[1,] -0.2981424 8.944272e-01
[2,] -0.5962848 -4.472136e-01
[3,] 0.7453560 -1.489694e-16

$v
[,1] [,2]
[1,] -0.7071068 0.7071068
[2,] 0.7071068 0.7071068

> t(svd$u) %*% svd$u
[,1] [,2]
[1,] 1.000000e+00 -1.275693e-16
[2,] -1.275693e-16 1.000000e+00
>


See if you get the same things when you run it in Ruby/GSL.