2016-04-30 6 views
-1

Gramm-Schmidt QR factorisationのMATLAB関数を実装しました。 Qの逆数は逆数と等しくなければなりませんが、そうではありません。理由は分かりません。私は他の誰かの機能を試してみましたが、それは同じで、結果は同じでした。Gramm Schmidt QR factorisationがQとRを正しく返さない

function [Q R] = gramschmidt(A) 
    [n n] = size(A); 

    for i = 1:n 
     R(i,i) = norm(A(:, i)); 
     Q(:, i) = A(:, i)/R (i, i); 

     for j = i + 1 : n 
      R(i, j) = Q(:, i)' * A(:, j); 
      A(:, j) = A(:, j) - Q(:, i) * R(i, j); 
     end 
    end 
end 

`

答えて

0

はまず、私はあなたがQの抱合体ががそれと同じである必要があり転置であると言って何を意味するのかを考えることがユニタリ行列である逆、すなわちです:これは私の関数です。

第2に、関数によって返されたQがユニタリではないと思いますか?確認しよう。

A = randn(20,20); 
[Q, R] = gramschmidt(A); 

diff = @(X,Y) max(abs(X(:)-Y(:))); % element-wise max abs difference 
diff(Q'*Q, eye(size(A))) 
ans = 
    1.7764e-15 

ご覧のとおり、非常に精度が高いです。

また、Matlabには、この分解を実行する組み込みの効率的なqr関数があります。この関数は、実装のような四角形の行列ではなく、長方形の行列も処理します。

+0

私は今、私は情報が不足していたことがわかります。あなたは正しい、私は間違った結果を期待していた、私はQの転置は、ハウスホルダーのようにその逆に等しいと思った。一方で、私はその違いを見て、私はそれを並べ替え、ありがとう! –

関連する問題