非奇异矩阵QR分解
实(复)非奇异矩阵A\boldsymbol{A}A,化成正交(酉)矩阵的Q\boldsymbol{Q}Q与实(复)非奇异上三角矩阵的R\boldsymbol{R}R的乘积的形式,即
A=QR
\boldsymbol{A=QR}
A=QR
Householder变换
又称作对称变换,将需要变换的向量以某一镜像向量为参照进行对称变换,两向量关于镜像向量对称。假设Householder变换为y=Hx\boldsymbol{y=Hx}y=Hx,其中H=I−2uuT\boldsymbol{H=I-2uu^T}H=I−2uuT,uuu便是镜像向量。
因此对于一个矩阵的变换相当于对矩阵的每一列分别进行Householder变换,将其变换成一个上三角矩阵所需要的形式,但是需要注意的是,每一次变换之后,矩阵A后续的列会发生变化。
贴代码
function [ H,U,R,T ] = my_qr_householder( A )
if det(A)==0
display('矩阵奇异,无法进行qr分解');
return
end
R = sym([]);
H = sym([]);
U = sym([]);
A = sym(A);
n = size(A,1);
T = sym(eye(n));
sum = 1;
for j = 1:n-1 %从第一列到第n-1列,之后的元素全部变换到第j列第j个元素上
x = A(j:n,j);
y = sqrt(x'*x);
x(1) = x(1) - y;
u = x./sqrt(x'*x);%向量单位化
U(j:n,sum) = u;
H(:,:,sum) = eye(n);
H(j:n,j:n,sum) = H(j:n,j:n,sum) - 2*(u*u');
R(1:j-1,:,sum) = A(1:j-1,:);
R(j:n,j:n,sum) = simplify(H(j:n,j:n,sum)*A(j:n,j:n));
T = H(:,:,sum)*T;
A = R(:,:,sum);
sum = sum + 1;
end
T = simplify(T)';
end
本文详细介绍了非奇异矩阵的QR分解方法,通过Householder变换将矩阵转化为正交矩阵Q和上三角矩阵R的乘积形式。代码示例展示了如何使用MATLAB实现这一过程。
1万+

被折叠的 条评论
为什么被折叠?



