My understanding of SVD is that, for A an mxn matrix, m > n:


A = UWV*

where W is square root diagonal eigenvalues of A*A extended with zero valued rows, and U and V are the left & right eigen vectors of A. But this does not seem to be strictly true and seems to require specific eigenvectors, and I am not at all sure how these are computed.

Since W should have a zero row at the bottom, which when multiplied by U will just remove the last column of U, I have just omitted the last row of u from the outset:

eg, in R:

    a <- matrix(c(c(1,2,3),c(5,14,11)),3,2)
    u <- eigen(a %*% t(a))$vectors[,1:2]
    v <- eigen(t(a) %*% a)$vectors
    w <- sqrt(diag(eigen(t(a) %*% a)$values))
    u %*% w %*% t(v)

gives:
           [,1]       [,2]
[1,] -0.9390078  -5.011812
[2,] -3.3713773 -13.734403
[3,] -1.3236615 -11.324660

which seems a little off the mark. The value for v is:

          [,1]       [,2]
[1,] 0.1901389  0.9817572
[2,] 0.9817572 -0.1901389

Where as svd(a)$v is:

           [,1]       [,2]
[1,] -0.1901389  0.9817572
[2,] -0.9817572 -0.1901389

If I substitute this in the above, I get:

u %*% w %*% t(svd(a)$v)

which returns:

     [,1] [,2]
[1,]    1    5
[2,]    2   14
[3,]    3   11

which is what the SVD should do. I assume there is some rule about setting the signs on eigenvectors for SVD, and would appreciate any help.



----------------------------------------------------------------
Philip Warner                    |     __---_____
Albatross Consulting Pty. Ltd.   |----/       -  \
(A.B.N. 75 008 659 498)          |          /(@)   ______---_
Tel: (+61) 0500 83 82 81         |                 _________  \
Fax: (+61) 03 5330 3172          |                 ___________ |
Http://www.rhyme.com.au          |                /           \|
                                 |    --________--
PGP key available upon request,  |  /
and from pgp.mit.edu:11371       |/

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to