XLPack 6.1
Excel VBA 数値計算ライブラリ・リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ Zheevd()

Sub Zheevd ( Jobz As  String,
Uplo As  String,
N As  Long,
A() As  Complex,
W() As  Double,
Info As  Long 
)

(分割統治法ドライバ) 固有値・固有ベクトル (エルミート行列)

目的
本ルーチンはエルミート行列 A のすべての固有値, および, 必要により固有ベクトルを求める. 固有値のみ求める場合, QL法またはQR法を使用する. 固有ベクトルも求める場合, 分割統治法を使用する.
引数
[in]Jobz= "N": 固有値のみ求める.
= "V": 固有値と固有ベクトルを求める.
[in]Uplo= "U": A の上三角部分を格納する.
= "L": A の下三角部分を格納する.
[in]N行列Aの行および列数. (N >= 0) (N = 0 の場合, 処理を行わずに戻る)
[in,out]A()配列 A(LA1 - 1, LA2 - 1) (LA1 >= N, LA2 >= N)
[in] エルミート行列 A. Uplo = "U" の場合, A() の N x N 上三角部分に行列 A の上三角部分を格納する. Uplo = "L" の場合, A() の N x N 下三角部分に行列 A の下三角部分を格納する.
[out] Jobz = "V": Info = 0 の場合, 行列 A の正規直交固有ベクトルを A() に返す.
  Jobz = "N": A() の下三角部分(Uplo = "L" の場合)あるいは上三角部分(Uplo = "U" の場合)は対角部分を含め壊される.
[out]W()配列 W(LW - 1) (LW >= N)
Info = 0 の場合, 求められた固有値(昇順).
[out]Info= 0: 正常終了.
= -1: パラメータ Jobz の誤り. (Jobz <> "V" および "N")
= -2: パラメータ Uplo の誤り. (Uplo <> "U" および "L")
= -3: パラメータ N の誤り. (N < 0)
= -4: パラメータ A() の誤り.
= -5: パラメータ W() の誤り.
= i > 0: 収束しなかった. 中間結果の3重対角形の非対角要素のうち i 個が 0 に収束しなかった.
出典
LAPACK
使用例
エルミート行列 A の固有値・固有ベクトルを求める.
ただし,
( 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 )
とする.
Sub Ex_Zheevd()
Const N = 3
Dim A(N - 1, N - 1) As Complex, W(N - 1) As Double, Info As Long
A(0, 0) = Cmplx(0.2, 0)
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)
Call Zheevd("V", "L", N, A(), W(), Info)
Debug.Print "Eigenvalues =", W(0), W(1), W(2)
Debug.Print "Eigenvectors ="
Debug.Print Creal(A(0, 0)), Cimag(A(0, 0)), Creal(A(0, 1)), Cimag(A(0, 1))
Debug.Print Creal(A(1, 0)), Cimag(A(1, 0)), Creal(A(1, 1)), Cimag(A(1, 1))
Debug.Print Creal(A(2, 0)), Cimag(A(2, 0)), Creal(A(2, 1)), Cimag(A(2, 1))
Debug.Print Creal(A(0, 2)), Cimag(A(0, 2))
Debug.Print Creal(A(1, 2)), Cimag(A(1, 2))
Debug.Print Creal(A(2, 2)), Cimag(A(2, 2))
Debug.Print "Info =", Info
End Sub
実行結果
Eigenvalues = -2.05348849668514 0.124622388617308 1.51886610806783
Eigenvectors =
-0.449276526719113 -0 0.654793596518192 0
0.227247885813611 -0.597641779578735 0.519997178670921 -3.19846835072552E-02
0.621236109316912 -5.83009495222983E-02 0.204907317474214 -0.507777757881847
-0.607779522934083 0
0.392237107311198 0.407323787101333
-0.23846608290599 -0.503959683819116
Info = 0