Main Content

fixed.qrMatrixSolve

QR 分解を使用した x に対する線形方程式系 Ax = B の求解

説明

x = fixed.qrMatrixSolve(A,B) は QR 分解を使用して線形方程式系 Ax = B を解きます。

x = fixed.qrMatrixSolve(A,B, outputType) は、線形方程式系 Ax = B の解を、outputType で指定された出力型をもつ変数として返します。

x = fixed.qrMatrixSolve(A,B,outputType,regularizationParameter) は、次の線形方程式系の解を返します。

[λInA]x=[0n,pB]

ここで、A は m 行 n 列の行列、B は m 行 p 列の行列、λ は正則化パラメーターです。

すべて折りたたむ

この例では、QR 分解を使用して単純な線形方程式系 Ax=b を解く方法を示します。

この例では、A を、大きな条件数をもつ 5 行 3 列の行列として定義します。悪条件 (大きな条件数) の非正方行列を含む線形方程式系を解くには、QR 分解を使用しなければなりません。

rng default;
A = gallery('randsvd', [5,3], 1000000);
b = [1; 1; 1; 1; 1];
x = fixed.qrMatrixSolve(A,b)
x = 3×1
104 ×

   -2.3777
    7.0686
   -2.2703

関数 fixed.qrMatrixSolve の結果を、関数 mldivide または \ の結果と比較します。

x = A\b
x = 3×1
104 ×

   -2.3777
    7.0686
   -2.2703

この例では、過決定システムを解く際の正則化パラメーターの影響を示します。この例の量 y は、時間 t のいくつかの異なる値で測定され、次の観測値を生成します。

t = [0 .3 .8 1.1 1.6 2.3]';
y = [.82 .72 .63 .60 .55 .50]';

減衰指数関数を使用してデータをモデル化します。

y(t)=c1+c2e-t

上記の式は、ベクトル y が他の 2 つのベクトルの線形結合で近似されることを示しています。一方はすべて 1 の定数ベクトルであり、もう一方は成分 exp(-t) を含むベクトルです。未知の係数 c1 および c2 は、モデルのデータの偏差の二乗和を最小化する最小二乗近似を実行することで計算可能です。6 つの方程式と 2 つの未知数があり、6 行 2 列の行列で表されます。

E = [ones(size(t)) exp(-t)]
E = 6×2

    1.0000    1.0000
    1.0000    0.7408
    1.0000    0.4493
    1.0000    0.3329
    1.0000    0.2019
    1.0000    0.1003

関数 fixed.qrMatrixSolve を使用して最小二乗解を求めます。

c = fixed.qrMatrixSolve(E, y)
c = 2×1

    0.4760
    0.3413

つまり、データの最小二乗近似は次のようになります。

y(t)=0.4760+0.3413e-t.

次のステートメントでは、t を等間隔にインクリメントしてモデルを評価し、結果を元のデータとともにプロットします。

T = (0:0.1:2.5)';
Y = [ones(size(T)) exp(-T)]*c;
plot(T,Y,'-',t,y,'o')

Figure contains an axes object. The axes object contains 2 objects of type line.

入力行列が悪条件である場合、正則化パラメーターを小さい正の値にすると、最小二乗問題の調整を向上させ、推定値の分散を小さくすることができます。このデータの最小二乗解に対する正則化パラメーターの影響を確認します。

figure;
lambda = [0:0.1:0.5];
plot(t,y,'o', 'DisplayName', 'Original Data');
for i = 1:length(lambda)
 c = fixed.qrMatrixSolve(E, y, numerictype('double'), lambda(i));
 Y = [ones(size(T)) exp(-T)]*c;
 hold on
 plot(T,Y,'-', 'DisplayName', ['lambda =', num2str(lambda(i))])
end
legend('Original Data', 'lambda = 0', 'lambda = 0.1', 'lambda = 0.2', 'lambda = 0.3', 'lambda = 0.4', 'lambda = 0.5')

Figure contains an axes object. The axes object contains 7 objects of type line. These objects represent Original Data, lambda = 0, lambda = 0.1, lambda = 0.2, lambda = 0.3, lambda = 0.4, lambda = 0.5.

入力引数

すべて折りたたむ

線形方程式系 Ax = B の係数行列。

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

線形方程式系 Ax = B の B を表す入力ベクトルまたは行列。

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

出力データ型。numerictype オブジェクトまたは数値変数として指定します。outputTypenumerictype オブジェクトとして指定されている場合、出力 x は指定されたデータ型をもちます。outputType が数値変数として指定されている場合、x はその数値変数と同じデータ型をもちます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | fi | numerictype

正則化パラメーター。非負のスカラーとして指定します。正則化パラメーターを小さい正の値にすると、問題の調整を向上させ、推定値の分散を小さくすることができます。バイアスがありますが、推定値の分散が小さいと、多くの場合、最小二乗推定値と比べて平均二乗誤差が小さくなります。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi

出力引数

すべて折りたたむ

解。ベクトルまたは行列として返されます。A が m 行 n 列の行列で B が m 行 p 列の行列の場合、xnp 列の行列です。

拡張機能

バージョン履歴

R2020b で導入