📄 qr_house.m
字号:
function [r,q] = qr_house(x)
% purpose: 用Householder镜像变换计算QR分解,x = qr,size(x)=[m,n]
% 目前只适用于 m ≥ n 的情况,且size(q) = size(x)
% Data: 31/3/2008
% Version 1.0
% Copyright (C) 2008, Yang Chun
%
% 输入 - x 为列满秩矩阵
% 输出 - q 为x的正交基
% - r 为正交基的坐标,为上三角矩阵
%
% r = qr_house(x) 返回正交基坐标
% [r,q] = qr_house(x) 返回正交基与正交基坐标
[m,n] = size(x);
if m > n
iterend = n;
else
iterend = n - 1;
end
for k1 = 1:iterend
[v,beta] = house(x(k1:m,k1));
G = v'*x(k1:m,k1:n);
S = beta*v;
x(k1:m,k1:n) = x(k1:m,k1:n) - S*G;
x(k1+1:m,k1) = v(2:m-k1+1);
d(k1) = beta;
end
clear G S
if nargout == 1
r = triu(x(1:n,:));
else
r = triu(x(1:n,:));
q = eye(m,n);
for k1 = iterend:-1:1
v = [1;x(k1+1:m,k1)];
G = v'*q(k1:m,k1:n);
S = d(k1)*v;
q(k1:m,k1:n) = q(k1:m,k1:n) - S*G;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -