本页翻译不是最新的。点击此处可查看最新英文版本。
QR 分解
全页折叠
语法
R = qr(A)
[Q,R] = qr(A)
[Q,R,P] = qr(A)
[___] = qr(A,"econ")
[Q,R,P] = qr(A,outputForm)
[___] = qr(A,0)
[C,R] = qr(S,B)
[C,R,P] = qr(S,B)
[___] = qr(S,B,"econ")
[C,R,P] = qr(S,B,outputForm)
[___] = qr(S,B,0)
说明
示例
R = qr(A)
返回 QR 分解 A = Q*R
的上三角 R
因子。
示例
[Q,R] = qr(A)
对 m
×n
矩阵 A
执行 QR 分解,满足 A = Q*R
。因子 R
是 m
×n
上三角矩阵,因子 Q
是 m
×m
正交矩阵。
示例
[Q,R,P] = qr(A)
还返回一个置换矩阵 P
,满足 A*P = Q*R
。如果 A
为满矩阵,将选择置换矩阵,使得 abs(diag(R))
递减。
示例
[___] = qr(A,"econ")
使用上述任意输出参数组合进行精简分解。输出的大小取决于 m
×n
矩阵 A
的大小:
如果
m > n
,则qr
仅计算Q
的前n
列和R
的前n
行。如果
m <= n
,则精简分解与常规分解相同。
示例
[Q,R,P] = qr(A,outputForm)
指定置换信息 P
是以矩阵还是向量形式返回。例如,如果 outputForm
是 "vector"
,则 A(:,P) = Q*R
。outputForm
的默认值是 "matrix"
,满足 A*P = Q*R
。
[___] = qr(A,0)
等效于 qr(A,"econ","vector")
。不建议使用此语法。改用 "econ"
选项。
示例
[C,R] = qr(S,B)
计算 C = Q'*B
和上三角因子 R
。您可以使用 C
和 R
计算稀疏线性系统 S*X = B
和 X = R\C
的最小二乘解。
示例
[C,R,P] = qr(S,B)
还返回置换矩阵 P
,选择该矩阵是为了减少 R
中的填充。您可以使用 C
、R
和 P
计算稀疏线性系统 S*X = B
和 X = P*(R\C)
的最小二乘解。
示例
[___] = qr(S,B,"econ")
使用上述任意输出参数组合进行精简分解。输出的大小取决于 m
×n
稀疏矩阵 S
的大小:
如果
m > n
,则qr
仅计算C
和R
的前n
行。如果
m <= n
,则精简分解与常规分解相同。
示例
[C,R,P] = qr(S,B,outputForm)
指定置换信息 P
是以矩阵还是向量形式返回。例如,如果 outputForm
是 "vector"
,则 S*X = B
的最小二乘解是 X(P,:) = R\C
。outputForm
的默认值为 "matrix"
,此时 S*X = B
的最小二乘解是 X = P*(R\C)
。
[___] = qr(S,B,0)
等效于 qr(S,B,"econ","vector")
。不建议使用此语法。改用 "econ"
选项。
示例
全部折叠
Q-Less QR 分解
打开实时脚本
求 5×5 幻方矩阵的 QR 分解。指定一个输出参数以只返回上三角因子。
A = magic(5);R = qr(A)
R = 5×5 -32.4808 -26.6311 -21.3973 -23.7063 -25.8615 0 19.8943 12.3234 1.9439 4.0856 0 0 -24.3985 -11.6316 -3.7415 0 0 0 -20.0982 -9.9739 0 0 0 0 -16.0005
矩阵的完整 QR 分解
打开实时脚本
通过指定两个输出参数来计算幻方测试矩阵的完整 QR 分解。
A = magic(5);[Q,R] = qr(A)
Q = 5×5 -0.5234 0.5058 0.6735 -0.1215 -0.0441 -0.7081 -0.6966 -0.0177 0.0815 -0.0800 -0.1231 0.1367 -0.3558 -0.6307 -0.6646 -0.3079 0.1911 -0.4122 -0.4247 0.7200 -0.3387 0.4514 -0.4996 0.6328 -0.1774
R = 5×5 -32.4808 -26.6311 -21.3973 -23.7063 -25.8615 0 19.8943 12.3234 1.9439 4.0856 0 0 -24.3985 -11.6316 -3.7415 0 0 0 -20.0982 -9.9739 0 0 0 0 -16.0005
在计算机精度范围内验证 。
norm(A-Q*R)
ans = 9.5562e-15
置换 QR 分解
打开实时脚本
指定三个输出参数以返回一个置换矩阵或向量,该置换矩阵或向量可减少 QR 分解的 R
因子中的填充。
计算 west0479
稀疏矩阵的 QR 分解。指定三个输出以返回满足 的置换矩阵。
load west0479A = west0479;[Q,R,P] = qr(A);
在计算机精度范围内验证置换矩阵 P
满足 A*P = Q*R
。
norm(A*P-Q*R,"fro")
ans = 3.3521e-10
现在指定 "vector"
选项以将 p
以置换向量形式返回。
[Q,R,p] = qr(A,"vector");
在计算机精度范围内验证置换向量 p
满足 A(:,p) = Q*R
。
norm(A(:,p) - Q*R,"fro")
ans = 3.3521e-10
验证对于稀疏输入,在分解中使用置换矩阵或置换向量所得的 R
因子的非零项比使用非置换分解的少。
[Q1,R1] = qr(A);spy(R1)
spy(R)
结果表明置换分解产生的 R
因子的非零值明显减少。
用精简 QR 因子求解线性系统
打开实时脚本
使用系数矩阵的精简 QR 分解来求解线性系统 。
使用 magic(10)
的前五列创建一个 10×5 系数矩阵。对于线性方程 的右侧,使用矩阵的行总和。在这种设置下,方程 的解应为由 1 组成的向量。
A = magic(10);A = A(:,1:5)
A = 10×5 92 99 1 8 15 98 80 7 14 16 4 81 88 20 22 85 87 19 21 3 86 93 25 2 9 17 24 76 83 90 23 5 82 89 91 79 6 13 95 97 10 12 94 96 78 11 18 100 77 84
b = sum(A,2)
b = 10×1 215 215 215 215 215 290 290 290 290 290
计算 A
的精简 QR 分解。然后用 x(p,:) = R\(Q\b)
求解线性系统 。由于 Q
是正交矩阵,此方程与 x(p,:) = R\(Q'*b)
相同。
[Q,R,p] = qr(A,"econ","vector")
Q = 10×5 -0.0050 -0.4775 -0.0504 0.5193 0.0399 -0.0349 -0.5001 -0.0990 -0.1954 -0.2006 -0.4384 0.1059 -0.4660 0.4464 0.0628 -0.0947 -0.4151 -0.2923 -0.2542 0.5274 -0.1246 -0.4117 -0.2812 -0.1326 -0.4130 -0.3787 0.0209 0.2702 0.4697 0.0390 -0.4085 -0.0017 0.2217 -0.2450 -0.2015 -0.0648 -0.3925 0.6939 0.0669 0.1225 -0.4683 0.0833 0.0283 -0.3038 0.5265 -0.4982 0.0867 0.0394 -0.1822 -0.4138
R = 5×5 -200.7112 -55.5026 -167.6040 -84.7237 -168.7997 0 -192.1053 -40.3557 -152.4040 -39.2814 0 0 101.3180 -89.4254 96.0172 0 0 0 41.0248 -14.9083 0 0 0 0 24.6386
p = 1×5 3 1 5 2 4
x(p,:) = R\(Q\b)
x = 5×1 1.0000 1.0000 1.0000 1.0000 1.0000
生成 R
的对角线的半对数图,以确认置换分解产生的 R 因子的 abs(diag(R))
是递减的。将 A
的奇异值绘制在同一个图中进行比较。实际上,R
的对角线值与 A
的奇异值具有类似的行为。因此,您可以使用 R
的对角线值来衡量矩阵 A
的奇异程度。
semilogy(abs(diag(R)),"-o")hold onsemilogy(svd(A),"r-o")legend("Diagonal of R","Singular Values of A")
求解稀疏线性系统
打开实时脚本
求解稀疏线性系统,并使用结果查看向量 b
有多少位于 S
的列空间中。
创建一个随机 500×20 稀疏矩阵(密度为 10%)和一个由 1 组成的向量。使用 qr
将矩阵分解为因子 R
和 C = Q'*b
。
S = sprand(500,20,0.1);b = ones(500,1);[C,R] = qr(S,b,"econ");
使用这些结果求解 ,解为 x = R\C
。
x = R\C;
以恒等式 为例。
除以 b
的范数,会得到一个新的恒等式,表明 b
有多少位于 S
的列空间中:
.
第一个项说明 b
有多少不在 S
的列空间中,而第二个项说明 b
有多少在 S
的列空间中。
t1 = norm(S*x-b)^2/norm(b)^2
t1 = 0.4000
t2 = norm(C)^2/norm(b)^2
t2 = 0.6000
求解矩形稀疏线性系统
打开实时脚本
使用 qr
求解矩阵方程 ,其中 为矩形稀疏系数矩阵。
加载 west0479
稀疏矩阵,并将前 200 列用作线性系统中的矩形系数矩阵。对于方程的右侧,使用 的行总和。在这种设置下, 的解是由 1 组成的向量。
load west0479S = west0479(:,1:200);B = sum(S,2);
使用 qr
以及两个输入和三个输出求解 。线性系统的解是 x = P*(R\C)
。
[C,R,P] = qr(S,B);x = P*(R\C);
在计算机精度范围内验证 。
norm(S*x-B)
ans = 8.3874e-11
注意:要计算上三角因子 R
和置换矩阵 P
,但避免计算正交矩阵 Q
(这通常是对 qr
的调用中计算量最大的部分),您可以将 B
指定为空矩阵:
emptyB = zeros(size(S,1),0);[~,R,P] = qr(S,emptyB);
输入参数
全部折叠
A
— 输入矩阵
矩阵
输入矩阵,指定为满矩阵或稀疏矩阵。
数据类型: single
| double
复数支持: 是
S
— 输入系数矩阵
矩阵
输入系数矩阵,指定为稀疏矩阵。使用两个输入矩阵,qr
计算线性系统 S*X = B
的最小二乘解。
数据类型: double
复数支持: 是
B
— 右侧矩阵
矩阵
右侧矩阵,指定为满矩阵或稀疏矩阵。使用两个输入矩阵,qr
计算 C = Q'*B
,您可以用它来求解线性系统 S*X = B
。
数据类型: single
| double
复数支持: 是
outputForm
— 置换输出的形状
"matrix"
(默认) | "vector"
置换输出的形状,指定为 "matrix"
或 "vector"
。此标志控制置换输出 P
是以置换矩阵还是置换向量形式返回。要使用此选项,您必须指定 qr
的三个输出参数。
如果
outputForm
是"vector"
,则P
是满足A(:,P) = Q*R
的置换向量。outputForm
的默认值是"matrix"
,满足A*P = Q*R
。
示例: [Q,R,P] = qr(A,"vector")
输出参数
全部折叠
Q
— 正交因子
矩阵
正交因子,以矩阵形式返回,满足 A = Q*R
,其中 A
为 m
×n
矩阵。
对于完整分解,
qr(A)
以m
×m
正交矩阵形式返回Q
,满足 。对于满足
m > n
的矩形A
,精简分解qr(A,"econ")
仅计算Q
的前n
列和R
的前n
行。Q
的列构成A
的列空间的标准正交基。
不同的计算机和 MATLAB® 版本可能在 Q
中生成不同列,但它们在数值上依然精确。Q
和 R
中相应的行和列可以翻转其符号,因为这不会影响 A = Q*R
表达式的值。
R
— 上三角因子
矩阵
上三角因子,以满足 A = Q*R
的矩阵形式返回。当 A
为满矩阵并且指定了三个输出(即 [Q,R,P] = qr(A)
)时,R
的对角线元素按降序排列。
P
— 置换信息
矩阵 | 向量
置换信息,以矩阵或向量形式返回。P
的形状取决于 outputForm 的值。此外,qr
需要选择 P
以满足不同标准,具体取决于第一个输入矩阵是满矩阵还是稀疏矩阵:
满矩阵 -
qr
选择的P
要使abs(diag(R))
递减。稀疏矩阵 -
qr
选择的P
要减少R
中的填充。
C
— 线性系统因子
矩阵
线性系统因子,以矩阵形式返回,需满足 C = Q'*B
。S*X = B
的最小二乘解是 X = R\C
。如果指定了置换输出 P,则解是 X = P*(R\C)
或 X(P,:) = R\C
,具体取决于 outputForm 的值:
如果
outputForm
是"vector"
,则S*X = B
的最小二乘解是X(P,:) = R\C
。outputForm
的默认值为"matrix"
,此时S*X = B
的最小二乘解是X = P*(R\C)
。
提示
要求解涉及相同系数矩阵的多个线性系统,请使用 decomposition 对象。
对于语法
[C,R] = qr(S,B)
,仅当S
不具有低秩时,X = R\C
的值才是S*X = B
的最小二乘解。
参考
[1] Anderson, E., ed. LAPACK Users’ Guide. 3rd ed. Software, Environments, Tools. Philadelphia: Society for Industrial and Applied Mathematics, 1999. https://doi.org/10.1137/1.9780898719604.
[2] Davis, Timothy A. “Algorithm 915, SuiteSparseQR: Multifrontal Multithreaded Rank-Revealing Sparse QR Factorization.” ACM Transactions on Mathematical Software 38, no. 1 (November 2011): 1–22. https://doi.org/10.1145/2049662.2049670.
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
代码生成不支持对此函数使用稀疏矩阵输入。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
代码生成不支持对此函数使用稀疏矩阵输入。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
不支持稀疏输入。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
用法说明和限制:
输入
A
必须为非稀疏矩阵。
有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
全部展开
R2022b: 精简分解不推荐使用“0”语法
将继续支持语法 [___] = qr(A,0)
和 [___] = qr(S,B,0)
,但不再推荐使用。请改用 "econ"
选项来执行精简分解。
R2022a: 精简分解的选项
使用 "econ"
选项通过 qr
计算精简分解。除非指定第三个输出,否则功能与 qr(A,0)
相同。
R2022a: 带一个输出的语法始终返回上三角因子
语法 R = qr(A)
始终以上三角矩阵形式返回 R
,无论 A
是满矩阵或稀疏矩阵都是如此。以前,对于满矩阵 A
,单输出语法返回 R
矩阵,其中 Householder 向量位于矩阵的下三角部分。这些向量部分定义 Q
矩阵。
另请参阅
lu | chol | null | orth | qrdelete | qrinsert | qrupdate | decomposition | lsqminnorm | rank
主题
- 分解
- 线性方程组
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 简体中文
- English
- 日本 (日本語)
- 한국 (한국어)
Contact your local office