MATLAB qr():进行QR分解(附带实例)
矩阵的正交分解又被称为 QR 分解,也就是将一个 m×n 的矩阵 A 分解为一个正交矩阵 Q(满足 QTQ=I,即其列向量两两正交,且长度为 1)和一个上三角矩阵 R 的乘积,也就是说 A=QR。QR 分解广泛应用于求解线性方程组、计算特征值和奇异值分解等问题。
在 MATLAB 中,利用 qr() 函数可以进行 QR 分解,其调用格式如下:
【实例】对矩阵进行 QR 分解。在命令行窗口中输入以下语句,并查看输出结果。
正交矩阵的特点是其列向量是两两正交的(内积为零),并且列向量的范数为 1(单位向量)。下面证明矩阵 Q 是正交矩阵。在编辑器中编写以下程序并运行。
在 MATLAB 中,利用 qr() 函数可以进行 QR 分解,其调用格式如下:
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,满足 AP = QR
[Q,R,P] = qr(A,outputForm) % 指定置换信息 P 是以 'matrix'(默认)还是以 'vector' 形式返回
% 指定为 'vector',则 A(:,P) = QR;默认为 'matrix',满足 AP = Q*R
[C,R] = qr(S,B) % 计算 C = Q'B 和上三角因子 R
% 使用 C 和 R 可以计算稀疏线性系统 SX = B 和 X = R\C 的最小二乘解
[C,R,P] = qr(S,B) % 额外返回置换矩阵 P,选择该矩阵是为了减少 R 矩阵中非零元素的填充
% 使用 C、R 和 P 可以计算稀疏线性系统 SX = B 和 X = P(R\C) 的最小二乘解
【实例】对矩阵进行 QR 分解。在命令行窗口中输入以下语句,并查看输出结果。
>> clear
>> H = magic(3);
>> [Q,R] = qr(H)
Q =
-0.8480 0.5223 0.0901
-0.3180 -0.3655 -0.8748
-0.4240 -0.7705 0.4760
R =
-9.4340 -6.2540 -8.1620
0 -8.2394 -0.9655
0 0 -4.6314
>> A = Q*R
A =
8.0000 1.0000 6.0000
3.0000 5.0000 7.0000
4.0000 9.0000 2.0000
由结果可以看出,矩阵R是上三角矩阵,同时满足 A=QR。正交矩阵的特点是其列向量是两两正交的(内积为零),并且列向量的范数为 1(单位向量)。下面证明矩阵 Q 是正交矩阵。在编辑器中编写以下程序并运行。
dQ = det(Q); % 计算 Q 的行列式,正交矩阵的行列式应为 ±1
disp(['行列式 det(Q): ', num2str(dQ)])
% 检查列向量之间是否正交
for i = 1:3
H = Q(:,i); % 第 i 列向量
normH = norm(H); % 计算列向量的范数
disp(['Q 的第 ', num2str(i), ' 列的范数: ', num2str(normH)])
for j = (i+1):3
M = Q(:,j); % 第 j 列向量
N = H'*M; % 计算 Q 矩阵的第 i 列与第 j 列的内积
disp(['Q 的第 ', num2str(i), ' 列与第 ', num2str(j), ' 列的内积: ', num2str(N)])
end
end
运行程序后可以在命令行窗口得到如下结果:
行列式 det(Q): 1 Q 的第 1 列的范数: 1 Q 的第 1 列与第 2 列的内积: 5.5511e-17 Q 的第 1 列与第 3 列的内积: 0 Q 的第 2 列的范数: 1 Q 的第 2 列与第 3 列的内积: -2.0817e-17 Q 的第 3 列的范数: 1结果证明矩阵 Q 是正交矩阵。
ICP备案:
公安联网备案: