格拉姆施密特 QR 分解无法正确返回 Q 和 R



我已经实现了Gramm-Schmit-QR因子分解的MATLAB函数。Q的倒数应该等于它的倒数,但事实并非如此,我不明白为什么。我甚至尝试了其他人的函数,这是相同的,结果是相同的。这是我的功能:

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

`

首先,我认为你的意思是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函数来执行这种分解,它还处理矩形矩阵,而不仅仅是像您的实现那样的方形矩阵。

最新更新