|
|
◆ zunmhr()
| void zunmhr |
( |
char |
side, |
|
|
char |
trans, |
|
|
int |
m, |
|
|
int |
n, |
|
|
int |
ilo, |
|
|
int |
ihi, |
|
|
int |
lda, |
|
|
doublecomplex |
a[], |
|
|
doublecomplex |
tau[], |
|
|
int |
ldc, |
|
|
doublecomplex |
c[], |
|
|
doublecomplex |
work[], |
|
|
int |
lwork, |
|
|
int * |
info |
|
) |
| |
ヘッセンベルグ形への変換行列の乗算 (複素行列)
- 目的
- 本ルーチンは m x n 一般複素行列 C に以下の演算を行い上書きする.
side = 'L' side = 'R'
trans = 'N': Q * C C * Q
trans = 'T': Q^H * C C * Q^H
ただし, Q は nq 次のユニタリ行列である(nq = m (side = 'L' の場合), nq = n (side = 'R' の場合)). Q は zgehrd が返す ihi-ilo 個の基本鏡映の積で定義される. Q = H(ilo) H(ilo+1) . . . H(ihi-1).
- 引数
-
| [in] | side | = 'L': Q または Q^H を左から適用する.
= 'R': Q または Q^H を右から適用する. |
| [in] | trans | = 'N': 転置しない. Q を適用する.
= 'C': 共役転置する. Q^H を適用する. |
| [in] | m | 行列 C の行数. (m >= 0) (m = 0 の場合, 処理を行わずに戻る) |
| [in] | n | 行列 A の行および列数. (n >= 0) (n = 0 の場合, 処理を行わずに戻る) |
| [in] | ilo | |
| [in] | ihi | ilo と ihi は zgehrd を呼び出したときと同じ値でなければならない. Q は小行列 Q(ilo+1〜ihi, ilo+1〜ihi) を除いては単位行列に等しい.
If side = 'L', then 1 <= ilo <= ihi <= m, if m > 0, and ilo = 1 and ihi = 0, if m = 0.
if side = 'R', then 1 <= ilo <= ihi <= n, if n > 0, and ilo = 1 and ihi = 0, if n = 0. 1 <= ilo <= ihi <= n (n > 0 の場合). ilo = 1 かつ ihi = 0 (n = 0 の場合). |
| [in] | lda | 二次元配列 a[][] の整合寸法. (lda >= max(1, m) (side = 'L' の場合), lda >= max(1, n) (side = 'R' の場合)) |
| [in] | a[][] | 配列 a[la][lda] (la >= m (side = 'L' の場合), la >= n (side = 'R' の場合))
zgehrd により返された基本鏡映を定義するベクトル.
|
| [in] | tau[] | 配列 tau[ltau] (ltau >= m - 1 (side = 'L' の場合), ltau >= n - 1 (side = 'R' の場合))
tau[i] は zgehrd により返された基本鏡映 H(i) のスカラー係数でなければならない. |
| [in] | ldc | 二次元配列 c[][] の整合寸法. (ldc >= max(1, m)) |
| [in,out] | c[][] | 配列 c[lc][ldc] (lc >= n)
[in] m x n 行列 C.
[out] C は Q*C, Q^H*C, C*Q^H または C*Q により上書きされる. |
| [out] | work[] | 配列 work[lwork]
作業領域.
info = 0 の場合, work[0] に lwork の最適値を返す. |
| [in] | lwork | 配列 work[]のサイズ. (lwork >= max(1, n) (side = 'L' の場合), lwork >= max(1, m) (side = 'R' の場合))
最適パフォーマンスのためには lwork >= n*nb (side = 'L' の場合), lwork >= m*nb (side = 'R' の場合) とせよ. ただし, nb は最適ブロックサイズである.
lwork = -1 の場合, 作業領域サイズの問い合わせとみなし, work[] の最適サイズを求める計算だけを行い, work[0] にその値を返す. |
| [out] | info | = 0: 正常終了
= -1: 入力パラメータ side の誤り. (side != 'L' および 'R')
= -2: 入力パラメータ trans の誤り. (trans != 'N' および 'T')
= -3: 入力パラメータ m の誤り. (m < 0)
= -4: 入力パラメータ n の誤り (n < 0)
= -5: 入力パラメータ ilo の誤り (ilo < 1 または (ilo > m (side = 'L' の場合), ilo > n (side = 'R' の場合))
= -6: 入力パラメータ ihi の誤り ((ihi < min(ilo, m) または ihi > m (side = 'L' の場合)), (ihi < min(ilo, n) または ihi > n (side = 'R' の場合)))
= -7: 入力パラメータ lda の誤り. (lda < max(1, m) (side = 'L' の場合), lda < max(1, n) (side = 'R' の場合))
= -10: 入力パラメータ ldc の誤り. (ldc < max(1, m))
= -13: 入力パラメータ lwork の誤り (lwork が小さすぎる)
|
- 出典
- LAPACK
|