GenericDecompositionOperations<T>.SymmetricEigenvalueDecompose Method

Computes all eigenvalues and, optionally, eigenvectors of a real symmetric matrix A.

Definition

Namespace: Extreme.Mathematics.LinearAlgebra.Implementation
Assembly: Extreme.Numerics.Generic (in Extreme.Numerics.Generic.dll) Version: 8.1.4
C#
public override void SymmetricEigenvalueDecompose(
	char jobz,
	MatrixTriangle storedTriangle,
	int n,
	Array2D<T> a,
	Array1D<T> w,
	out int info
)

Parameters

jobz  Char
            = 'N':  Compute eigenvalues only;
            = 'V':  Compute eigenvalues and eigenvectors.
            
storedTriangle  MatrixTriangle
            = 'U':  Upper triangle of A is stored;
            = 'L':  Lower triangle of A is stored.
            
n  Int32
            The order of the matrix A.  N >= 0.
            
a  Array2D<T>
            Dimension (LDA, N)
            On entry, the symmetric matrix A.  If UPLO = 'U', the
            leading N-by-N upper triangular part of A contains the
            upper triangular part of the matrix A.  If UPLO = 'L',
            the leading N-by-N lower triangular part of A contains
            the lower triangular part of the matrix A.
            On exit, if JOBZ = 'V', then if info = 0, A contains the
            orthonormal eigenvectors of the matrix A.
            If JOBZ = 'N', then on exit the lower triangle (if UPLO='L')
            or the upper triangle (if UPLO='U') of A, including the
            diagonal, is destroyed.
            
            The leading dimension of the array A.  LDA >= max(1,N).
            
w  Array1D<T>
            Dimension (N)
            If info = 0, the eigenvalues in ascending order.
            
info  Int32
info is INTEGER
            = 0:  successful exit
            < 0:  if info = -i, the i-th argument had an illegal value
            > 0:  if info = i and JOBZ = 'N', then the algorithm failed
                  to converge; i off-diagonal elements of an intermediate
                  tridiagonal form did not converge to zero;
                  if info = i and JOBZ = 'V', then the algorithm failed
                  to compute an eigenvalue while working on the sub-matrix
                  lying in rows and columns info/(N+1) through
                  mod(info,N+1).
            

Remarks

            If eigenvectors are desired, it uses a
            divide and conquer algorithm.
            The divide and conquer algorithm makes very mild assumptions about
            floating point arithmetic. It will work on machines with a guard
            digit in add/subtract, or on those binary machines without guard
            digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or
            Cray-2. It could conceivably fail on hexadecimal or decimal machines
            without guard digits, but we know of none.
            Because of large use of BLAS of level 3, DSYEVD needs N**2 more
            workspace than DSYEVX.
            

Contributors:

Jeff Rutter, Computer Science Division, University of California at Berkeley, USA \n Modified by Francoise Tisseur, University of Tennessee \n Modified description of info. Sven, 16 Feb 05. \n

This method corresponds to the LAPACK routine DSYEVD.

See Also