Previous IDL Reference Guide: Procedures and Functions Next

SVDC

Syntax | Arguments | Keywords | Examples | Version History | See Also

The SVDC procedure computes the Singular Value Decomposition (SVD) of a square (n x n) or non-square (n x m) array as the product of orthogonal and diagonal arrays. SVD is a very powerful tool for the solution of linear systems, and is often used when a solution cannot be determined by other numerical algorithms.

The SVD of an (n x m) non-square array A is computed as the product of an (n x m) column orthogonal array U, an (n x n) diagonal array SV, composed of the singular values, and the transpose of an (n x n) orthogonal array V: A = U  SV  VT

SVDC is based on the routine svdcmp described in section 2.6 of Numerical Recipes in C: The Art of Scientific Computing (Second Edition), published by Cambridge University Press, and is used by permission.


Note
If you are working with complex inputs, use the LA_SVD procedure instead.

Syntax

SVDC, A, W, U, V [, /COLUMN] [, /DOUBLE] [, ITMAX=value]

Arguments

A

The square (n x n) or non-square (n x m) single- or double-precision floating-point array to decompose.

W

On output, W is an n-element output vector containing the "singular values."

U

On output, U is an n-column, m-row orthogonal array used in the decomposition of A.

V

On output, V is an n-column, n-row orthogonal array used in the decomposition of A.

Keywords

COLUMN

Set this keyword if the input array A is in column-major format (composed of column vectors) rather than in row-major format (composed of row vectors).

DOUBLE

Set this keyword to force the computation to be done in double-precision arithmetic.

ITMAX

Set this keyword to specify the maximum number of iterations. The default value is 30.

Examples

To find the singular values of an array A:

; Define the array A:  
A = [[1.0, 2.0, -1.0, 2.5], $  
     [1.5, 3.3, -0.5, 2.0], $  
     [3.1, 0.7,  2.2, 0.0], $  
     [0.0, 0.3, -2.0, 5.3], $  
     [2.1, 1.0,  4.3, 2.2], $  
     [0.0, 5.5,  3.8, 0.2]]  
  
; Compute the Singular Value Decomposition:  
SVDC, A, W, U, V  
  
; Print the singular values:  
PRINT, W  

IDL prints:

8.81973      2.65502      4.30598      6.84484  

To verify the decomposition, use the relationship A = U ## SV ## TRANSPOSE(V), where SV is a diagonal array created from the output vector W:

sv = FLTARR(4, 4)  
FOR K = 0, 3 DO sv[K,K] = W[K]  
result = U ## sv ## TRANSPOSE(V)  
PRINT, result  

IDL prints:

      1.00000      2.00000     -1.00000      2.50000  
      1.50000      3.30000    -0.500001      2.00000  
      3.10000     0.700000      2.20000      0.00000  
  2.23517e-08     0.300000     -2.00000      5.30000  
      2.10000     0.999999      4.30000      2.20000  
 -3.91155e-07      5.50000      3.80000     0.200000  

This is the input array, to within machine precision.

Version History

4.0
Introduced

See Also

CHOLDC, LA_SVD, LUDC, SVSOL, Linear Systems.

  IDL Online Help (March 06, 2007)