XLPack 7.0
Python API リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ dgels()

def dgels ( trans  ,
,
,
,
,
nrhs  = 1 
)

優決定または劣決定系連立一次方程式 Ax = b の解 (フルランク)

目的
dgelsはm×n実行列Aあるいはその転置からなる優決定または劣決定系連立1次方程式をAのQRあるいはLQ分解を用いて解く. Aはフルランクであること.

下記オプションが提供される:

  1. trans = 'N' かつ m >= n の場合: 優決定系の最小二乗解を求める. すなわち, 次の最小二乗問題を解く.
    || B - A*X || を最小化する.
  2. trans = 'N' かつ m < n の場合: 劣決定系 A * X = B の最小ノルム解を求める.
  3. trans = 'T' かつ m >= n の場合: 劣決定系 A^T * X = B の最小ノルム解を求める.
  4. trans = 'T' かつ m < n の場合: 優決定系の最小二乗解を求める. すなわち, 次の最小二乗問題を解く.
    || B - A^T*X || を最小化する.

いくつかの右辺ベクトル b および解ベクトル x を1回の呼び出しで扱うことができる. これらのベクトルは, m×nrhs右辺行列Bおよびn×nrhs解行列Xの列として格納される.
戻り値
info (int)
= 0: 正常終了
= -1: 入力パラメータ trans の誤り (trans != 'T'および'N')
= -2: 入力パラメータ m の誤り (m < 0)
= -3: 入力パラメータ n の誤り (n < 0)
= -4: 入力パラメータ a の誤り
= -5: 入力パラメータ b の誤り
= -6: 入力パラメータ nrhs の誤り (nrhs < 0)
= i > 0: Aの分解結果の三角行列のi番目の対角要素が0になった. 従って, Aはフルランクではない. 最小二乗解は求めることができなかった.
引数
[in]trans= 'N': 連立一次方程式はAからなる.
= 'T': 連立一次方程式はA^Tからなる.
[in]m行列 A の行数. (m >= 0) (m = 0 の場合, bにゼロベクトルを返す)
[in]n行列 A の列数. (n >= 0) (n = 0 の場合, bにゼロベクトルを返す)
[in,out]aNumpy ndarray (2次元配列, float, m x n)
[in] m×n行列 A.
[out] m >= n: aはdgeqrfが返すQR分解結果により上書きされる.
  m < n: aはdgelqfが返すLQ分解結果により上書きされる.
[in,out]bNumpy ndarray (1 または 2次元配列, float, max(m, n) または max(m, n) x nrhs)
[in] 右辺ベクトルが列ごとに格納された行列 B. Bは, m×nrhs行列(trans = 'N'の場合), または, n×nrhs行列(trans = 'T'の場合)である.
[out] info = 0の場合, bは列ごとに格納された解ベクトルにより上書きされる:
  trans = 'N'かつm >= n: bの行0〜n-1に最小二乗解ベクトルが入る. 各列の解の残差二乗和はその列の行n〜m-1の要素の二乗和で与えられる.
  trans = 'N'かつm < n: bの行0〜n-1に最小ノルム解ベクトルが入る.
  trans = 'T'かつm >= n: bの行0〜m-1に最小ノルム解ベクトルが入る.
  trans = 'T'かつm < n: bの行0〜m-1に最小二乗解ベクトルが入る. 各列の解の残差二乗和はその列の行m〜n-1の要素の二乗和で与えられる.
[in]nrhs(省略可)
右辺の数, すなわち, 行列BおよびXの列数. (nrhs >= 0) (nrhs = 0 の場合, 処理を行わずに戻る) (省略時 = 1)
出典
LAPACK
使用例
優決定系連立1次方程式 Ax = B の最小二乗解を求める. また, 分散を求める. ただし,
( -1.06 0.48 -0.04 )
A = ( -1.19 0.73 -0.24 )
( 1.97 -0.89 0.56 )
( 0.68 -0.53 0.08 )
( 0.3884 )
B = ( 0.1120 )
( -0.3644 )
( -0.0002 )
とする.
def TestDgels():
m = 4
n = 3
a = np.array([
[-1.06, -1.19, 1.97, 0.68],
[0.48, 0.73, -0.89, -0.53],
[-0.04, -0.24, 0.56, 0.08]])
b = np.array([0.3884, 0.1120, -0.3644, -0.0002])
info = dgels('N', m, n, a, b)
print(b[0:n], info)
if info == 0:
ci = np.empty(n)
info = dgecov(0, n, a, ci)
print(ci, info)
def dgels(trans, m, n, a, b, nrhs=1)
優決定または劣決定系連立一次方程式 Ax = b の解 (フルランク)
def dgecov(job, n, a, ci)
線形最小二乗問題の分散・共分散行列 (dgels用)
実行結果
>>> TestDgels()
[-0.82 -0.94 0.74] 0
[ 6.46959968 16.73504082 18.71775328] 0