Matrix.EigSymGen Method

Overload List

#SignatureDescription
1procedure EigSymGen(B: TMtx; D: TVec; V: TMtx; EigGenType: TEigGenType);Computes all the eigenvalues, and optionally, the eigenvectors of a generalized symmetric-definite eigenproblem.
2procedure EigSymGen(B: TMtx; D: TVec; Minimum: Double; Maximum: Double; V: TMtx; var VInfo: TIntegerArray; Tolerance: Double; EigGenType: TEigGenType);Computes generalized eigenvalues with reduction of the symmetric-definite generalized eigenvalues/eigenvectors problem to the normal eigenvalue case.
3procedure EigSymGen(B: TMtx; D: TVec; LowerRange: Integer; UpperRange: Integer; V: TMtx; var VInfo: TIntegerArray; Tolerance: Double; EigGenType: TEigGenType);Computes generalized eigenvalues with reduction of the symmetric-definite generalized eigenvalues/eigenvectors problem to the normal eigenvalue case.

Overload 1: procedure EigSymGen(B: TMtx; D: TVec; V: TMtx; EigGenType: TEigGenType);

Computes all the eigenvalues, and optionally, the eigenvectors of a generalized symmetric-definite eigenproblem.

#NameTypeDescription
1BTMtxsource TMtx
2DTVecsource TVec
3VTMtxsource TMtx
4EigGenTypeTEigGenType

Result: stored in self (calling object)

Remarks:

It can find solution to either of the following problems:

A X = lambda B X, A B X = lambda X, or B A X = lambda X

Here A and B are assumed to be symmetric (Hermitian) and B is also positive definite. Eigenvector are stored within V in columns.

Examples
var  D: TVec;
    A,B,C: TMtx;
begin
    CreateIt(D);
    CreateIt(A,B,C);
    try
        D.SetIt(2  ,False,[0,2]); // vector, length 2, real
        A.SetIt(2,2,False,[1,2,
            2,4]);  // 2x2, real matrix
        // A must be symmetric
        B.SetIt(2,2,False,[1,1,
            1,2]);  // 2x2, real matrix
        // B must be symmetric and positive definite
        A.EigSymGen(B,D); // Use A and B to find eigenvalues
    finally
        FreeIt(A,B,C);
        FreeIt(D);
    end;
end;
See Also: Matrix.Eig

Overload 2: procedure EigSymGen(B: TMtx; D: TVec; Minimum: Double; Maximum: Double; V: TMtx; var VInfo: TIntegerArray; Tolerance: Double; EigGenType: TEigGenType);

Computes generalized eigenvalues with reduction of the symmetric-definite generalized eigenvalues/eigenvectors problem to the normal eigenvalue case.

#NameTypeDescription
1BTMtxsource TMtx
2DTVecsource TVec
3MinimumDoublescalar
4MaximumDoublescalar
5VTMtxsource TMtx
6VInfoTIntegerArray
7ToleranceDoublescalar
8EigGenTypeTEigGenType

Result: stored in self (calling object)

Remarks:

The routine computes selected eigenvalues and optionally also eigenvectors. The problem is of type:

A X = lambda B X, A B X = lambda X, or B A X = lambda X

A and B are symmetric (Hermitian) and B is also positive definite. Eigenvalues and eigenvectors can be selected by specifying a range of values. Eigenvectors are not computed, if V is passed as nil. (NULL).

Tolerance parameter specifies the absolute error tolerance for the eigenvalues. An approximate eigenvalue is accepted as converged when it is determined to lie in an interval [a,b] of width less than or equal to

Tolerance + EPS / max( |a|,|b| ) ,

where EPS is the machine precision. If Tolerance is less than or equal to zero, then EPS*|T| will be used in its place, where |T| is the 1-norm of the tridiagonal matrix obtained by reducing A to tridiagonal form.

Eigenvalues will be computed most accurately when Tolerance is set to twice the underflow threshold, not zero. If this routine returns fails , indicating that some eigenvectors did not converge, try setting Tolerance to 2*UnderflowThreshold.

If V is assinged, VInfo contains values equal to 0 at indices for which eigenvector calculation converged. Eigenvector are stored within V in columns. The returned column count may vary between calls depending on the number of eigenvectors that converged. The eigenvectors are normalized as follows:

etAzBz, etBAz, Z**T*B*Z = I;
etABz        , Z**T*inv(B)*Z = I.

[Lapack Users Guide](Lapack Users Guide)

Examples
etAzBz, etBAz, Z**T*B*Z := I;
etABz        , Z**T*inv(B)*Z := I.

Overload 3: procedure EigSymGen(B: TMtx; D: TVec; LowerRange: Integer; UpperRange: Integer; V: TMtx; var VInfo: TIntegerArray; Tolerance: Double; EigGenType: TEigGenType);

Computes generalized eigenvalues with reduction of the symmetric-definite generalized eigenvalues/eigenvectors problem to the normal eigenvalue case.

#NameTypeDescription
1BTMtxsource TMtx
2DTVecsource TVec
3LowerRangeInteger
4UpperRangeInteger
5VTMtxsource TMtx
6VInfoTIntegerArray
7ToleranceDoublescalar
8EigGenTypeTEigGenType

Result: stored in self (calling object)

Remarks:

The routine computes selected eigenvalues and optionally also eigenvectors. The problem is of type:

A X = lambda B X, A B X = lambda X, or B A X = lambda X

A and B are symmetric (Hermitian) and B is also positive definite. Eigenvalues and eigenvectors can be selected by specifying a range of indexes of values. Eigenvectors are not computed, if V is passed as nil (NULL).

Tolerance parameter specifies the absolute error tolerance for the eigenvalues. An approximate eigenvalue is accepted as converged when it is determined to lie in an interval [a,b] of width less than or equal to

Tolerance + EPS / max( |a|,|b| ) ,

where EPS is the machine precision. If Tolerance is less than or equal to zero, then EPS*|T| will be used in its place, where |T| is the 1-norm of the tridiagonal matrix obtained by reducing A to tridiagonal form.

Eigenvalues will be computed most accurately when Tolerance is set to twice the underflow threshold, not zero. If this routine returns fails , indicating that some eigenvectors did not converge, try setting Tolerance to 2*UnderflowThreshold.

If V is assinged, VInfo contains values equal to 0 at indices for which eigenvector calculation converged. Eigenvector are stored within V in columns. The returned column count may vary between calls depending on the number of eigenvectors that converged. The eigenvectors are normalized as follows:

etAzBz, etBAz, Z**T*B*Z = I;
etABz        , Z**T*inv(B)*Z = I.