LinearAlgebra[LeastSquares] - 方程式に対する最小二乗解
使い方
LeastSquares(A, B, opt, t, c, outopts)
パラメータ
A - 行列、リストまたは集合
B - 行列、列ベクトルまたは変数の集合
opts - (オプション) BooleanOpt(optimize); パラメータ表示された解を最適化するかどうか指定する
t - (オプション) free = name または free = NoUserValue の形の等式; パラメータ表示された解で自由変数に対して使用する基礎の名前
c - (オプション) BooleanOpt(conjugate); 非浮動小数点データの場合にエルミート転置を使用するかどうかを指定する
outopts - (オプション) outputoptions = list の形の等式; 結果オブジェクトに対するコンストラクタオプション
|
説明
|
|
•
|
行列 A とベクトル B に対して、 LeastSquares(A, B) 関数は、最小二乗法の意味で、A . x が B にほぼ等しいという方程式を最も満足するベクトルを返します。得られる結果は Norm(A . x - B, 2) を最小にするベクトル x です。
|
|
B が行列ならば、i 番目の列が A . x = B[i] の最小二乗解となるような行列が返されます。ただし B[i] は行列 B の i 番目の列です。
|
•
|
パラメータ A もまた最小二乗の問題を記述する1次連立方程式の集合であっても構いません。この場合、B は A の方程式に現れる変数の集合です。
|
•
|
optimize オプション (opt) は係数行列がフルランクではない (すなわち、解が無限数存在する) とき、結果がどのように返されるかを決定します。optimize=true と与えられた場合、最小 2-ノルムを持つ解が返されます。
|
|
有理数のデータの場合に、optimize オプションが省略される (または optimize=false と与えられる) と、係数行列がフルランクでないと、パラメータ表示された解が返されます。この場合、パラメータ表示されたオプション t によって与えられたシンボルに基づいた名前が使用されます。オプション t が提供されないか、 t が free=NoUserValue ならば、割り当てられていないシンボル _t が生成されます。
|
|
条件 optimize=true は optimize と略記することができます。
|
•
|
conjugate オプション (c) は複素データタイプがない問題に対して Transpose の代わりに HermitianTranspose を使うかどうかを指定します。デフォルトは true です。条件 conjugate=true は conjugate と略記することができます。
|
•
|
浮動小数点の縦長行列に対して、解は QR 分解を用いて計算されます。浮動小数点の横長行列に対して、解は特異値分解を利用して計算されます。他のすべてのデータに対して、解は普通の方程式を解くことによって計算されます。
|
•
|
A がリストの場合、いくつかの前分解のために、リストの要素は行列 A の行列因子として取られます。これらの因子は、以下のように一意的に解釈されます。
|
|
* 行列のリスト、ベクトル[列]の項、[QR, tau] は、output='NAG' オプション (因子は縦長行列に対するデータを含まなければならない) で QRDecomposition を呼び出した結果として解釈されます。
|
|
* 行列のリスト、行列の項、[Q, R] は output=['Q', 'R'] オプション (因子は縦長行列に対するデータを含まなければならない) で QRDecomposition を呼び出した結果として解釈されます。
|
|
* 行列のリスト、ベクトル[列、行列の項, [U, S, Vt] は output=['U', 'S', 'Vt'] オプションで SingularValues を呼び出した結果として解釈されます。
|
•
|
outputoptions オプション (outopts) はその結果を構成する Vector コンストラクタに対して追加情報 (readonly, shape, storage, order, datatype, attributes) を提供します。
|
•
|
この関数は LinearAlgebra パッケージの一部ですから、コマンド with(LinearAlgebra) を実行した後のみ LeastSquares(..) の形で使うことができます。ただし、コマンドの長い形 LinearAlgebra[LeastSquares](..) を使えばいつでもアクセスすることができます。
|
|
|
例
|
|
>
|
with(LinearAlgebra):
A := <<3,0,4>|<-2,3,4>>:
b := <1,2,4>:
X := LeastSquares(A, b);
|
| (2.1) |
>
|
VectorNorm( A . X - b );
|
| (2.2) |
>
|
Af := Matrix(A, datatype=float):
bf := Vector(b, datatype=float):
(QR, tau) := QRDecomposition(Af, output='NAG');
|
| (2.3) |
>
|
Xf := LeastSquares([QR, tau], bf);
|
| (2.4) |
>
|
E := { m*x + n*y - 3 = 0, 2*x - y + 2 = 0 }:
V := { x, y }:
LeastSquares(E, V);
|
| (2.5) |
>
|
F := <<1+I,4-3*I,-I>|<3,I,1-I>>:
G := <<0,2*I,5>|<3+4*I,0,-1+I>>:
LeastSquares(F, G);
|
| (2.6) |
>
|
Ft := HermitianTranspose(F):
Gt := HermitianTranspose(G):
LeastSquares(Ft, Gt, optimize);
|
| (2.7) |
>
|
N := <<1,2,3>|<3,4,5>|<5,6,7>>:
z := <1,2,3>:
LeastSquares(N, z, free=c);
|
| (2.8) |
| (2.9) |
>
|
LeastSquares(N, z, optimize);
|
| (2.10) |
>
|
Nf := Matrix(N, datatype=float):
zf := Vector(z, datatype=float):
(U, S, Vt) := SingularValues(Nf, output=['U','S','Vt']);
|
| (2.11) |
>
|
LeastSquares([U, S, Vt], zf);
|
| (2.12) |
|
|