2016-04-30 61 views
-1

我已经实现了Gramm-Schmidt QR因式分解的MATLAB函数。 Q的逆应该等于它的倒数,但它不是,我不明白为什么。我甚至试着用别人的功能,这是相同的,结果是一样的。这是我的函数:Gramm Schmidt QR因式分解不能正确返回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的共轭转应该等于它的倒数,即它是一个矩阵。

其次,是什么让你觉得你的函数返回的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的转置应该等于它的反转,就像在Householder中一样。同时,我看到了差异,并将其整理出来,谢谢! –