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

◆ 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