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関数としても使えます。