我正在寻求帮助,以概括我在 Householder QR 分解的第一步中所做的代码。我做了以下事情:
A=[60,41,-88;42,60,51;0,-28,56;126,82,-71];
disp(A)
m=length(A(:,1));
n=length(A(1,:));
I=eye(m);
e1=I(:,1)';
%We compute the first step of the method.
beta=-sqrt(A(:,1)'*A(:,1));
y=A(:,1)'-beta.*e1;
alpha=sqrt(2)/(sqrt(y*y'));
v=alpha*y;
U=I-(v'*v);
disp(U)
R1=U*A;
disp(R1)
我已经尝试了以下步骤来完成其余的步骤:
for k=2:n
ek=I(:,k)';
for j=0:k
beta=-sqrt(R1(k+j,k)'*R1(k+j,k));
end
disp(beta)
end
%For the standard basis just define A=eye(N), so the vectors are
%A(:,i).
但它没有用,它给出了一个错误,说明如下:
尝试访问 R1(5,3);索引超出范围,因为 size(R1)=[4,3]。
Householderfactorization 中的错误(第 33 行) beta=-sqrt(R1(k+j,k)'*R1(k+j,k));
所以我一直在尝试寻找另一种获取算法的方法,但我无法弄清楚如何做到这一点,我已经阅读了 Kincaid & Cheney 第一版的“数值分析”一书以获得澄清,但在阅读之后我更加困惑(我想执行书中的算法,因为它是我发现的最简单的算法,尽管有点令人困惑)。
有人可以帮我以正确的方式执行这个算法吗?
注意:这本书可以在这里找到,实际上是在第 253 页。所以问题是我想将第一个之后的部分的算法翻译成 MATLAB 代码(我说的是泛化),而该算法存在的问题是,当您要计算第二步并前进时,您必须考虑先前的矩阵,然后您必须将 A(:,1) 更改为 [R1(2,2),R1 (3,2),R1(4,2)]',然后使用这个新向量计算你在第一步中所做的一切,所以这个过程是我不知道如何将其转换为 MATLAB 的过程。第一步很容易,其他的对我来说很难。