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

◆ dormqr()

void dormqr ( char  side,
char  trans,
int  m,
int  n,
int  k,
int  lda,
double  a[],
double  tau[],
int  ldc,
double  c[],
double  work[],
int  lwork,
int *  info 
)

QR分解のQによる行列の乗算

目的
本ルーチンはm×n実行列Cを以下により上書きする.
side = 'L' side = 'R'
trans = 'N': Q * C C * Q
trans = 'T': Q^T * C C * Q^T
ただし, Qはk個の基本鏡映変換の積で定義される実直交行列である(dgeqrfが返す).
Q = H(1) H(2) . . . H(k)
side = 'L'の場合, Qは次数m. side = 'R'の場合, 次数nである.
引数
[in]side= 'L': Q または Q^T を左から適用する.
= 'R': Q または Q^T を右から適用する.
[in]trans= 'N': 転置しない. Qを適用する.
= 'T': 転置する. Q^Tを適用する.
[in]m行列 C の行数. (m >= 0) (m = 0 の場合, 処理を行わずに戻る)
[in]n行列 C の列数. (n >= 0) (n = 0 の場合, 処理を行わずに戻る)
[in]k積が行列Qを定義する基本鏡映変換の数. (m => k >= 0 (side = 'L'の場合), n >= k >= 0 (side = 'R'の場合)) (k = 0 の場合, 処理を行わずに戻る)
[in]lda二次元配列a[][]の整合寸法. (lda >= max(1, m) (side = 'L'の場合), lda >= max(1, n) (side = 'R'の場合))
[in]a[][]配列 a[la][lda] (la >= k)
第i列に基本鏡映変換 H(i) (i = 1, 2, ..., k) を定義するベクトルを入れる. これは, dgeqrfが配列引数a[][]の最初のk列に返したものである.
[in]tau配列 tau[ltau] (ltau >= k)
dgeqrfが返した鏡映変換のスカラー因子 H(i).
[in]ldc二次元配列c[][]の整合寸法. (ldc >= max(1, m))
[in,out]c[][]配列 c[lc][ldc] (lc >= n)
[in] m×n行列 C.
[out] c[][]は, Q*C または Q^T*C または C*Q^T または 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を大きくしなければならない.
lwork = -1 の場合, 作業領域サイズの問い合わせとみなし, 最適サイズを求める計算だけを行い, work[0]にその値を返す.
[out]info= 0: 正常終了
= -1: 入力パラメータ side の誤り (side != 'L'および'R')
= -2: 入力パラメータ trans の誤り (trans != 'T'および'N')
= -3: 入力パラメータ m の誤り (m < 0)
= -4: 入力パラメータ n の誤り (n < 0)
= -5: 入力パラメータ k の誤り (k < 0 または k > m または n)
= -6: 入力パラメータ lda の誤り (ldaが小さすぎる)
= -9: 入力パラメータ ldc の誤り (ldc < max(1, m))
= -12: 入力パラメータ lwork の誤り (lworkが小さすぎる)
出典
LAPACK