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

◆ dggglm()

void dggglm ( int  n,
int  m,
int  p,
int  lda,
double  a[],
int  ldb,
double  b[],
double  d[],
double  x[],
double  y[],
double  work[],
int  lwork,
int *  info 
)

一般Gauss-Markov線形モデル(GLM)問題

目的
本ルーチンは一般Gauss-Markov線形モデル(GLM)問題を解く.
d = A*x + B*y の制約条件のもとで || y ||_2 を最小化するxを求める.
ここで, Aはn×m行列, Bはn×p行列, dは与えられたnベクトルである. ただし, m <= n <= m+p とする. また, 次式が成り立つものとする.
rank(A) = m かつ rank(A B) = n
これらの条件により, 制約付き方程式は常に正しく, 一意の解xおよび最小2ノルム解yを持つ. 解は, 次式で与えられる行列対(A, B)の一般化QR分解を用いて得られる.
A = Q*(R), B = Q*T*Z
(0)
特に行列Bが正方で非特異ならば, GLM問題は次の重み付き線形最小二乗問題に等しい.
|| inv(B)*(d - A*x) ||_2 を最小化するxを求める.
引数
[in]n行列 A および B の行数. (n >= 0) (n = 0 の場合, 処理を行わずに戻る)
[in]m行列 A の列数. (0 <= m <= n)
[in]p行列 B の列数. (p >= n - m)
[in]lda二次元配列a[][]の整合寸法. (lda >= max(1, n))
[in,out]a[][]配列 a[la][lda] (la >= m)
[in] n×m行列 A.
[out] 配列a[][]の上三角要部分にm×m上三角行列Rが入る.
[in]ldb二次元配列b[][]の整合寸法. (ldb >= max(1, n))
[in,out]b[][]配列 b[lb][ldb] (lb >= p)
[in] n×p行列 B.
[out] n <= p: 配列の一部b[p-n〜p-1][0〜n-1]の上三角部分にn×n上三角行列Tが入る.
  n > p: (n-p)番目の対角およびその上三角要素にn×p上台形行列Tが入る.
[in,out]d[]配列 d[ld] (ld >= n)
[in] d[]にGLM方程式の左辺ベクトルを入れる.
[out] d[]は壊される.
[out]x[]配列 x[lx] (lx >= m)
[out]y[]配列 y[ly] (ly >= p)
x[]およびy[]はGLM問題の解を返す.
[out]work[]配列 work[lwork]
作業領域.
info = 0の場合, work[0] にlworkの最適値を返す.
[in]lwork配列 work[]のサイズ. (lwork >= max(1, n+m+p))
最適パフォーマンスのためには lwork >= max(1, m+min(n, p)+max(n, p)*nb) とせよ. ただし, nbは最適ブロックサイズの上限である.
lwork = -1 の場合, 作業領域サイズの問い合わせとみなし, 最適サイズを求める計算だけを行い, work[0]にその値を返す.
[out]info= 0: 正常終了
= -1: 入力パラメータ n の誤り (n < 0)
= -2: 入力パラメータ m の誤り (m < 0 または m > n)
= -3: 入力パラメータ p の誤り (p < 0 または p < n - m)
= -4: 入力パラメータ lda の誤り (lda < max(1, n))
= -6: 入力パラメータ ldb の誤り (ldb < max(1, n))
= -12: 入力パラメータ lwork の誤り (lworkが小さすぎる)
= 1: (A, B)対の一般化QR分解のAに関連する上三角行列Rが特異で, rank(A) < mである. 最小二乗解を求めることができなかった.
= 2: (A, B)対の一般化QR分解のBに関する上台形行列Tの底辺側n-m×n-m部分が特異で, rank(A B) < nである. 最小二乗解を求めることができなかった.
出典
LAPACK