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
