|
|
◆ 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(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 "Info =", Info
End Sub
Function Cmplx(R As Double, Optional I As Double=0) As Complex 複素数の作成
Function Cimag(A As Complex) As Double 複素数の虚数部
Function Creal(A As Complex) As Double 複素数の実数部
Sub Zheevd(Jobz As String, Uplo As String, N As Long, A() As Complex, W() As Double, Info As Long) (分割統治法ドライバ) 固有値・固有ベクトル (エルミート行列)
- 実行結果
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
|