Main Content

fixed.qlessQRMatrixSolve

Q-less QR 分解を使用した X に対する線形方程式系 (A'A)X = B の求解

R2020b 以降

説明

X = fixed.qlessQRMatrixSolve(A,B) は QR 分解を使用して線形方程式系 (A'A)X = B を解きます (Q の値は計算しません)。

このコードの結果は以下を計算することと等価です。

[~,R] = qr(A,0);
X = R\(R'\B)
または
X = (A'*A)\B

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

X = fixed.qlessQRMatrixSolve(A,B,outputType,forgettingFactor) は、A の各行の処理後に forgettingFactor を R に乗算して、線形方程式系の解を返します。

X = fixed.qlessQRMatrixSolve(A,B,outputType,[],regularizationParameter) は、行列方程式 (λ2In+A'A)X=B を解きます。ここで、λ は regularizationParameter です。

X = fixed.qlessQRMatrixSolve(A,B,outputType,forgettingFactor,regularizationParameter) は、行列方程式 A'α,λAα,λX=B を解きます。ここでは次のようになります。

Aα,λ=[αmλIn[αmαm1α]A],

α は forgettingFactor、λ は regularizationParameter、m は A の行数です。

すべて折りたたむ

この例では、QR 分解を使用して線形方程式系 (AA)X=B を解く方法を示します。QR 分解の Q 因子は明示的に計算しません。

rng('default');
m = 6;
n = 3;
p = 1;
A = randn(m,n);
B = randn(n,p);
X = fixed.qlessQRMatrixSolve(A,B)
X = 3×1

    0.2991
    0.0523
    0.4182

関数 fixed.qlessQRMatrixSolve は次のコードと等価ですが、関数 fixed.qlessQRMatrixSolve の方が効率的で、この関数では固定小数点データ型がサポートされます。

X = (A'*A)\B
X = 3×1

    0.2991
    0.0523
    0.4182

この例では、出力データ型を指定して、固定小数点データをもつ方程式系を解く方法を示します。

方程式系を表すデータを定義します。行列 A を、標準偏差が 1 のゼロ平均の正規分布乱数行列として定義します。

rng('default');
m = 6;
n = 3;
p = 1;
A0 = randn(m,n);
B0 = randn(n,p);

QR の計算時にオーバーフローを回避するために、AB に対して固定小数点データ型を指定します。

T.A = fi([],1,22,16);
T.B = fi([],1,22,16);
A = cast(A0,'like',T.A)
A = 
    0.5377   -0.4336    0.7254
    1.8339    0.3426   -0.0630
   -2.2589    3.5784    0.7147
    0.8622    2.7694   -0.2050
    0.3188   -1.3499   -0.1241
   -1.3077    3.0349    1.4897

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 22
        FractionLength: 16
B = cast(B0,'like',T.B)
B = 
    1.4090
    1.4172
    0.6715

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 22
        FractionLength: 16

後退代入でオーバーフローを回避するために出力データ型を指定します。

T.X = fi([],1,29,12);

関数 fixed.qlessQRMatrixSolve を使用して解 X を計算します。

X = fixed.qlessQRMatrixSolve(A,B,T.X)
X = 
    0.2988
    0.0522
    0.4180

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 29
        FractionLength: 12

この結果を、組み込みの MATLAB® 倍精度浮動小数点演算の結果と比較します。

X0 = (A0'*A0)\B0
X0 = 3×1

    0.2991
    0.0523
    0.4182

入力引数

すべて折りたたむ

線形方程式系 (A'A)X = B の係数行列。

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

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

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

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

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

忘却係数。0 ~ 1 の非負のスカラーとして指定します。忘却係数によって、過去のデータに指定される重みが決まります。forgettingFactor の値は、A の各行の処理後に QR 分解の出力 R に乗算されます。

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

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

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

出力引数

すべて折りたたむ

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

拡張機能

バージョン履歴

R2020b で導入

すべて展開する