LAPACK の特徴は、一口に「連立方程式を解く」、「固有値問題を解く」 といった要求に対して、 問題に応じてきめ細かい手段が用意されていることにある。
今回は、対称だが、正定値ではない、帯行列を係数とする連立1次方程式を解 く、というのが目標であることから、dgbsv の利用が適当と思われる。
dgbsv は、倍精度実数型データで与えられた (Double precision)、 一般の (正値性を持たない General)、帯行列 (Band matrix) を係数行列とする 連立1次方程式を解くサブルーチンである。
急いでコードが読みたければ
にアクセスすると良い1。
SUBROUTINE DGBSV(N, KL, KU, NRHS, AB, LDAB, IPIV, B, LDB, INFO ) |
N | 方程式の (未知数の) 個数 |
KL | 係数行列の帯の中にある subdiagonals (対角線より下の部分) の個数 |
KU | 係数行列の帯の中にある superdiagonals (対角線より上の部分) の個数 |
NRHS | 右辺のベクトルの個数 (いくつの問題を解くか) |
AB | 係数行列の帯の外を省略して詰め込んだ2次元配列 |
入力だけ考えると KLKU N で十分だが、 | |
ピボッティングありのLU分解を行うために KLKU N 必要となる。 | |
AB(LDAB,何とか) と定義されているとする ( LDABN )。 | |
LDAB | 2次元配列の AB の最初の寸法 (Leading Dimension of AB) |
IPIV | 行交換の結果を格納する、長さ N 以上の整数型配列 |
B | 入力としては連立方程式 の右辺 を納めた 2 次元配列 |
縦ベクトル を並べた行列を 2 次元配列として入力する。 | |
dgbsv 終了後は対応する解 が納められている。 | |
B(LDB,何とか) と定義されているとする ( LDB2*KL+KU+1 )。 | |
LDB | 2次元配列の B の最初の寸法 (leading dimension of B) |
INFO | 成功したかどうか、結果をコードで返す |
0 ならば成功、負ならば第 INFO 番目の引数がおかしい。 正ならば行列が特異であった。 |
このサブルーチンでは、 係数行列が帯の外を省略して 記憶されていると仮定されている。