9.スケーリング/ピボッティング
12.連立方程式の解法(反復法)
行列基本操作 | ||
---|---|---|
FuncAryExtRow(mat1, rowExt, Optional NumFlag) | 二次配列から指定行を抽出 | |
FuncAryExtCol(mat1, colExt, Optional NumFlag) | 二次配列から指定列を抽出 | |
FuncMatTrans(mat1) | 行列の転置 | |
ExchgAryRow(matA, IdEx1, IdEx2) | 配列の指定行交換(Subプロシージャ) | |
ExchgAryCol(matA, IdEx1, IdEx2) | 配列の指定列交換(Subプロシージャ) | |
FuncChkSym(matA, Optional rlim) | 対称行列チェック |
戻り値 | 抽出行/列配列(二次配列)。 |
---|---|
mat1 | 対象とする二次配列。 |
rowExt colExt |
抽出行(rowExt)/列(colExt)番号。開始番号は0~。 1行のみ抽出:数値指定(rowExt=0) 連続複数行:"-"指定(rowExt=3-5) ばらばら複数行:","区切り指定(rowExt=2,5) ばらばら+連続:","と"-"の組み合わせ(rowExt=0,3-5,8,10-12) |
NumFlag |
未指定OK(false)。 true = 戻り値をDouble型にする。 false = 戻り値をVariant型にする。 |
Sub test() Dim matA As Variant Dim tmp As Variant ’セル値を配列に代入 matA = Range("B3:I10").Value ’配列matAからC2セルで指定した列を抽出 tmp = FuncAryExtCol(matA, Cells(2, 3).Value) ’抽出した二次配列をセルK3以降に出力 Range(Cells(3, 11), Cells(10, 11 + UBound(tmp, 2))).Value = tmp End Sub
戻り値 | 転置後の二次配列。 |
---|---|
mat1 | 転置させる二次配列。 |
Sub test() Dim matA As Variant Dim tmp As Variant ’セル値を配列に代入 matA = Range("B3:D10").Value ’配列matAからC2セルで指定した列を抽出 tmp = FuncMatTrans(matA) ’抽出した二次配列をセルK3以降に出力 Range(Cells(3, 6), Cells(3 + UBound(tmp, 1), 6 + UBound(tmp, 2))).Value = tmp End Sub
matA |
交換する対象となる配列。 プロシージャ実行後、行/列交換後の配列に入れ替わり。 |
IdEx1 IdEx2 |
交換する行/列番号。 |
Sub test() Dim cnt1 As Long, cnt2 As Long Dim tmp As Variant Dim matA() As Double ’セル値を配列に代入 tmp = Range("B3:I10").Value ’配列開始番号を0~にするため、配列を置き換える ReDim matA(UBound(tmp, 1) - 1, UBound(tmp, 2) - 1) For cnt1 = LBound(tmp, 1) To UBound(tmp, 1) For cnt2 = LBound(tmp, 2) To UBound(tmp, 2) matA(cnt1 - 1, cnt2 - 1) = tmp(cnt1, cnt2) Next cnt2 Next cnt1 ’配列matAからC2セルで指定した列を抽出 Call ExchgAryCol(matA, Cells(2, 3).Value, Cells(2, 4).Value) ’抽出した二次配列をセルK3以降に出力 Range(Cells(3, 11), Cells(10, 11 + UBound(matA, 2))).Value = matA End Sub
戻り値 |
true:対称の場合。 false:非対称の場合。 |
---|---|
matA | チェックする行列。 |
Sub test() Dim cnt1 As Long, cnt2 As Long Dim tmp As Variant Dim matA() As Double ’セル値を配列に代入 tmp = Range("B3:D5").Value ’配列開始番号を0~にするため、配列を置き換える ReDim matA(UBound(tmp, 1) - 1, UBound(tmp, 2) - 1) For cnt1 = LBound(tmp, 1) To UBound(tmp, 1) For cnt2 = LBound(tmp, 2) To UBound(tmp, 2) matA(cnt1 - 1, cnt2 - 1) = tmp(cnt1, cnt2) Next cnt2 Next cnt1 Erase tmp ’対称チェック tmp = FuncChkSym(matA) ’結果出力 MsgBox tmp End Sub