You are here: Symbol Reference > MtxVec Namespace > Classes > TMtx Class > public > EigSymGen Method > TMtx.EigSymGen Method (TMtx, TVec, double, double, TMtx, TIntegerArray, double, TEigGenType)
MtxVec VCL
ContentsIndex
PreviousUpNext
TMtx.EigSymGen Method (TMtx, TVec, double, double, TMtx, TIntegerArray, double, TEigGenType)

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

Pascal
procedure EigSymGen(const B: TMtx; const D: TVec; Minimum: double; Maximum: double; V: TMtx; var VInfo: TIntegerArray; Tolerance: double = 0; const EigGenType: TEigGenType = etAzBz); overload;

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.

 

.

Copyright (c) 1999-2025 by Dew Research. All rights reserved.
What do you think about this topic? Send feedback!