Singular Value Decomposition (SVD) of a rectangular matrix of type double.

Namespace: Imsl.Math
Assembly: ImslCS (in ImslCS.dll) Version: 6.5.0.0

Syntax

C#
[SerializableAttribute]
public class SVD
Visual Basic (Declaration)
<SerializableAttribute> _
Public Class SVD
Visual C++
[SerializableAttribute]
public ref class SVD

Remarks

SVD is based on the LINPACK routine SSVDC; see Dongarra et al. (1979).

Let n be the number of rows in A and let p be the number of columns in A. For any

n x p matrix A, there exists an n x n orthogonal matrix U and a p x p orthogonal matrix V such that

U^T A V = \left\{  \begin{array}{cl} \left[ 
            \begin{array}{l} \Sigma \\ 0 \end{array} \right] & \mbox{if $n \ge 
            p$} \\ \left[ \Sigma \,\, 0 \right] & \mbox{if $n \le p$} 
            \end{array} \right.

where \Sigma = {\rm diag}(\sigma_1, \ldots, \sigma_m)
            , and m = \min(n, p). The scalars \sigma_1 \geq \sigma_2 \geq \ldots \geq \sigma_m \geq 0
            are called the singular values of A. The columns of U are called the left singular vectors of A. The columns of V are called the right singular vectors of A.

The estimated rank of A is the number of \sigma_k
            that is larger than a tolerance \eta. If \tau is the parameter tol in the program, then

\eta  = \left\{ \begin{array}{cl} \tau \hfill 
            & \mbox {if $\tau \gt 0$} \\ {\left| \tau \right|\left\| A 
            \right\|_\infty } \hfill & \mbox {if $\tau \lt  0$} \end{array} 
            \right.

The Moore-Penrose generalized inverse of the matrix is computed by partitioning the matrices U, V and \Sigma as U = (U_1,U_2), V = (V_1,V_2) and \Sigma_1 = {\rm diag}(\sigma_1,\ldots,\sigma_k) where the "1" matrices are k by k. The Moore-Penrose generalized inverse is V_1 \Sigma_1^{-1} U_1^T.

Inheritance Hierarchy

System..::.Object
Imsl.Math..::.SVD

See Also