|
|
◆ dsbtrd()
| void dsbtrd |
( |
char |
vect, |
|
|
char |
uplo, |
|
|
int |
n, |
|
|
int |
kd, |
|
|
int |
ldab, |
|
|
double |
ab[], |
|
|
double |
d[], |
|
|
double |
e[], |
|
|
int |
ldq, |
|
|
double |
q[], |
|
|
double |
work[], |
|
|
int * |
info |
|
) |
| |
三重対角形への変換 (対称帯行列)
- 目的
- 本ルーチンは実対称帯行列 A を直交相似変換 Q^T * A * Q = T により実対称三重対角形 T に変換する.
- 引数
-
| [in] | vect | = 'N': Q を求めない.
= 'V': Q を求める.
= 'U': X を X*Q により更新する. |
| [in] | uplo | = 'U': A の上三角部分を格納する.
= 'L': A の下三角部分を格納する. |
| [in] | n | 行列 A の行および列数. (n >= 0) (n = 0 の場合, 処理を行わずに戻る) |
| [in] | kd | 上帯幅(uplo = 'U' の場合)あるいは下帯幅(uplo = 'L' の場合). (kd >= 0) |
| [in] | ldab | 二次元配列 ab[][] の整合寸法. (ldab >= kd + 1) |
| [in,out] | ab[][] | 配列 ab[lab][ldab] (lab >= n)
[in] 対称帯行列 A の上または下三角部分を配列の最初の kd + 1 列に格納する. A の j 列が配列 ab[][] の j 行に次のように格納される.
uplo = 'U': ab[j][kd + i - j] = Aij. ただし, max(0, j - kd - 1) <= i <= j <= n - 1.
uplo = 'L': ab[j][i - j] = Aij. ただし, 0 <= j <= i <= min(n - 1, j + kd - 1).
[out] ab[][] の対角要素は三重対角行列 T の対角要素で上書きされる. kd > 0 であれば上副対角要素(uplo = 'U' の場合)または下副対角要素(uplo = 'L' の場合)は T の副対角要素で上書きされる. ab[][] のその他の部分は変換中に生成される値で上書きされる. |
| [out] | d[] | 配列 d[ld] (ld >= n)
三重対角行列 T の対角要素: d[i] = Tii. |
| [out] | e[] | 配列 e[le] (le >= n - 1)
三重対角行列 T の副対角要素: uplo = 'U' の場合 e[i] = T(i+1,i), uplo = 'L' の場合 e[i] = T(i, i+1). |
| [in] | ldq | 二次元配列 q[][] の整合寸法. (ldq >= 1 (vect = 'N' の場合). ldq >= n (vect = 'V' または 'U' の場合)) |
| [in,out] | q[][] | 配列 q[lq][ldq] (lq >= n)
[in] vect = 'U' の場合, q[][] には n x n 行列 X を入れる. vect = 'N' または 'V' の場合, q[][] は設定不要である.
[out] vect = 'V' の場合, q[][] には n x n 直交行列 Q が入る. vect = 'U' の場合, q[][] には積 X*Q が入る. vect = 'N' の場合, 配列 q[][] は参照されない. |
| [out] | work[] | 配列 work[lwork] (lwork >= n)
作業領域. |
| [out] | info | = 0: 正常終了.
= -1: 入力パラメータ vect の誤り. (vect != 'N', 'V' および 'U')
= -2: 入力パラメータ uplo の誤り. (uplo != 'U' および 'L')
= -3: 入力パラメータ n の誤り. (n < 0) = -4: 入力パラメータ kd の誤り. (kd < 0) = -5: 入力パラメータ ldab の誤り (ldab < kd + 1)
= -9: 入力パラメータ ldq の誤り (ldq が小さすぎる)
|
- 出典
- LAPACK
|