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初版の「Numerical analysis」という本を読みましたが、読んだ後私はもっと混乱しています(少し混乱していますが、私が見つけた中で最も簡単なので、本でアルゴリズムを実行したいと思います)。
誰かがこのアルゴリズムを正しい方法で実行するのを手伝ってくれますか?
注: この本はHereにあります。実際には 253 ページにあります。つまり、最初の部分の後の部分のアルゴリズムを MATLAB コードに変換したいということです (つまり、私が話している一般化です)。このアルゴリズムの問題は、2 番目のステップを計算して転送する場合、前の行列を考慮する必要があり、たとえば A(:,1) を [R1(2,2),R1 に変更する必要があることです。 (3,2),R1(4,2)]' そして、この新しいベクトルを使用して最初のステップで行ったすべてを計算するため、このプロセスは、これを MATLAB に変換する方法がわからないプロセスです。最初のステップは簡単ですが、他のステップは難しいです。