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

◆ Dstev()

Sub Dstev ( Jobz As  String,
N As  Long,
D() As  Double,
E() As  Double,
Z() As  Double,
Info As  Long 
)

(シンプルドライバ) 固有値・固有ベクトル (対称3重対角行列)

目的
本ルーチンは実対称3重対角行列 A のすべての固有値, および, 必要により固有ベクトルを求める.
引数
[in]Jobz= "N": 固有値のみ求める.
= "V": 固有値と固有ベクトルを求める.
[in]N行列Aの行および列数. (N >= 0) (N = 0 の場合, 処理を行わずに戻る)
[in,out]D()配列 D(LD - 1) (LD >= N)
[in] 対称3重対角行列AのN個の対角要素.
[out] Info = の場合, 求められた固有値(昇順).
[in,out]E()配列 E(LE - 1) (LE >= N - 1)
[in] 対称3重対角行列AのN-1個の副対角要素(E(0)〜E(N-2)に格納).
[out] E()の内容は壊される.
[out]Z()配列 Z(LZ1 - 1, LZ2 - 1) (LZ1 >= N, LZ2 >= N)
Jobz = "V": Info = の場合, Z()に正規直交固有ベクトルが入る. D(i)に関連する固有ベクトルがi列に入る.
Jobz = "N": Z()は参照されない.
[out]Info= 0: 正常終了.
= -1: パラメータ Jobz の誤り. (Jobz <> "V" および "N")
= -2: パラメータ N の誤り. (N < 0)
= -3: パラメータ D() の誤り.
= -4: パラメータ E() の誤り.
= -5: パラメータ Z() の誤り.
= i > 0: 収束しなかった. E() の非対角要素のうち i 個が 0 にならなかった.
出典
LAPACK
使用例
対称3重対角行列Aの固有値・固有ベクトルを求める.
ただし,
( 2.58 -0.99 0 )
A = ( -0.99 0.69 -0.03 )
( 0 -0.03 0.18 )
とする.
Sub Ex_Dstev()
Const N = 3
Dim D(N - 1) As Double, E(N - 2) As Double, Z(N - 1, N - 1) As Double
Dim Info As Long
D(0) = 2.58: D(1) = 0.69: D(2) = 0.18
E(0) = -0.99: E(1) = -0.03
Call Dstev("V", N, D(), E(), Z(), Info)
Debug.Print "Eigenvalues =", D(0), D(1), D(2)
Debug.Print "Eigenvectors ="
Debug.Print Z(0, 0), Z(0, 1), Z(0, 2)
Debug.Print Z(1, 0), Z(1, 1), Z(1, 2)
Debug.Print Z(2, 0), Z(2, 1), Z(2, 2)
Debug.Print "Info =", Info
End Sub
Sub Dstev(Jobz As String, N As Long, D() As Double, E() As Double, Z() As Double, Info As Long)
(シンプルドライバ) 固有値・固有ベクトル (対称3重対角行列)
実行結果
Eigenvalues = 0.171899161473039 0.274429936398504 3.00367090212846
Eigenvectors =
0.106563041190365 -0.378750155986403 -0.919343590608286
0.259206614996466 -0.882055576996615 0.393433463029321
0.959925126764757 0.280225406466732 -4.18002107893757E-03
Info = 0