|
|
◆ 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) は次式で表される. ただし, 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) は次式で表される. ただし, 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
|