|
|
◆ dgels()
| def dgels |
( |
trans |
, |
|
|
m |
, |
|
|
n |
, |
|
|
a |
, |
|
|
b |
, |
|
|
nrhs |
= 1 |
|
) |
| |
優決定または劣決定系連立一次方程式 Ax = b の解 (フルランク)
- 目的
- dgelsはm×n実行列Aあるいはその転置からなる優決定または劣決定系連立1次方程式をAのQRあるいはLQ分解を用いて解く. Aはフルランクであること.
下記オプションが提供される:
- trans = 'N' かつ m >= n の場合: 優決定系の最小二乗解を求める. すなわち, 次の最小二乗問題を解く.
- trans = 'N' かつ m < n の場合: 劣決定系 A * X = B の最小ノルム解を求める.
- trans = 'T' かつ m >= n の場合: 劣決定系 A^T * X = B の最小ノルム解を求める.
- trans = 'T' かつ m < n の場合: 優決定系の最小二乗解を求める. すなわち, 次の最小二乗問題を解く.
いくつかの右辺ベクトル 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] | a | Numpy ndarray (2次元配列, float, m x n)
[in] m×n行列 A.
[out] m >= n: aはdgeqrfが返すQR分解結果により上書きされる.
m < n: aはdgelqfが返すLQ分解結果により上書きされる. |
| [in,out] | b | Numpy 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)
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
|