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

◆ ZHBWrite()

Sub ZHBWrite ( Fname As  String,
ByVal Title As  String,
Key As  String,
Nrow As  Long,
Ncol As  Long,
Nnz As  Long,
Neltvl As  Long,
Val() As  Complex,
Ptr() As  Long,
Ind() As  Long,
Nrhs As  Long,
Nrhsix As  Long,
Rhsval() As  Complex,
Rhsptr() As  Long,
Rhsind() As  Long,
Sguess() As  Complex,
Xexact() As  Complex,
DataType As  Long,
MatShape As  Long,
MatForm As  Long,
RhsForm As  Long,
IniVec As  Long,
SolVec As  Long,
Optional Info As  Long,
Optional Fchk As  Long = 0,
Optional Base As  Long = -1,
Optional Format As  Long = 0,
Optional IntN As  Long = 8,
Optional IntW As  Long = 10,
Optional DblN As  Long = 3,
Optional DblW As  Long = 23,
Optional DblD As  Long = 15 
)

Harwell-Boeing形式ファイルへの書き込み (複素行列)

目的
Harwell-Boeing形式ファイルに疎行列 (CSR, CSC または COO形式), または, 有限要素行列 (非組立形式) を書き込む.

データの順番など内容のチェックは行わずにそのまま書き込む.
引数
[in]Fname出力ファイル名.
[in]TitleTitle 文字列.
[in]KeyKey 文字列.
[in]Nrow行列の行数 (疎行列の場合).
変数の数 (Nu) (有限要素行列の場合).
(Nrow >= 0) (Nrow = 0 の場合, 処理を行わずに戻る)
[in]Ncol行列の列数 (疎行列の場合).
基本行列の数 (Ne) (有限要素行列の場合).
(Ncol >= 0) (Ncol = 0 の場合, 処理を行わずに戻る)
[in]Nnz非ゼロ要素数 (疎行列の場合). (通常 Ptr(Nrow) - Ptr(0) (CSR) または Ptr(Ncol) - Ptr(0) (CSC) に等しい)
変数インデクス数 (Nind) (有限要素行列の場合). (通常 Ptr(Ne) - Ptr(0) に等しい)
(Nnz >= 0) (Nnz = 0 の場合, 処理を行わずに戻る)
[in]Neltvl使用しない (疎行列の場合).
要素数 (有限要素行列の場合). (Neltvl >= 0) (Neltvl = 0 の場合, 処理を行わずに戻る)
[in]Val()配列 Val(LVal - 1) (LInd >= Nnz (疎行列の場合), LInd >= Neltvl (有限要素行列の場合))
非ゼロ要素 (疎行列の場合).
要素の数値データ (有限要素行列の場合).
[in]Ptr()配列 Ptr(LPtr - 1) (LPtr >= Nrow + 1 (CSR), LPtr >= Ncol + 1 (CSC, 有限要素行列), または LPtr >= Nnz (COO))
行ポインタ(CSRの場合), 列ポインタ(CSC の場合), または 行インデクス(COO の場合) (疎行列の場合).
変数インデクスへのポインタ (有限要素行列の場合).
[in]Ind()配列 Ind(LInd - 1) (LInd >= Nnz)
列インデクス(CSR あるいは COO の場合), または 行インデクス(CSC の場合) (疎行列の場合).
変数インデクス (有限要素行列の場合).
[in]Nrhs右辺行列の列数.
[in]Nrhsix右辺行列の行インデックス数. (Nrhsix > 0) (RhsForm = 1, MatForm = 0 (疎行列) の場合)
[in]Rhsval()配列 Rhsval(LRhsval - 1) (LRhsval >= Nrow*Nrhs (RhsForm = 0 (密行列) の場合), LRhsval >= Nrhsix (RhsForm = 1, MatForm = 0 (疎行列) の場合), LRhsval >= Nu*Nrhs (RhsForm = 1, MatForm = 1 (有限要素行列) の場合))
右辺行列値.
[in]Rhsptr()配列 Rhsptr(LRhsptr - 1) (LRhsptr >= Nrow + 1 (CSRの場合), LRhsptr >= Nrhs + 1 (CSCの場合), LRhsptr >= Nrhsix (COOの場合))
右辺行列の行ポインタ(CSRの場合), 列ポインタ(CSC の場合), 行インデクス(COO の場合). (RhsForm = 1, MatForm = 0 (疎行列) の場合)
[in]Rhsind()配列 Rhsind(LRhsind - 1) (LRhsind >= Nrhsix)
右辺行列の列インデクス(CSR あるいは COO の場合), または 行インデクス(CSC の場合). (RhsForm = 1, MatForm = 0 (疎行列) の場合)
[in]Sguess()配列 Sguess(LSguess - 1) (LSguess >= Nrow*Nrhs)
初期推定ベクトル. (IniVec = 1 の場合)
[in]Xexact()配列 Xexact(LXexact - 1) (LXexact >= Nrow*Nrhs)
解ベクトル. (SolVec = 1 の場合)
[in]DataType行列のデータ型.
= 1: 複素数.
= 2: パターン.
[in]MatShape行列の形状.
= 0: 非対称行列.
= 1: 対称行列.
= 2: 歪対称(交代)行列.
= 3: エルミート行列.
= 4: 長方形行列.
[in]MatForm行列の格納形式.
= 0: 疎行列.
= 1: 有限要素行列.
[in]RhsForm右辺行列の格納形式.
= 0: 密行列.
= 1: 係数行列と同形式.
[in]IniVec初期推定ベクトルを格納するかどうか.
= 0: 格納しない.
= 1: 格納する.
[in]SolVec解ベクトルを格納するかどうか.
= 0: 格納しない.
= 1: 格納する.
[out]Info(省略可)
= 0: 正常終了.
= i < 0: (-i)番目の入力パラメータの誤り.
= 1: ファイルがオープンできなかった.
= 2: ファイルがすでに存在する.
= 5: メモリーエラー.
[in]Fchk(省略可)
出力ファイルのチェックフラグ. (省略時 = 0)
= 0: 指定されたファイルがすでに存在してかどうかをチェックせずに上書きする.
= 1: 指定されたファイルがすでに存在していればエラー(Info = 2)を返す.
[in]Base(省略可)
Ptr および Ind のインデクス形式. (省略時 = Ptr(0)
= 0: 0-ベース(C形式): 開始インデクス値が 0.
= 1: 1-ベース(Fortran形式): 開始インデクス値が 1.
[in]Format(省略可)
疎行列の格納形式. (省略時 = 0)
= 0: CSR形式.
= 1: CSC形式.
= 2: COO形式.
[in]IntN(省略可)
整数の出力フォーマット(行あたりの出力数). (省略時: IntN = 8, IntW = 10)
[in]IntW(省略可)
整数の出力フォーマット(出力幅(桁数)).
[in]DblN(省略可)
浮動小数の出力フォーマット(行あたりの出力数). (省略時: DblN = 3, DblW = 23, DblD = 15)
[in]DblW(省略可)
浮動小数の出力フォーマット(全体の出力幅(桁数)).
[in]DblD(省略可)
浮動小数の出力フォーマット(小数点以下の出力幅(桁数)).
使用例
次の行列 A および B を Harwell-Boeing 形式ファイル (Test_ZHBWrite.cua) に書き込む.
( 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 )
( 0.2126-0.2904i )
B = ( -0.3028+0.3346i )
( -1.2905-1.0346i )
Sub Ex_ZHBWrite()
Const Title = "Test ZHBWrite", Key = "Key"
Const M = 3, N = 3, Nnz = M * N, Neltvl = 0, Nrhs = 1, Nrhsix = 0
Const DataType = 1, MatShape = 0, MatForm = 0, RhsForm = 0, IniVec = 0, SolVec = 0
Dim A(Nnz - 1) As Complex, Ia(M) As Long, Ja(Nnz - 1) As Long, B(M - 1) As Complex, IDummy() As Long, Dummy() As Complex
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
B(0) = Cmplx(0.2126, -0.2904): B(1) = Cmplx(-0.3028, 0.3346): B(2) = Cmplx(-1.2905, -1.0346)
Call ZHBWrite("Test_ZHBWrite.cua", Title, Key, M, N, Nnz, Neltvl, A(), Ia(), Ja(), Nrhs, Nrhsix, B(), IDummy(), IDummy(), Dummy(), Dummy(), DataType, MatShape, MatForm, RhsForm, IniVec, SolVec, Info)
Debug.Print "ZHBWrite: Info =" + Str(Info)
End Sub
Function Cmplx(R As Double, Optional I As Double=0) As Complex
複素数の作成
Sub ZHBWrite(Fname As String, ByVal Title As String, Key As String, Nrow As Long, Ncol As Long, Nnz As Long, Neltvl As Long, Val() As Complex, Ptr() As Long, Ind() As Long, Nrhs As Long, Nrhsix As Long, Rhsval() As Complex, Rhsptr() As Long, Rhsind() As Long, Sguess() As Complex, Xexact() As Complex, DataType As Long, MatShape As Long, MatForm As Long, RhsForm As Long, IniVec As Long, SolVec As Long, Optional Info As Long, Optional Fchk As Long=0, Optional Base As Long=-1, Optional Format As Long=0, Optional IntN As Long=8, Optional IntW As Long=10, Optional DblN As Long=3, Optional DblW As Long=23, Optional DblD As Long=15)
Harwell-Boeing形式ファイルへの書き込み (複素行列)
実行結果
ZHBWrite: Info = 0
実行結果 (Test_ZHBWrite.cua ファイル)
Test ZHBWrite Key
11 1 2 6 2
CUA 3 3 9 0
(8I10) (8I10) (3D23.15) (3D23.15)
F 1 0
1 4 7 10
1 2 3 1 2 3 1 2
3
7.800000000000000e-01 1.600000000000000e-01 7.300000000000000e-01
6.300000000000000e-01 2.300000000000000e-01 -1.370000000000000e+00
-9.000000000000000e-01 -1.460000000000000e+00 1.580000000000000e+00
-1.240000000000000e+00 7.900000000000000e-01 6.400000000000000e-01
4.800000000000000e-01 -1.080000000000000e+00 -4.100000000000000e-01
-9.100000000000000e-01 -7.300000000000000e-01 -1.500000000000000e+00
2.126000000000000e-01 -2.904000000000000e-01 -3.028000000000000e-01
3.346000000000000e-01 -1.290500000000000e+00 -1.034600000000000e+00