The "MatrixOps" package was intended to be a standalone module for those who do 
not have some of the ancillary libraries -- I "wrote" a lot of it several years 
ago by digging up public domain or PAL compatible code and pasting it together 
with some glue.  I have no particular gripe about deprecating it in favor of a 
link into (say) GSL, which is pretty universal now.

(mobile)


On Mar 5, 2011, at 9:58 PM, Dima Kogan <[email protected]> wrote:

> Hi
> 
> It seems that the current implementation of PDL::MatrixOps::svd has a bug 
> where
> rank-deficient matrices can produce a non-unitary singular vector matrix:
> 
> pdl> p $x
> 
> [
> [1 2 3]
> [4 5 6]
> [4 5 6]
> ]
> 
> pdl> ($u,$s,$v) = svd($x)
> 
> pdl> p $u
> 
> [
> [    0.28303265     0.95911028 -4.0699249e-10]
> [    0.67819338     -0.2001343 -9.7522246e-10]
> [    0.67819338     -0.2001343 -9.7522246e-10]
> ]
> 
> pdl> p $s
> [ 12.936563 0.80332812 3.9580815e-19]
> pdl> p $v
> 
> [
> [ 0.44127483 -0.79913069  0.40824829]
> [ 0.56800242 -0.10347264 -0.81649658]
> [    0.69473  0.59218541  0.40824829]
> ]
> 
> 
> We see that $u has a column of 0s, which is wrong. Here
> 
> $x == $u x stretcher($s) x $v->transpose
> 
> is still true despite the wrong $u because the associated singular value is 0
> (as it should be). PDL has 2 other implementations of the SVD that do NOT have
> this issue: PDL::LinearAlgebra::{msvd,mdsvd}. These seem to call LAPACK
> directly. Is this a bug worth fixing? Should the non-LAPACK SVD method simply 
> be
> deprecated and removed? Is there a reason multiple SVD implementation exist in
> parallel?
> 
> dima
> 
> _______________________________________________
> 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

Reply via email to