2D ポアソン方程式、つまり AX=B の方程式系を解く必要があります。ここで、A は n 行 n 列の行列で、B は n 行 1 列のベクトルです。A は 2D ポアソン問題の離散化行列であるため、5 つの対角線のみが null にならないことがわかっています。Lapack には、この特定の問題を解決する関数はありませんが、帯行列連立方程式を解く関数、すなわち DGBTRF (LU 因数分解用) と DGBTRS があります。ここで、5 つの対角線は、主対角線、主対角線の上下の最初の対角線、および主対角線に対して m 対角線分だけ上下にある 2 つの対角線です。バンド ストレージに関する lapack ドキュメントを読んだ後、A をバンド ストレージ形式で格納するには (3*m+1) 行 n 列の行列を作成する必要があることを知りました。この行列を AB と呼びましょう。今質問:
1) dgbtrs と dgbtrs_ の違いは何ですか? インテル® MKL は両方を提供しますが、その理由がわかりません
2) dgbtrf では、バンド ストレージ マトリックスが配列である必要があります。行または列で AB を線形化する必要がありますか?
3) これは 2 つの関数を呼び出す正しい方法ですか?
int n, m;
double *AB;
/*... fill n, m, AB, with appropriate numbers */
int *pivots;
int nrows = 3 * m + 1, info, rhs = 1;
dgbtrf_(&n, &n, &m, &m, AB, &nrows, pivots, &info);
char trans = 'N';
dgbtrs_(&trans, &n, &m, &m, &rhs, AB, &nrows, pivots, B, &n, &info);