主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

lsqminnorm

線形方程式の最小ノルムの最小二乗解

説明

X = lsqminnorm (一个Bは,線形方程式AX = Bを解き,规范(*取向)の値を最小化する配列Xを返します。複数の解が存在する場合,lsqminnorm规范(X)を最小化する解を返します。

X = lsqminnorm (一个B托尔はさらに,lsqminnorm一个のランクを判別するために使用する許容誤差を指定します。

X = lsqminnorm (___rankWarnは,一个のランクが低い場合に警告を表示するためのオプションのフラグを指定します。前述の構文にある任意の入力引数の組み合わせが使用できます。rankWarn“nowarn”(既定値)または“警告”のいずれかにできます。

すべて折りたたむ

解が無限に存在する線形システムの解を,バックスラッシュ()とlsqminnormを使用して求めます。解の2ノルムを使用して結果を比較します。

斧头 b の解が無限に存在する場合,それぞれの解が 斧头 - b を最小化します。バックスラッシュコマンド(1)はそのような解のつを計算しますが,通常この解は x を最小化しません。lsqminnormにより計算される解は,规范(*取向)だけでなく规范(x)も最小化します。

1つの方程式と2つの未知数からなる単純な線形システム 2 x 1 + 3. x 2 8 を考えてみます。方程式の数が未知数の数より少ないため,このシステムは“劣決定“です。バックスラッシュとlsqminnormの両方を使用してこの方程式を解きます。

A = [2 3];b = 8;x_a = \ b
x_a =2×10 2.6667
x_b = lsqminnorm (A, b)
x_b =2×11.2308 - 1.8462

これらの2つの方法では求められる解が異なります。バックスラッシュは规范(*取向)を最小化するだけですが,lsqminnorm规范(x)も最小化します。これらのノルムを計算し,比較しやすいように結果を表に格納します。

s1 = {“反斜杠”“lsqminnorm”};s2 = {“norm_Ax_minus_b”“norm_x”};T =表([规范(A * x_a-b);规范(* x_b-b)]、[规范(x_a);规范(x_b)),“RowNames”s1,“VariableNames”s2)
T =2×2表norm_Ax_minus_b norm_x  _______________ ______ 反斜杠0 2.2188 2.6667 1.7764 lsqminnorm e15汽油

次の図はこの内容を説明するもので,それぞれの方法でどの解が返されるかを示しています。青のラインは,方程式 x 2 - 2 3. x 1 + 8 3. の解の数が無限であることを示しています。オレンジ色の丸は,原点から解のラインまでの最小距離を表します。lsqminnormが返す解はこのラインと円の接点と完全に一致します。これは,この解が原点に最も近い解であることを表します。

lsqminnormでランク計算のための許容誤差を指定すると,問題のスケールを定義して,ランダムノイズが解を破損しないようにすることができます。

ランク5の低ランク行列と,右辺のベクトルbを作成します。

rng默认的%的再现性U = randn (200 5);V = randn (100 5);= U * V ';b = U*randn(5,1) + 1e-4*randn(2000,1);

lsqminnormを使用して線形システム 斧头 b を解きます。A *取向xのノルムを計算して,解の質を確認します。

x = lsqminnorm (A, b);规范(*取向)
ans = 0.0014
规范(x)
ans = 0.1741

次に,行列一个に少量のノイズを追加し,もう一度この線形システムを解きます。このノイズは線形システムの解ベクトルxに過剰に影響しています。

噪声= A + 1e-12*randn(200,100);xnoise = lsqminnorm(声音吵醒,b);规范(声音吵醒* xnoise - b)
ans = 0.0010
规范(xnoise)
ans = 1.1215 e + 08年

解が大きく異なる理由は,ノイズが一个の低ランク近似に影響しているためです。つまり,lsqminnormは,一个のQR分解でR行列の対角にある小さな値を実際より重要なものとして扱います。理想的には,Rの対角にある小さな値は0として扱われるべきです。

声音吵醒のQR分解でR行列の対角要素をプロットします。対角要素の多くで,次数が1平台以及です。

(Q, R, p) = qr(声音吵醒,0);semilogy (abs(诊断接头(R)),“o”

图中包含一个轴。坐标轴包含一个类型为line的对象。

この問題の解決方法は,lsqminnormで使用する許容誤差を大きくして,誤差が1 e-8未満の声音吵醒の低ランク近似を計算に使用することです。これにより,結果に対するノイズの影響がはるかに小さくなります。許容誤差を使用して得られる解は,元の解xに非常に近いものです。

xnoise = lsqminnorm(anise, b, 1e-8);规范(声音吵醒* xnoise - b)
ans = 0.0014
规范(xnoise)
ans = 0.1741
规范(x - xnoise)
ans = 1.0811 e-14

警告が有効になっている状態で,低ランク係数行列を含む線形システムを解きます。

ランク2の3行3列の行列を作成します。この行列で最初の2列を同時に追加すると,3列目を取得できます。

A = [1 2 3;4 5 9;6 7 13]
一个=3×31 2 3 4 5 9 6 7 13

問題 斧头 b の最小ノルムの最小二乗解を求めます。ここで b 一个 の2列目と等しくなります。lsqminnorm“警告”フラグを指定すると,一个が低ランクであることが検出された場合に警告が表示されます。

b = (:, 2);x = lsqminnorm (A, b,“警告”
警告:Rank不足,Rank = 2, tol = 1.072041e-14。
x =3×1-0.3333 0.6667 0.3333

入力引数

すべて折りたたむ

係数行列。係数行列は線形方程式系で左辺に Ax = B として表示されます。係数行列は非スパースとスパースのどちらかにできます。

データ型:|
複素数のサポート:あり

入力配列。ベクトルまたは行列として指定します。Bは線形方程式系で左辺にAx = Bとして表示されます。Bが行列の場合,この行列の各列は右辺の各ベクトルを表します。

データ型:|
複素数のサポート:あり

ランクの許容誤差。非負のスカラーとして指定します。許容誤差を指定すると、解が係数行列のランダム ノイズの影響を受けにくくなります。既定では、lsqminnorm一个のQR分解に基づいて托尔を計算します。

lsqminnorm一个のランクを,QR分解(Q, R, p) = qr (A, 0)の行列Rにおいて絶対値が托尔より大きい対角要素の数として計算します。一个のランクがkの場合,この関数はの最初のk列にRの最初のk行を乗算して,一个の低ランク近似を形成します。許容誤差を変更すると,一个の低ランク近似に影響します。

例:X = lsqminnorm (A, B, 1飞行)

データ型:

低ランク行列の警告の切り替え。“nowarn”または“警告”として指定します。“警告”を指定すると,lsqminnormは係数行列一个がランク落ちしている場合に警告を生成します。

例:X = lsqminnorm (A, B,“警告”)

ヒント

  • lsqminnormが計算する最小ノルム解は,解が複数ある場合に重要です。方程式Ax = bは,一个が劣決定(行の数が列より少ない)であるか低ランクである場合,解が多数あります。

  • lsqminnorm (A, B, tol)は通常,pinv (tol) * Bと比べて,線形システムの最小ノルムの最小二乗解を効率的に計算できます。lsqminnormは完全直交分解(COD)を使用して一个の低ランク近似を求めますが,pinvは特異値分解(圣)を使用します。そのため,pinvlsqminnormの結果は完全には一致しません。

  • スパース行列では,lsqminnormは密行列と異なるアルゴリズムを使用するため,結果も異なります。

参考

||

トピック

R2017bで導入