3 LAPACK の dgbsv

LAPACK の特徴は、一口に「連立方程式を解く」、「固有値問題を解く」 といった要求に対して、 問題に応じてきめ細かい手段が用意されていることにある。

今回は、対称だが、正定値ではない、帯行列を係数とする連立1次方程式を解 く、というのが目標であることから、dgbsv の利用が適当と思われる。

dgbsv は、倍精度実数型データで与えられた (Double precision)、 一般の (正値性を持たない General)、帯行列 (Band matrix) を係数行列とする 連立1次方程式を解くサブルーチンである。

急いでコードが読みたければ

http://www.netlib.org/cgi-bin/netlibfiles.pl?filename=/lapack/double/dgbsv.f
にアクセスすると良い1

  SUBROUTINE DGBSV(N, KL, KU, NRHS, AB, LDAB, IPIV, B, LDB, INFO )

N 方程式の (未知数の) 個数
KL 係数行列の帯の中にある subdiagonals (対角線より下の部分) の個数
KU 係数行列の帯の中にある superdiagonals (対角線より上の部分) の個数
NRHS 右辺のベクトルの個数 (いくつの問題を解くか)
AB 係数行列の帯の外を省略して詰め込んだ2次元配列
  入力だけ考えると $ ($KL$ +$KU$ +1)\times$   N で十分だが、
  ピボッティングありのLU分解を行うために $ (2$KL$ +$KU$ +1)\times$   N 必要となる。
  AB(LDAB,何とか) と定義されているとする ( LDAB$ \ge$N )。
LDAB 2次元配列の AB の最初の寸法 (Leading Dimension of AB)
IPIV 行交換の結果を格納する、長さ N 以上の整数型配列
B 入力としては連立方程式 $ A x=b_i$ の右辺 $ b_i$ を納めた 2 次元配列
  縦ベクトル $ b_i$ を並べた行列を 2 次元配列として入力する。
  dgbsv 終了後は対応する解 $ x_i=A^{-1}b_i$ が納められている。
  B(LDB,何とか) と定義されているとする ( LDB$ \ge$2*KL+KU+1 )。
LDB 2次元配列の B の最初の寸法 (leading dimension of B)
INFO 成功したかどうか、結果をコードで返す
  0 ならば成功、負ならば第 $ \vert$INFO$ \vert$ 番目の引数がおかしい。 正ならば行列が特異であった。

このサブルーチンでは、 係数行列が帯の外を省略して 記憶されていると仮定されている。



Subsections
桂田 祐史
2017-10-07