gijyutsu-keisan.com

4.行列基本計算

行列基本計算に関する使い方を説明します。
行列基本計算
FuncMatSum(mat1, mat2) 行列の和
FuncMatDif(mat1, mat2) 行列の差
FuncMatScl(mat1, scl) 行列のスカラー倍
FuncMatPro(mat1, mat2, Optional rlim) 行列の積
FuncMatHad(mat1, mat2, Optional rlim) アダマール積
FuncMatDiad(mat1, mat2, Optional rlim) ダイアド積

行列の和/差

  • FuncMatSum(mat1, mat2)
  • FuncMatDif(mat1, mat2)
戻り値 行列の和/差の結果(二次配列)。
mat1
mat2
計算対象とする二次配列。
mat1、mat2ともに同じサイズの行列。

VBAサンプルは次の通りです。
mat1としてセルB3~D5に、mat2にセルF3~H5に、下図のように数値を入力します。
Sub test()

Dim tmp As Variant
Dim matA As Variant
Dim matB As Variant

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

’行列の和
tmp = FuncMatSum(matA, matB)

’結果出力
Range(Cells(3, 10), Cells(5, 12)).Value = tmp

End Sub

VBA実行後の結果は次のとおりです。
FuncMatSum、FuncMatDifは、Excel関数としても使えます。

行列のスカラー倍

FuncMatScl(mat1, scl)
戻り値 スカラー倍した行列。
mat1 スカラー倍する対象行列。
scl スカラー倍の数値。
VBAサンプルは次の通りです(列交換を例にとります)。
mat1にセルB3~D10に下図のように数値を入力します。
Sub test()

Dim tmp As Variant
Dim matA As Variant
Dim scl As Double

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

’行列の和
tmp = FuncMatScl(matA, scl)

’結果出力
Range(Cells(3, 8), Cells(5, 10)).Value = tmp

End Sub
VBA実行後の結果は次のとおりです。
FuncMatSclは、Excel関数としても使えます。

行列の積

FuncMatPro(mat1, mat2, Optional rlim)
戻り値 行列積の結果。
mat1
mat2
計算対象行列(二次配列)。
rlim 計算丸め誤差の閾値(省略可)。
VBAサンプルは次の通りです。
mat1としてセルB3~D5に、mat2にセルF3~H5に、下図のように数値を入力します。
Sub test()

Dim tmp As Variant
Dim matA As Variant
Dim matB As Variant

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

’行列の積
tmp = FuncMatPro(matA, matB)

’結果出力
Range(Cells(3, 10), Cells(5, 12)).Value = tmp

End Sub
VBA実行後の結果は次のとおりです。
FuncMatProは、Excel関数としても使えます。
行列の積は、Excel関数も準備されています(MMULT関数)

アダマール積

FuncMatHad(mat1, mat2, Optional rlim)
戻り値 アダマール積結果。
mat1
mat2
計算対象行列(二次配列)。
rlim 計算丸め誤差の閾値(省略可)。
VBAサンプルは次の通りです。
mat1としてセルB3~D5に、mat2にセルF3~H5に、下図のように数値を入力します。
Sub test()

Dim tmp As Variant
Dim matA As Variant
Dim matB As Variant

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

’アダマール積
tmp = FuncMatHad(matA, matB)

’結果出力
Range(Cells(3, 10), Cells(5, 12)).Value = tmp

End Sub
VBA実行後の結果は次のとおりです。
FuncMatHadは、Excel関数としても使えます。

ダイアド積

FuncMatDiad(mat1, mat2)
戻り値 ダイアド積結果。
mat1
mat2
計算対象行列(二次配列)。
rlim 計算丸め誤差の閾値(省略可)。
VBAサンプルは次の通りです。
mat1としてセルB3~D5に、mat2にセルF3~H5に、下図のように数値を入力します。
Sub test()

Dim tmp As Variant
Dim matA As Variant
Dim matB As Variant

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

’行列の和
tmp = FuncMatDiad(matA, matB)

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

End Sub
VBA実行後の結果は次のとおりです。
FuncMatDiadは、Excel関数としても使えます。

参考文献