32.qr函数
矩阵的正交分解又称QR分解。QR分解把一个m×n的矩阵A分解为一个正交矩阵Q和一个上三角矩阵R的乘积,即A=Q·R。在MATLAB中用qr函数实现矩阵的QR分解。函数的语法格式为:
X=qr(A):返回QR分解A=Q∗R的上三角R因子。如果A为满矩阵,则R=triu(X)。如果A为稀疏矩阵,则R=X。
[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。
[___]=qr(A,0):使用上述任意输出参数组合进行精简分解。输出的大小取决于m×n矩阵A的大小:
· 如果m>n,则qr仅计算Q的前n列和R的前n行。
· 如果m≤n,则精简分解与常规分解相同。
[Q,R,P]=qr(A,outputForm):outputForm指定为'matrix'或'vector'。此标志控制置换输出P是以置换矩阵还是置换向量形式返回。要使用此选项,必须指定qr的三个输出参数。
· 如果outputForm是'vector',则P是满足A(:,P)=Q∗R的置换向量。
· outputForm的默认值为'matrix',满足A∗P=Q∗R。
[C,R]=qr(S,B):计算C=Q'∗B和上三角因子R。可以使用C和R计算稀疏线性方程组S∗X=B和X=R\C的最小二乘解。
[C,R,P]=qr(S,B):还返回置换矩阵P。可以使用C、R和P计算稀疏线性方程组S∗X=B和X=P∗(R\C)的最小二乘解。
[___]=qr(S,B,0):使用上述任意输出参数组合进行精简分解。输出的大小取决于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)。
【例1-34】使用系数矩阵的精简QR分解来求解线性方程组Ax=b。
运行程序,效果如图1-15所示。
图1-15 R的对角线的半对数图
与chol、lu函数一样,qr函数同样可对稀疏矩阵进行分解。
【例1-35】计算west0479稀疏矩阵的QR分解。
结果表明置换分解产生的R因子的非零值明显减少。
图1-16 分解前的R1因子图
图1-17 QR分解后的R因子图