|
|
◆ Zhegv()
| Sub Zhegv |
( |
IType As |
Long, |
|
|
JobZ As |
String, |
|
|
Uplo As |
String, |
|
|
N As |
Long, |
|
|
A() As |
Complex, |
|
|
B() As |
Complex, |
|
|
W() As |
Double, |
|
|
Info As |
Long |
|
) |
| |
(Simple driver) Generalized eigenvalue problem of Hermitian matrices
- Purpose
- This routine computes all the eigenvalues, and optionally, the eigenvectors of a complex generalized Hermitian-definite eigenproblem, of the form
Ax = λBx, ABx = λx or BAx = λx.
Here A and B are assumed to be Hermitian and B is also positive definite.
- Parameters
-
| [in] | IType | Specifies the problem type to be solved:
= 1: Ax = λBx.
= 2: ABx = λx.
= 3: BAx = λx. |
| [in] | Jobz | = "N": Compute eigenvalues only.
= "V": Compute eigenvalues and eigenvectors. |
| [in] | Uplo | = "U": Upper triangles of A and B are stored.
= "L": Lower triangles of A and B are stored. |
| [in] | N | Order of the matrices A and B. (N >= 0) (If N = 0, returns without computation) |
| [in,out] | A() | Array A(LA1 - 1, LA2 - 1) (LA1 >= N, LA2 >= N)
[in] N x N Hermitian matrix A. The upper or lower triangular part is to be stored in accordance with Uplo.
[out] jobz = "V": If Info = 0, A() contains the matrix Z of eigenvectors. The eigenvectors are normalized as follows:
IType = 1 or 2: Z^H*B*Z = I
IType = 3: Z^H*inv(B)*Z = I
Jobz = "N": The upper triangle (if Uplo = "U") or the lower triangle (if Uplo = "L") of A(), including the diagonal, is destroyed. |
| [in,out] | B() | Array B(LB1 - 1, LB2 - 1) (LB1 >= N, LB2 >= N)
[in] N x N Hermitian positive definite matrix B. The upper or lower triangular part is to be stored in accordance with Uplo.
[out] If Info <= N, the part of B() containing the matrix is overwritten by the triangular factor U or L from the Cholesky factorization B = U^H*U or B = L*L^H. |
| [out] | W() | Array W(LW - 1) (LW >= N)
If Info = 0, the eigenvalues in ascending order. |
| [out] | Info | = 0: Successful exit.
= -1: The argument Itype had an illegal value. (Itype < 1 or Itype > 3)
= -2: The argument Jobz had an illegal value. (Jobz <> "V" nor "N")
= -3: The argument Uplo had an illegal value. (Uplo <> "U" nor "L")
= -4: The argument N had an illegal value. (N < 0)
= -5: The argument A() is invalid.
= -6: The argument B() is invalid.
= -7: The argument W() is invalid.
= i (0 < i <= N): Zheev failed to converge; i off-diagonal elements of an intermediate tridiagonal form did not converge to zero.
= i (i > N): The leading minor of order i-N of B is not positive definite. The factorization of B could not be completed and no eigenvalues or eigenvectors were computed. |
- Reference
- LAPACK
- Example Program
- Compute the eigenvalues and the eigenvectors of a generalized Hermitian-definite eigenproblem of the form Ax = λBx, where A is an Hermitian matrix and B is an Hermitian positive definite matrix.
( 0.20 -0.11+0.93i 0.81-0.37i )
A = ( -0.11-0.93i -0.32 -0.80+0.92i )
( 0.81+0.37i -0.80-0.92i -0.29 )
( 2.20 -0.11+0.93i 0.81-0.37i )
B = ( -0.11-0.93i 2.32 -0.80+0.92i )
( 0.81+0.37i -0.80-0.92i 2.29 )
Sub Ex_Zhegv()
Const N = 3
Dim A(N - 1, N - 1) As Complex, B(N - 1, N - 1) As Complex, W(N - 1) As Double
Dim Info As Long
A(1, 0) = Cmplx(-0.11, -0.93): A(1, 1) = Cmplx(-0.32, 0)
A(2, 0) = Cmplx(0.81, 0.37): A(2, 1) = Cmplx(-0.8, -0.92): A(2, 2) = Cmplx(-0.29, 0)
B(1, 0) = Cmplx(-0.11, -0.93): B(1, 1) = Cmplx(2.32, 0)
B(2, 0) = Cmplx(0.81, 0.37): B(2, 1) = Cmplx(-0.8, -0.92): B(2, 2) = Cmplx(2.29, 0)
Call Zhegv(1, "V", "L", N, A(), B(), W(), Info)
Debug.Print "Eigenvalues =", W(0), W(1), W(2)
Debug.Print "Eigenvectors ="
Debug.Print "Info =", Info
End Sub
Function Cmplx(R As Double, Optional I As Double=0) As Complex Building complex number
Function Cimag(A As Complex) As Double Imaginary part of complex number
Function Creal(A As Complex) As Double Real part of complex number
Sub Zhegv(IType As Long, JobZ As String, Uplo As String, N As Long, A() As Complex, B() As Complex, W() As Double, Info As Long) (Simple driver) Generalized eigenvalue problem of Hermitian matrices
- Example Results
Eigenvalues = -4.97466704628586 5.03789053905172E-02 0.392451765416646
Eigenvectors =
-0.819151009277443 0 -0.413822310464714 9.35640263132256E-17
0.320545559438499 -0.890210156692715 -0.332130735287233 1.67477550936547E-02
0.935832442766443 -6.14475107289119E-02 -0.126697019588926 0.325735727937686
-0.354935871366059 -3.74256105252903E-17
0.17251768647939 0.196424402514893
-0.125117400789647 -0.228553336347363
Info = 0
|