gijyutsu-keisan.com

7.行列の作成

行列の作成に関する使い方を説明します。

行列の作成
FuncMatId(order) 単位行列
FuncMatZeros(Nr, Nc) 零行列
FuncMatOnes(Nr, Nc) 要素がすべて1の行列
FuncMatRnd(Rmax, vartype, Flag, Nr, Optional Nc) 乱数行列
FuncMatBaseTr(N1, N2, order) 基底変換行列(行/列入れ替え)
FuncMatBaseMu(N1, scl, order) 基底変換行列(スカラー倍)
FuncMatBaseAd(N1, N2, scl, order) 基底変換行列(追加)
FuncMatGivens(N1, N2, fcos, fsin, order) ギブンス変換行列
FuncMatGauss(matA, colNo) ガウス変換行列
ガウス消去法などで用いる行列で、単独で利用することはないため説明は割愛します。

単位行列の作成

FuncMatId(order)
戻り値 単位行列(二次配列)
order 行列の次数
5次の単位行列を作成するVBAサンプルは次の通りです。

Sub test()

Dim tmp As Variant

'単位行列
tmp = FuncMatId(5)

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

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

零行列・要素がすべて1の行列

  • FuncMatZeros(Nr, Nc)
  • FuncMatOnes(Nr, Nc)
戻り値 成分がすべて0/1となる行列(二次配列)。
Nr 行数
Nc 列数
5×3サイズの零行列を作成するVBAサンプルは次の通りです。
Sub test()

Dim tmp As Variant

'零行列
tmp = FuncMatZeros(5, 3)

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

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

乱数行列

FuncMatRnd(Rmax, vartype, Flag, Nr, Optional Nc)
戻り値 乱数を成分とする行列。
Rmax 乱数最大値
vartype 数値型。0=Int, 1=単精度
Flag 0=正のみ, 1=負のみ, 2=正負両方。
Nr 行数。
Nc 列数(省略可)。
省略時は行数分の正方行列を作成します。
VBAサンプルは次の通りです。
Sub test()

Dim tmp As Variant

'乱数行列
tmp = FuncMatRnd(10, 0, 0, 7, 5)

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

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

基底変換行列(行/列入れ替え)

FuncMatBaseTr(N1, N2, order)
戻り値 行(列)入れ替え行列(二次配列)。
N1,N2 交換行(列)番号。
order 行列の次数。

VBAサンプルは次の通りです。
Sub test()

Dim tmp As Variant

'基底変換行列(行/列入れ替え)
tmp = FuncMatBaseTr(2, 4, 5)

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

End Sub

FuncMatBaseTr、Excel関数としても使えます。

基底変換行列(スカラー倍)

FuncMatBaseMu(N1, scl, order)
戻り値 行(列)入れ替え行列(二次配列)。
N1 スカラー倍する行(列)番号。
scl スカラー倍。
order 行列の次数。

VBAサンプルは次の通りです。
Sub test()

Dim tmp As Variant

'基底変換行列(スカラー倍)
tmp = FuncMatBaseMu(3, 100, 5)

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

End Sub

FuncMatBaseTr、Excel関数としても使えます。

基底変換行列(追加)

FuncMatBaseAd(N1, N2, scl, order)
戻り値 行(列)入れ替え行列(二次配列)。
N1
N2
scl スカラー倍。
order 行列の次数。

VBAサンプルは次の通りです。
Sub test()

Dim tmp As Variant

'基底変換行列(スカラー倍)
tmp = FuncMatBaseMu(3, 100, 5)

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

End Sub

FuncMatBaseTrは、Excel関数としても使えます。

ギブンス変換行列

FuncMatGivens(N1, N2, fcos, fsin, order)
戻り値 行(列)入れ替え行列(二次配列)。
N1, N2 変換する行(列)番号。
fcos, fsin cos、sinの値(角度指定はしていません)。
order 行列の次数。
VBAサンプルは次の通りです。
Sub test()

Dim tmp As Variant
Dim ang As Double

ang = Application.WorksheetFunction.Radians(60)

'基底変換行列(追加)
tmp = FuncMatGivens(3, 5, Cos(ang), Sin(ang), 7)

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

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

参考文献