Documentation

This is machine translation

Translated by Microsoft
Mouse over text to see original. Click the button below to return to the English verison of the page.

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.0000000000000000000042127245515076439434819165724023i

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]

Related Examples

Input Arguments

collapse all

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

collapse all

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

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

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

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

More About

collapse 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

| | | | | | |

Introduced before R2006a

Was this topic helpful?