XLPack 7.0
XLPack 数値計算ライブラリ (Excel VBA) リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ ZMMWrite()

Sub ZMMWrite ( Fname As  String,
Nrow As  Long,
Ncol As  Long,
Nnz As  Long,
Val() As  Complex,
Ptr() As  Long,
Ind() As  Long,
DataType As  Long,
MatShape As  Long,
MatForm As  Long,
Optional Info As  Long,
Optional Fchk As  Long = 0,
Optional Base As  Long = -1,
Optional Format As  Long = 0 
)

Matrix Market形式ファイルへの書き込み (複素行列)

目的
Matrix Market形式ファイルに疎行列(CSR, CSC または COO形式)または密行列を書き込む.

疎行列データの内容チェックは行わずに格納順にそのまま書き込む.
引数
[in]Fname出力ファイル名.
[in]Nrow行列の行数.
[in]Ncol行列の列数.
[in]Nnz行列の非ゼロ要素数.
[in]Val()配列 Val(LVal - 1) (LValは次のとおり)
格納形式    行列の形状           LVal (最小値)
----------  -------------------  -----------------
0 (疎行列)                       Nnz
1 (密行列)  0 (一般行列)         Nrow*Ncol
            1 (対称行列)         Ncol*(Ncol + 1)/2
            2 (歪対称行列)       Ncol*(Ncol - 1)/2
            3 (エルミート行列)   Ncol*(Ncol + 1)/2
疎行列の非ゼロ要素, または, 密行列の全要素.
データ型 = 2 (パターン) のときは参照されない.
[in]Ptr()配列 Ptr(LPtr - 1) (LPtr >= Ncol + 1 (CSC形式を書き込む場合), LPtr >= Nrow + 1 (CSR形式を書き込む場合), LPtr >= Nnz (COO形式を書き込む場合))
非ゼロ要素の行ポインタ(CSR形式を書き込む場合), 列ポインタ(CSC形式を書き込む場合), または, 行インデクス(COO形式を書き込む場合).
格納形式 = 1 (密行列) のときは参照されない.
[in]Ind()配列 Ind(LInd - 1) (LInd >= Nnz)
非ゼロ要素の行インデクス(CSC形式を書き込む場合)または列インデクス(CSRまたはCOO形式を書き込む場合).
格納形式 = 1 (密行列) のときは参照されない.
[in]DataType行列のデータ型.
= 1: 複素数
= 2: パターン.
[in]MatShape行列の形状.
= 0: 一般行列.
= 1: 対称行列.
= 2: 歪対称(交代)行列.
= 3: エルミート行列.
[in]MatForm行列の格納形式.
= 0: 疎行列.
= 1: 密行列.
[out]Info(省略可)
= 0: 正常終了.
= i < 0: (-i)番目の入力パラメータの誤り.
= 1: ファイルがオープンできなかった.
= 2: ファイルがすでに存在する.
= 4: タイプ指定の誤り.
[in]Fchk(省略可)
出力ファイルのチェックフラグ. (省略時 = 0)
= 0: 指定されたファイルがすでに存在してかどうかをチェックせずに上書きする.
= 1: 指定されたファイルがすでに存在していればエラー(Info = 2)を返す.
[in]Base(省略可)
COO形式 (Format = 2) の場合の Ptr および Ind のインデクス形式. (省略時 = Ptr(0) (CSR または CSC (Format = 0 または 1) の場合), 0 (COO (Format = 2) の場合))
= 0: 0-ベース(C形式): 開始インデクス値が 0.
= 1: 1-ベース(Fortran形式): 開始インデクス値が 1.
[in]Format(省略可)
疎行列の格納形式. (省略時 = 0)
= 0: CSR形式.
= 1: CSC形式.
= 2: COO形式.
使用例
次の行列を Matrix Market 形式ファイル (Test_ZMMWrite.mtx) に書き込む.
( 0.78+0.16i -0.9-1.46i 0.48-1.08i )
A = ( 0.73+0.63i 1.58-1.24 -0.41-0.91i )
( 0.23-1.37i 0.79+0.64i -0.73-1.5i )
Sub Ex_ZMMWrite()
Const M = 3, N = 3, Nnz = M * N
Const DataType = 1, MatShape = 0, MatForm = 0
Dim A(Nnz - 1) As Complex, Ia(M) As Long, Ja(Nnz - 1) As Long
Dim Info As Long
A(0) = Cmplx(0.78, 0.16): A(1) = Cmplx(-0.9, -1.46): A(2) = Cmplx(0.48, -1.08): A(3) = Cmplx(0.73, 0.63): A(4) = Cmplx(1.58, -1.24): A(5) = Cmplx(-0.41, -0.91): A(6) = Cmplx(0.23, -1.37): A(7) = Cmplx(0.79, 0.64): A(8) = Cmplx(-0.73, -1.5)
Ia(0) = 0: Ia(1) = 3: Ia(2) = 6: Ia(3) = 9
Ja(0) = 0: Ja(1) = 1: Ja(2) = 2: Ja(3) = 0: Ja(4) = 1: Ja(5) = 2: Ja(6) = 0: Ja(7) = 1: Ja(8) = 2
Call ZMMWrite("Test_ZMMWrite.mtx", M, N, Nnz, A(), Ia(), Ja(), DataType, MatShape, MatForm, Info)
Debug.Print "ZMMWrite: Info =" + Str(Info)
End Sub
Function Cmplx(R As Double, Optional I As Double=0) As Complex
複素数の作成
Sub ZMMWrite(Fname As String, Nrow As Long, Ncol As Long, Nnz As Long, Val() As Complex, Ptr() As Long, Ind() As Long, DataType As Long, MatShape As Long, MatForm As Long, Optional Info As Long, Optional Fchk As Long=0, Optional Base As Long=-1, Optional Format As Long=0)
Matrix Market形式ファイルへの書き込み (複素行列)
実行結果
ZMMWrite: Info = 0
実行結果 (Test_ZMMWrite.mtx ファイル)
%%MatrixMarket matrix coordinate complex general
3 3 9
1 1 7.800000000000000e-01 1.600000000000000e-01
1 2 -9.000000000000000e-01 -1.460000000000000e+00
1 3 4.800000000000000e-01 -1.080000000000000e+00
2 1 7.300000000000000e-01 6.300000000000000e-01
2 2 1.580000000000000e+00 -1.240000000000000e+00
2 3 -4.100000000000000e-01 -9.100000000000000e-01
3 1 2.300000000000000e-01 -1.370000000000000e+00
3 2 7.900000000000000e-01 6.400000000000000e-01
3 3 -7.300000000000000e-01 -1.500000000000000e+00