gijyutsu-keisan.com

13.固有値計算

固有値計算に関する使い方を説明します。
固有値計算
FuncEigQR(mat1, Optional outFlag, Optional slim, Optional Nres, Optional pivFlag, Optional plim, Optional rlim) QR法(非対称)
FuncEigPow(mat1, Optional outFlag, Optional slim, Optional Nres, Optional rlim) べき乗法
FuncEigJacobi(mat1, Optional outFlag, Optional slim, Optional Nres, Optional rlim) ヤコビ法
CalcMatInvIter(matX, ByVal matA, ByVal vecEig, Optional method, Optional slim, Optional Nres, Optional rlim) 逆反復法(Subプロシージャ)
QR法の固有ベクトル算出で用いており、説明は割愛します。

QR法(非対称)

FuncEigQR(mat1, Optional outFlag, Optional slim, Optional Nres, Optional pivFlag, Optional plim, Optional rlim)
対称、非対称問わず行列のすべての固有値と固有ベクトルを算出します。 固有ベクトルは逆反復法により算出しています。 計算量は多いですが、最も汎用性の高い計算方法です。 特に要求がなければ、固有値、固有ベクトル計算の計算にはこの関数を用いることをお勧めします。
QR法の詳細は固有値計算ページをご覧ください。
戻り値 最大固有値とそれに応じた固有ベクトル。
mat1 行列(二次配列)。
outFlag 出力方法の設定(省略可)。
0=固有値のみ(デフォルト),1=固有値+固有ベクトル
slim 収束判定閾値(省略可)。 デフォルト値=1e-8。
Nres 反復計算最大回数(省略可)。 デフォルト値=100。
rlim 数値丸め閾値(省略可)。 デフォルト値=2e-12。
VBAサンプルは次の通りです。
mat1としてセルB3~E6に、下図のように数値を入力します。
FuncEigQRは、Excel関数としても使えます。

べき乗法

FuncEigPow(mat1, Optional outFlag, Optional slim, Optional Nres, Optional rlim)
対称、非対称問わず行列の最大固有値とそれに対応する固有ベクトルを算出します。
べき乗法の詳細は固有値計算ページをご覧ください。
戻り値 最大固有値とそれに応じた固有ベクトル。
mat1 行列(二次配列)。
outFlag 出力方法の設定(省略可)。
0=固有値のみ(デフォルト),1=固有値+固有ベクトル
slim 収束判定閾値(省略可)。 デフォルト値=1e-8。
Nres 反復計算最大回数(省略可)。 デフォルト値=100。
rlim 数値丸め閾値(省略可)。 デフォルト値=2e-12。
VBAサンプルは次の通りです。
mat1としてセルB3~E6に、下図のように数値を入力します。
Sub test()

Dim tmp As Variant
Dim mat1 As Variant

’セル値を配列に代入
mat1 = Range("B3:E6").Value

’べき乗法による固有値計算
tmp = FuncEigPow(mat1, 1)

’結果出力
Range(Cells(3, 7), Cells(3 + UBound(tmp, 1), 7 + UBound(tmp, 2))).Value = tmp

End Sub
FuncEigPowは、Excel関数としても使えます。

ヤコビ法

FuncEigJacobi(mat1, Optional outFlag, Optional slim, Optional Nres, Optional rlim)
対称行列のすべての固有値と固有ベクトルを算出します。
ヤコビ法の詳細は固有値計算ページをご覧ください。
戻り値 最大固有値とそれに応じた固有ベクトル。
mat1 行列(二次配列)。
outFlag 出力方法の設定(省略可)。
0=固有値のみ(デフォルト),1=固有値+固有ベクトル
slim 収束判定閾値(省略可)。 デフォルト値=1e-8。
Nres 反復計算最大回数(省略可)。 デフォルト値=100。
rlim 数値丸め閾値(省略可)。 デフォルト値=2e-12。
VBAサンプルは次の通りです。
mat1としてセルB3~E6に、下図のように数値を入力します。
Sub test()

Dim tmp As Variant
Dim mat1 As Variant

’セル値を配列に代入
mat1 = Range("B3:D5").Value

’QR法による固有値計算
tmp = FuncEigQR(mat1, 1, , 1000)

’結果出力
Range(Cells(3, 6), Cells(3 + UBound(tmp, 1), 6 + UBound(tmp, 2))).Value = tmp

End Sub
FuncEigJacobiは、Excel関数としても使えます。

参考文献