このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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
は、列 x
が A(:,j)
の前に挿入された A = Q*R
です。A
が n
列で j = n+1
の場合、x
は A
の最後の列の後に挿入されます。A
と x
のデータ型が異なる場合、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
は、追加の行 x
が A(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
は、R
の j
列 (または行) 目に 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 より前に導入