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

◆ dstedc()

void dstedc ( char  compz,
int  n,
double  d[],
double  e[],
int  ldz,
double  z[],
double  work[],
int  lwork,
int  iwork[],
int  liwork,
int *  info 
)

対称三重対角行列の固有値・固有ベクトル (分割統治法)

目的
本ルーチンは実対称三重対角行列のすべての固有値, および, 必要により固有ベクトルを分割統治法により求める. dsytrd, dsptrd または dsbtrd を使用して三重対角形に変換した場合は, 元の対称行列または対称帯行列の固有ベクトルを求めることもできる.
引数
[in]compz= 'N': 固有値のみ求める.
= 'I': 三重対角行列の固有値・固有ベクトルを求める.
= 'V': 元の対称行列の固有値・固有ベクトルを求める. 元の行列から三重対角形への変換を行った直交行列を z[][] に入れておかなければならない.
[in]n行列の行および列数. (n >= 0) (n = 0 の場合, 処理を行わずに戻る)
[in,out]d[]配列 d[ld] (ld >= n)
[in] 三重対角行列の対角要素.
[out] info = 0 であれば固有値が昇順に入る.
[in,out]e[]配列 e[le] (le >= n - 1)
[in] 三重対角行列の n-1 個の副対角要素.
[out] e[] は破壊される.
[in]ldz二次元配列 z[][] の整合寸法. (ldz >= 1 (compz = 'N' の場合), ldz >= max(1, n) (compz = 'V' または 'I' の場合))
[in,out]z[][]配列 z[lz][ldz] (lz >= n)
[in] compz = 'V' の場合, 三重対角形への変換を行った直交行列を Compz に入れる.
[out] info = 0 であれば, compz = 'V' の場合, 元の対称行列の正規直交化した固有ベクトルが z[][] に入る. compz = 'I' の場合, 対称三重対角行列の正規直交化した固有ベクトルが z[][] に入る. compz = 'N' の場合, z[][] は参照されない.
[out]work[]配列 work[lwork]
作業領域.
info = 0 の場合, work[0] に lwork の最適値を返す.
[in]lwork配列 work[]のサイズ. (lwork >= 1 (compz = 'N' または n <= 1 の場合), lwork >= 1 + 3*n + 2*n*lg(n) + 4*n^2 (compz = 'V' かつ n > 1 の場合, ただし lg(n) は 2^k >= n となる最小の整数 k), lwork >= 1 + 4*n + n^2 (compz = 'I' かつ n > 1 の場合))
ただし, compz = 'I' または 'V' の場合, n が最小分割サイズ(通常 25)以下であれば lwork は max(1, 2*(n - 1)) でよい.
lwork = -1 の場合, 作業領域サイズの問い合わせとみなし, work[] の最適サイズを求める計算だけを行い, work[0] にその値を返す.
[out]iwork[]配列 iwork[liwork]
整数作業領域.
info = 0 の場合, iwork[0] に liwork の最適値を返す.
[in]liwork配列 iwork[]のサイズ. (liwork >= 1 (compz = 'N' または n <= 1 の場合), liwork >= 6 + 6*n + 5*n*lg(n) (compz = 'V' かつ n > 1 の場合, ただし lg(n) は 2^k >= n となる最小の整数 k), liwork >= 3 + 5*n (compz = 'I' かつ n > 1 の場合))
ただし, compz = 'I' または 'V' の場合, n が最小分割サイズ(通常 25)以下であれば liwork は 1 でよい.
liwork = -1 の場合, 作業領域サイズの問い合わせとみなし, iwork[] の最適サイズを求める計算だけを行い, iwork[0] にその値を返す.
[out]info= 0: 正常終了.
= -1: 入力パラメータ compz の誤り. (compz != 'N', 'I' および 'V')
= -2: 入力パラメータ n の誤り. (n < 0)
= -5: 入力パラメータ ldz の誤り. (ldz < 1 または (compz = 'V' または 'I' かつ ldz < max(1, n)))
= -8: 入力パラメータ lwork の誤り. (lwork が小さすぎる)
= -10: 入力パラメータ liwork の誤り. (liwork が小さすぎる)
= i > 0: 行および列 i/(n + 1) 〜 mod(i, n + 1) にある小行列の計算において固有値を求めることができなかった.
出典
LAPACK