svd

Syntax

svd(obj, [fullMatrices=true], [computeUV=true])

Arguments

obj is a matrix.

fullMatrices is a Boolean value. The default value is true.

computeUV is a Boolean value. The default value is true.

Details

Perform the singular decomposition of a matrix.

Given an m-by-n matrix A:

  • If fullMatrices=true, return an m-by-m matrix U (unitary matrix having left singular vectors as columns), an n-by-n matrix V (unitary matrix having right singular vectors as rows) and a vector s (singular values sorted in descending order) such that A=U*S*V. S is an m-by-n matrix with s as the diagonal elements.

  • If fullMatrices=false, remove the extra rows or columns of zeros from matrix S, along with the columns/rows in U and V that multiply those zeros in the expression A = U*S*V. Removing these zeros and columns/rows can improve execution time and reduce storage requirements without compromising the accuracy of the decomposition. The resulting matrix U is m-by-k, matrix V is k-by-n and matrix S is k-by-k with k=min(m,n).

  • If computeUV=false, only return vector s.

Examples

$ m=matrix([[2,1,0],[1,3,1],[0,1,4],[1,2,3]]);
$ U,s,V=svd(m);
$ U;

#0

#1

#2

-0.233976

0.57735

-0.782254

-0.560464

0.57735

0.593756

-0.79444

-0.57735

-0.188498

$ s;
[6.029042,3,1.284776]

$ V;

#0

#1

#2

#3

-0.170577

-0.449459

-0.620036

-0.620036

0.57735

0.57735

-0.57735

0

-0.755582

0.630862

-0.12472

-0.12472

-0.258199

-0.258199

-0.516398

0.774597

$ U,s,V=svd(m,fullMatrices=false);
$ V;

#0

#1

#2

#3

-0.170577

-0.449459

-0.620036

-0.620036

0.57735

0.57735

-0.57735

0

-0.755582

0.630862

-0.12472

-0.12472