Quantcast

Documentation Center

  • Trial Software
  • Product Updates

svd

Singular value decomposition of symbolic matrix

Syntax

Description

example

sigma = svd(X) returns a vector sigma containing the singular values of a symbolic matrix A.

example

[U,S,V] = svd(X) returns numeric unitary matrices U and V with the columns containing the singular vectors, and a diagonal matrix S containing the singular values. The matrices satisfy the condition A = U*S*V', where V' is the Hermitian transpose (the complex conjugate of the transpose) of V. The singular vector computation uses variable-precision arithmetic. svd does not compute symbolic singular vectors. Therefore, the input matrix X must be convertible to floating-point numbers. For example, it can be a matrix of symbolic numbers.

example

[U,S,V] = svd(X,0) produces the "economy size" decomposition. If X is an m-by-n matrix with m > n, then svd computes only the first n columns of U. In this case, S is an n-by-n matrix. For m <= n, this syntax is equivalent to svd(X).

example

[U,S,V] = svd(X,'econ') also produces the "economy size" decomposition. If X is an m-by-n matrix with m >= n, then this syntax is equivalent to svd(X,0). For m < n, svd computes only the first m columns of V. In this case, S is an m-by-m matrix.

Examples

Symbolic Singular Values

Compute the singular values of the symbolic 4-by-4 magic square:

A = sym(magic(4));
sigma = svd(A)
sigma =
        34
 8*5^(1/2)
 2*5^(1/2)
         0

Now, compute singular values of the matrix whose elements are symbolic expressions:

syms t real
A = [0 1; -1 0];
E = expm(t*A)
sigma = svd(E)
E =
[  cos(t), sin(t)]
[ -sin(t), cos(t)]
 
sigma =
 (cos(t)^2 + sin(t)^2)^(1/2)
 (cos(t)^2 + sin(t)^2)^(1/2)

Simplify the result:

sigma = simplify(sigma)
sigma =
 1
 1

For further computations, remove the assumption:

syms t clear

Floating-Point Singular Values

Convert the elements of the symbolic 4-by-4 magic square to floating-point numbers, and compute the singular values of the matrix:

A = sym(magic(4));
sigma = svd(vpa(A))
sigma =
                                                     34.0
                         17.88854381999831757127338934985
                        4.4721359549995793928183473374626
 0.0000000000000000000042127245515076439434819165724023*i

Singular Values and Singular Vectors

Compute the singular values and singular vectors of the 4-by-4 magic square:

old = digits(10);
A = sym(magic(4))
[U, S, V] = svd(A)
digits(old);
A =
[ 16,  2,  3, 13]
[  5, 11, 10,  8]
[  9,  7,  6, 12]
[  4, 14, 15,  1]

U =
[ 0.5,  0.6708203932,  0.5, -0.2236067977]
[ 0.5, -0.2236067977, -0.5, -0.6708203932]
[ 0.5,  0.2236067977, -0.5,  0.6708203932]
[ 0.5, -0.6708203932,  0.5,  0.2236067977]
 
S =
[ 34.0,           0,           0,               0]
[    0, 17.88854382,           0,               0]
[    0,           0, 4.472135955,               0]
[    0,           0,           0, 1.108401846e-15]
 
V =
[ 0.5,  0.5,  0.6708203932,  0.2236067977]
[ 0.5, -0.5, -0.2236067977,  0.6708203932]
[ 0.5, -0.5,  0.2236067977, -0.6708203932]
[ 0.5,  0.5, -0.6708203932, -0.2236067977]

Compute the product of U, S, and the Hermitian transpose of V with the 10-digit accuracy. The result is the original matrix A with all its elements converted to floating-point numbers:

vpa(U*S*V',10)
ans =
[ 16.0,  2.0,  3.0, 13.0]
[  5.0, 11.0, 10.0,  8.0]
[  9.0,  7.0,  6.0, 12.0]
[  4.0, 14.0, 15.0,  1.0]

"Economy Size" Decomposition

Use the second input argument 0 to compute the "economy size" decomposition of this 2-by-3 matrix:

old = digits(10);
A = sym([1 1;2 2; 2 2]);
[U, S, V] = svd(A, 0)
U =
[ 0.3333333333, -0.6666666667]
[ 0.6666666667,  0.6666666667]
[ 0.6666666667, -0.3333333333]
 
S =
[ 4.242640687, 0]
[           0, 0]
 
V =
[ 0.7071067812,  0.7071067812]
[ 0.7071067812, -0.7071067812]

Now, use the second input argument 'econ' to compute the "economy size" decomposition of matrix B. Here, the 3-by-2 matrix B is the transpose of A.

B = A';
[U, S, V] = svd(B, 'econ')
digits(old);
U =
[ 0.7071067812, -0.7071067812]
[ 0.7071067812,  0.7071067812]
 
S =
[ 4.242640687, 0]
[           0, 0]
 
V =
[ 0.3333333333,  0.6666666667]
[ 0.6666666667, -0.6666666667]
[ 0.6666666667,  0.3333333333]

Input Arguments

expand all

X — Input matrixsymbolic matrix

Input matrix specified as a symbolic matrix. For syntaxes with one output argument, the elements of X can be symbolic numbers, variables, expressions, or functions. For syntaxes with three output arguments, the elements of X must be convertible to floating-point numbers.

Output Arguments

expand all

sigma — Singular valuessymbolic vector | vector of symbolic numbers

Singular values of a matrix, returned as a vector. If sigma is a vector of numbers, then its elements are sorted in descending order.

U — Singular vectorsmatrix of symbolic numbers

Singular vectors, returned as a unitary matrix. Each column of this matrix is a singular vector.

S — Singular valuesmatrix of symbolic numbers

Singular values, returned as a diagonal matrix. Diagonal elements of this matrix appear in descending order.

V — Singular vectorsmatrix of symbolic numbers

Singular vectors, returned as a unitary matrix. Each column of this matrix is a singular vector.

More About

expand all

Tips

  • The second arguments 0 and 'econ' only affect the shape of the returned matrices. These arguments do not affect the performance of the computations.

  • Calling svd for numeric matrices that are not symbolic objects invokes the MATLAB® svd function.

See Also

| | | | | | | | | |

Related Examples

Was this topic helpful?