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 = Q*R,该列插在 A(:,j) 之前。如果 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 = Q*R,该行插在 A(j,:) 之前。
示例
给定 5-by-5 矩阵的 QR 分解,使用对 qrinsert 的一个函数调用,返回插入一行的矩阵的 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 0qrinsert 函数返回有效的 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 函数将 x 的值插入 R 的第 j 列(或行)。然后,它使用一系列的吉文斯旋转将第 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 之前推出