SVD Singular Value Decomposition of a Matrix

Section: Transforms/Decompositions


Computes the singular value decomposition (SVD) of a matrix. The svd function has three forms. The first returns only the singular values of the matrix:
  s = svd(A)

The second form returns both the singular values in a diagonal matrix S, as well as the left and right eigenvectors.

  [U,S,V] = svd(A)

The third form returns a more compact decomposition, with the left and right singular vectors corresponding to zero singular values being eliminated. The syntax is

  [U,S,V] = svd(A,0)

Function Internals

Recall that sigma_i is a singular value of an M x N matrix A if there exists two vectors u_i, v_i where u_i is of length M, and v_i is of length u_i and

and generally

where K is the rank of A. In matrix form, the left singular vectors u_i are stored in the matrix U as

The matrix S is then of size M x N with the singular values along the diagonal. The SVD is computed using the LAPACK class of functions GESVD (Note that this has changed. Previous versions of FreeMat used GESDD, which yields a valid, but slightly different choice of the decomposition. Starting in version 4, it was changed to GESVD to improve compatibility.


Here is an example of a partial and complete singular value decomposition.
--> A = float(randn(2,3))

A = 
   -0.9542    1.2478   -0.2295 
    0.3075    1.0686   -0.4849 

--> [U,S,V] = svd(A)
U = 
   -0.8410   -0.5411 
   -0.5411    0.8410 

S = 
    1.8058         0         0 
         0    0.8549         0 

V = 
    0.3522    0.9064    0.2331 
   -0.9013    0.2614    0.3454 
    0.2521   -0.3317    0.9091 

--> U*S*V'

ans = 
   -0.9542    1.2478   -0.2295 
    0.3075    1.0686   -0.4849 

--> svd(A)

ans =