IMSL C# Numerical Library

SVD Class

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

For a list of all members of this type, see SVD Members.

System.Object
   Imsl.Math.SVD

public class SVD

Thread Safety

Public static (Shared in Visual Basic) members of this type are safe for multithreaded operations. Instance members are not guaranteed to be thread-safe.

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.

Requirements

Namespace: Imsl.Math

Assembly: ImslCS (in ImslCS.dll)

See Also

SVD Members | Imsl.Math Namespace | Example