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

◆ dsytrd()

void dsytrd ( char  uplo,
int  n,
int  lda,
double  a[],
double  d[],
double  e[],
double  tau[],
double  work[],
int  lwork,
int *  info 
)

三重対角形への変換 (対称行列)

目的
本ルーチンは実対称行列 A を直交相似変換 Q^T * A * Q = T により実対称三重対角形 T に変換する.
引数
[in]uplo= 'U': A の上三角部分を格納する.
= 'L': A の下三角部分を格納する.
[in]n行列 A の行および列数. (n >= 0) (n = 0 の場合, 処理を行わずに戻る)
[in]lda二次元配列 a[][] の整合寸法. (lda >= max(1, n))
[in,out]a[][]配列 a[la][lda] (la >= n)
[in] 対称行列 A. uplo = 'U' の場合, a[][] の n x n 上三角部分に A の上三角部分を格納する. 対角要素を含まない下三角部分は参照されない. uplo = 'L' の場合, a[][] の n x n 下三角部分に A の下三角部分を格納する. 対角要素を含まない上三角部分は参照されない.
[out] uplo = 'U' の場合, a[][] の対角要素および上副対角要素は三重対角行列 T の対応する要素で上書きされる. 上副対角要素より上の要素は配列 tau[] とあわせて直交行列 Q (基本鏡映の積)を表す. uplo = 'L' の場合, a[][] の対角要素および下副対角要素は三重対角行列 T の対応する要素で上書きされる. 下副対角要素より下の要素は配列 tau[] とあわせて直交行列 Q (基本鏡映の積)を表す. 詳細は下記参照.
[out]d[]配列 d[ld] (ld >= n)
三重対角行列 T の対角要素: d[i] = a[i][i].
[out]e[]配列 e[le] (le >= n - 1)
三重対角行列 T の副対角要素: uplo = 'U' の場合 e[i] = a[i+1][i], uplo = 'L' の場合 e[i] = a[i][i+1].
[out]tau[]配列 tau[ltau] (ltau >= n - 1)
基本鏡映のスカラー因子 (下記詳細参照).
[out]work[]配列 work[lwork]
作業領域.
info = 0 の場合, work[0] に lwork の最適値を返す.
[in]lwork配列 work[]のサイズ (lwork >= 1)
最適パフォーマンスのためには lwork >= n*nb とせよ. ただし, nb は最適ブロックサイズである.
lwork = -1 の場合, 作業領域サイズの問い合わせとみなし, work[] の最適サイズを求める計算だけを行い, work[0] にその値を返す.
[out]info= 0: 正常終了.
= -1: 入力パラメータ uplo の誤り. (uplo != 'U' および 'L')
= -2: 入力パラメータ n の誤り. (n < 0)
= -3: 入力パラメータ lda の誤り. (lda < max(1, n))
= -9: 入力パラメータ lwork の誤り. (lwork が小さすぎる)
詳細
uplo = 'U' の場合, 行列 Q は基本鏡映の積で表される.
Q = H(n-1) . . . H(2) H(1).
各 H(i) は次式で表される.
H(i) = I - tau*v*v^T
ただし, tau は実スカラー値. v は実ベクトルである. v(i+1〜n) = 0, v(i) = 1 で, v(1〜i-1) は a[i][0〜i-2] に, tau は tau[i-1] に格納される.

uplo = 'L' の場合, 行列 Q は基本鏡映の積で表される.
Q = H(1) H(2) . . . H(n-1).
各 H(i) は次式で表される.
H(i) = I - tau*v*v^T
ただし, tau は実スカラー値. v は実ベクトルである. v(1〜i) = 0, v(i+1) = 1 で, v(i+2〜n) は a[i-1][i+1〜n-1] に, tau は tau[i-1] に格納される.

n = 5 の例で a[][] の出力は次のようになる.
if uplo = 'L': if uplo = 'U':
( d e v3 v4 v5 ) ( d )
( d e v4 v5 ) ( e d )
( d e v5 ) ( v1 e d )
( d e ) ( v1 v2 e d )
( d ) ( v1 v2 v3 e d )
ただし, d および e は T の対角要素および副対角要素, vi は H(i) を定義するベクトル v の要素である.
出典
LAPACK