Gram Schmidt QR 因式分解没有 return Q 和 R 正确

Gramm Schmidt QR factorisation doesn't return Q and R correctly

我已经为 Gramm-Schmidt 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 函数来执行此分解,它还可以处理矩形矩阵,而不仅仅是像您的实现那样的方形矩阵。