gijyutsu-keisan.com

8.変換行列

変換行列に関する使い方を説明します。
変換行列
FuncMatInv(mat1, Optional pivFlag, Optional plim, Optional rlim) 逆行列計算: ガウスジョルダン法
CalcMatHH(matH, vecA, ByVal rowNo, Optional rlim) ハウホルダー行列(Subプロシージャ)
FuncMatHess(mat1, Optional symFlag, Optional rlim) ハウスホルダーによるヘッセンベルグ変換
FuncMatBiDiag(mat1, Optional pivFlag, Optional plim, Optional rlim) ハウスホルダー変換による二重対角化

逆行列計算: ガウスジョルダン法

FuncMatInv(mat1, Optional pivFlag, Optional plim, Optional rlim)
戻り値 逆行列(二次配列)。
mat1 逆行列算出対象行列(正方行列:(行,列))
pivFlag 前処理フラグ(省略可)。
0=部分行ピボット、1=行ピボット、2=行スケーリング+ピボット、3=完全ピボット、4=スケーリング+完全ピボット
plim ピボット処理閾値(省略可)。デフォルト値=2e-12。
rlim 数値丸め閾値(省略可)。デフォルト値=2e-12。
VBAサンプルは次の通りです。
Sub test()

Dim cnt1 As Integer

Dim tmp As Variant
Dim matA As Variant

’行列の取得
matA = Range(Cells(3, 2), Cells(6, 5)).Value

’逆行列
tmp = FuncMatInv(matA)

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

End Sub
FuncMatInvは、Excel関数としても使えます。
Excelには逆行列関数としてMINV()が用意されています。

ハウスホルダーによるヘッセンベルグ変換

FuncMatHess(mat1, Optional symFlag, Optional rlim)
戻り値 ヘッセンベルグ行列(行,列)。
mat1 ヘッセンベルグ化対象行列(行,列)。
symFlag 対称行列フラグ(省略可)。
0=非対称行列、1=対称行列
rlim 数値丸め閾値(省略可)。デフォルト値=2e-12。
VBAサンプルは次の通りです。
Sub test()

Dim cnt1 As Integer

Dim tmp As Variant
Dim matA As Variant

’行列の取得
matA = Range(Cells(3, 2), Cells(6, 5)).Value

’逆行列
tmp = FuncMatHess(matA)

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

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

ハウスホルダー変換による二重対角化

FuncMatBiDiag(mat1, Optional pivFlag, Optional plim, Optional rlim)
戻り値 上から二重対角行列、左直交行列、右直交行列(行,列)。
mat1 二重対角化対象行列(行,列)。
symFlag 対称行列フラグ(省略可)。
0=非対称行列、1=対称行列
rlim 数値丸め閾値(省略可)。デフォルト値=2e-12。
VBAサンプルは次の通りです。
Sub test()

Dim tmp As Variant
Dim matA As Variant

’行列の取得
matA = Range(Cells(3, 2), Cells(10, 9)).Value

’逆行列
tmp = FuncMatBiDiag(matA)

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

End Sub

参考文献