Overload List
| # | Signature | Description |
|---|---|---|
| 1 | procedure EigSymGen(const B: TMtx; const D: TVec; const V: TMtx; const EigGenType: TEigGenType); | Computes all the eigenvalues, and optionally, the eigenvectors of a generalized symmetric-definite eigenproblem. |
| 2 | procedure EigSymGen(const B: TMtx; const D: TVec; Minimum: Double; Maximum: Double; V: TMtx; var VInfo: TIntegerArray; Tolerance: Double; const EigGenType: TEigGenType); | Computes generalized eigenvalues with reduction of the symmetric-definite generalized eigenvalues/eigenvectors problem to the normal eigenvalue case. |
| 3 | procedure EigSymGen(const B: TMtx; const D: TVec; LowerRange: Integer; UpperRange: Integer; V: TMtx; var VInfo: TIntegerArray; Tolerance: Double; const EigGenType: TEigGenType); | Computes generalized eigenvalues with reduction of the symmetric-definite generalized eigenvalues/eigenvectors problem to the normal eigenvalue case. |
Overload 1: procedure EigSymGen(const B: TMtx; const D: TVec; const V: TMtx; const EigGenType: TEigGenType);
Computes all the eigenvalues, and optionally, the eigenvectors of a generalized symmetric-definite eigenproblem.
| # | Name | Type | Description |
|---|---|---|---|
| 1 | B | TMtx | |
| 2 | D | TVec | |
| 3 | V | TMtx | |
| 4 | EigGenType | TEigGenType |
Result: stored in self (calling object)
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.
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;
Overload 2: procedure EigSymGen(const B: TMtx; const D: TVec; Minimum: Double; Maximum: Double; V: TMtx; var VInfo: TIntegerArray; Tolerance: Double; const EigGenType: TEigGenType);
Computes generalized eigenvalues with reduction of the symmetric-definite generalized eigenvalues/eigenvectors problem to the normal eigenvalue case.
| # | Name | Type | Description |
|---|---|---|---|
| 1 | B | TMtx | |
| 2 | D | TVec | |
| 3 | Minimum | Double | scalar |
| 4 | Maximum | Double | scalar |
| 5 | V | TMtx | source TMtx |
| 6 | VInfo | TIntegerArray | |
| 7 | Tolerance | Double | scalar |
| 8 | EigGenType | TEigGenType |
Result: stored in self (calling object)
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).
etAzBz, etBAz, Z**T*B*Z := I;
etABz , Z**T*inv(B)*Z := I.
Overload 3: procedure EigSymGen(const B: TMtx; const D: TVec; LowerRange: Integer; UpperRange: Integer; V: TMtx; var VInfo: TIntegerArray; Tolerance: Double; const EigGenType: TEigGenType);
Computes generalized eigenvalues with reduction of the symmetric-definite generalized eigenvalues/eigenvectors problem to the normal eigenvalue case.
| # | Name | Type | Description |
|---|---|---|---|
| 1 | B | TMtx | |
| 2 | D | TVec | |
| 3 | LowerRange | Integer | |
| 4 | UpperRange | Integer | |
| 5 | V | TMtx | source TMtx |
| 6 | VInfo | TIntegerArray | |
| 7 | Tolerance | Double | scalar |
| 8 | EigGenType | TEigGenType |
Result: stored in self (calling object)
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.
The first eigenvalue index is 1 and the last index is equal to row/column count. LowerRange and UpperRange need to be specified within this interval: 1 <= LowerRange <= UpperRange <= Rows
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.