Class ComplexSVD
- All Implemented Interfaces:
Serializable
Complex.
ComplexSVD is based on the LAPACK routines ZGEBRD
and ZBDSQR; see the LAPACK User's Guide by Anderson et al.
(1999).
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 unitary matrix U and a p x p unitary matrix V such that
$$U^H 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 k of A is the number of singular values
that are 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 \ge 0$} \\ {\left| \tau \right|\left\| A \right\|_2 } \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^H\).
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classThe iteration did not converge -
Constructor Summary
ConstructorsConstructorDescriptionComplexSVD(Complex[][] a) Construct the singular value decomposition of a rectangular matrix with default tolerance.ComplexSVD(Complex[][] a, double tol) Construct the singular value decomposition of a rectangular matrix with a given tolerance.ComplexSVD(ComplexSVD svdProblem) Copy constructor for the computation of the singular value decomposition of a complex matrix. -
Method Summary
Modifier and TypeMethodDescriptionintgetInfo()Returns convergence information about the singular values.Complex[][]Compute the Moore-Penrose generalized inverse.intgetRank()Returns the rank of the matrix used to construct this instance.double[]getS()Returns the singular values.Complex[][]getU()Returns the left singular vectors.Complex[][]getV()Returns the right singular vectors.
-
Constructor Details
-
ComplexSVD
Construct the singular value decomposition of a rectangular matrix with a given tolerance. Iftolis positive, then a singular value is considered negligible if the singular value is less than or equal totol. Iftolis negative, then a singular value is considered negligible if the singular value is less than or equal to the absolute value of the product oftoland the approximate maximum singular value of the input matrix. In the latter case, the absolute value oftolgenerally contains an estimate of the level of the relative error in the data.- Parameters:
a- adoublematrix for which the singular value decomposition is to be computed.tol- adoublescalar containing the tolerance used to determine when a singular value is negligible.- Throws:
IllegalArgumentException- is thrown if the row lengths of input matrixaare not equal (for example, the matrix edges are "jagged") or if input matrixais null or empty.ComplexSVD.DidNotConvergeException- is thrown if the rank cannot be determined because convergence was not obtained for all singular values.
-
ComplexSVD
Construct the singular value decomposition of a rectangular matrix with default tolerance. The tolerance used iseps * StrictMath.pow(eps, -0.125), where eps = 2.2204460492503e-16. This tolerance is used to determine rank. A singular value is considered negligible if the singular value is less than or equal to this tolerance.- Parameters:
a- aComplexmatrix whose singular value decomposition is to be computed.- Throws:
IllegalArgumentException- is thrown if the row lengths of input matrixaare not equal (i.e. the matrix edges are "jagged") or if input matrixais null or empty.ComplexSVD.DidNotConvergeException- is thrown when the rank cannot be determined because convergence was not obtained for all singular values.
-
ComplexSVD
Copy constructor for the computation of the singular value decomposition of a complex matrix.- Parameters:
svdProblem- theComplexSVDobject to be copied
-
-
Method Details
-
getRank
public int getRank()Returns the rank of the matrix used to construct this instance.- Returns:
- an
intscalar containing the rank of the matrix used to construct this instance. The estimated rank of the input matrix is the number of singular values which are larger than a tolerance.
-
getU
Returns the left singular vectors.- Returns:
- a
Complexmatrix containing the left singular vectors.
-
getV
Returns the right singular vectors.- Returns:
- a
Complexmatrix containing the right singular vectors.
-
getS
public double[] getS()Returns the singular values.- Returns:
- a
doublearray containing the singular values of the matrix.
-
getInfo
public int getInfo()Returns convergence information about the singular values.- Returns:
- an
intindicating if the SVD algorithm applied to the bidiagonally reduced input matrixahas converged. If the returned value is zero, the algorithm has converged to a diagonal matrix. If the returned valueiis greater than zero, thenielements on the superdiagonal of the bidiagonal matrix have not converged to zero.
-
getInverse
Compute the Moore-Penrose generalized inverse.- Returns:
- a
Complexmatrix containing the generalized inverse of the matrix used to construct this instance.
-