📄 qr_hhouse.m
字号:
function R = qr_hhouse(x,p,q)
% purpose: 利用Hyperbolic Householder变换对块Hankel矩阵x进行快速QR分解,
% x = QR,size(x)=[m,n]
% 目前只适用于 m ≥ n 的情况
% Data: 6/4/2008
% Version 1.0
% Copyright (C) 2008, Yang Chun
%
% 输入 - x 为列满秩矩阵
% - p与q分别为每个块的行数和列数
% 输出 - R 为正交基的坐标,为上三角矩阵
%
% R = qr_hhouse(x,p,q) 返回正交基坐标
[m,n] = size(x);
R1 = qr_house(x(:,1:q));
R1 = R1(1:q,1:q);
b = x(1:m-p,1:q)'*x(1:m-p,q+1:n) + x(m-p+1:m,1:q)'*x(m-p+1:m,q+1:n);
Z = zeros(q,n-q);
for k1 = 1:n-q
Z(1,k1) = b(1,k1)/R1(1,1);
for k2 = 2:q
Z(k2,k1) = (b(k2,k1) - R1(1:k2-1,k2)'*Z(1:k2-1,k1))/R1(k2,k2);
end
end
% Z = R1'\(x(1:m-p,1:q)'*x(1:m-p,q+1:n) + x(m-p+1:m,1:q)'*x(m-p+1:m,q+1:n));
R = zeros(n);
R(1:q,:) = [R1,Z];
f = [zeros(1,n-q);x(m-p+1:m,q+1:n);x(1:p,1:n-q);Z];
clear x R1 Z
for k1 = 1:n-q
f(1,:) = R(k1,1:n-q);
[v,beta] = hhouse(f(:,k1),p,q);
G = v'*f(:,k1:n-q);
S = beta*v;
f(p+2:2*p+q+1,k1:n-q) = -f(p+2:2*p+q+1,k1:n-q);
f(:,k1:n-q) = f(:,k1:n-q) - S*G;
R(q+k1,q+k1:n) = f(1,k1:n-q);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -