Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

qrinsert

QR 分解から列または行を挿入

構文

[Q1,R1] = qrinsert(Q,R,j,x)
[Q1,R1] = qrinsert(Q,R,j,x,"col")
[Q1,R1] = qrinsert(Q,R,j,x,"row")

説明

[Q1,R1] = qrinsert(Q,R,j,x) は、行列 A1 の QR 分解を返します。ここで、A1 は、列 xA(:,j) の前に挿入された A = Q*R です。An 列で j = n+1 の場合、xA の最後の列の後に挿入されます。Ax のデータ型が異なる場合、Q1 および R1 のデータ型は A と同じになります。

[Q1,R1] = qrinsert(Q,R,j,x,"col")[Q1,R1] = qrinsert(Q,R,j,x) と等価です。

[Q1,R1] = qrinsert(Q,R,j,x,"row") は、行列 A1 の QR 分解を返します。ここで、A1 は、追加の行 xA(j,:) の前に挿入された A = Q*R です。

5-by-5 の行列の QR 分解を行うとします。qrinsert の関数呼び出しを 1 回使用して行が挿入された行列の QR 分解を返します。

A = magic(5);  
[Q,R] = qr(A);
j = 3; 
x = 1:5;
[Q1,R1] = qrinsert(Q,R,j,x,"row")

Q1 =
    0.5231    0.5039   -0.6750    0.1205    0.0411    0.0225
    0.7078   -0.6966    0.0190   -0.0788    0.0833   -0.0150
    0.0308    0.0592    0.0656    0.1169    0.1527   -0.9769
    0.1231    0.1363    0.3542    0.6222    0.6398    0.2104
    0.3077    0.1902    0.4100    0.4161   -0.7264   -0.0150
    0.3385    0.4500    0.4961   -0.6366    0.1761    0.0225

R1 =
   32.4962   26.6801   21.4795   23.8182   26.0031
         0   19.9292   12.4403    2.1340    4.3271
         0         0   24.4514   11.8132    3.9931
         0         0         0   20.2382   10.3392
         0         0         0         0   16.1948
         0         0         0         0         0

関数 qrinsert は有効な QR 分解を返します。ただし、行を元の行列に明示的に挿入してから qr の関数呼び出しを使用して QR 分解を求めた場合、異なる因数分解の結果が得られる可能性があります。

A2 = [A(1:j-1,:); x; A(j:end,:)];
[Q2,R2] = qr(A2)

Q2 =
   -0.5231    0.5039    0.6750   -0.1205    0.0411    0.0225
   -0.7078   -0.6966   -0.0190    0.0788    0.0833   -0.0150
   -0.0308    0.0592   -0.0656   -0.1169    0.1527   -0.9769
   -0.1231    0.1363   -0.3542   -0.6222    0.6398    0.2104
   -0.3077    0.1902   -0.4100   -0.4161   -0.7264   -0.0150
   -0.3385    0.4500   -0.4961    0.6366    0.1761    0.0225

R2 =
  -32.4962  -26.6801  -21.4795  -23.8182  -26.0031
         0   19.9292   12.4403    2.1340    4.3271
         0         0  -24.4514  -11.8132   -3.9931
         0         0         0  -20.2382  -10.3392
         0         0         0         0   16.1948
         0         0         0         0         0

アルゴリズム

関数 qrinsert は、Rj 列 (または行) 目に x の値を挿入します。次に、一連のギブンス回転を使用して j 列 (または行) 目で対角線上およびその下にある R のゼロでない要素をゼロに変更します。[1]

参照

[1] Golub, Gene H., and Charles F. Van Loan. Matrix Computations. 4th ed. Baltimore, MD: Johns Hopkins University Press, 2013, Sections 6.5.2–6.5.3, pp. 335–338.

拡張機能

バージョン履歴

R2006a より前に導入

参考

| |