Matlab Gramm Schmidt QR因子分解不';t正确返回Q和R

Matlab Gramm Schmidt QR因子分解不';t正确返回Q和R,matlab,octave,matrix-inverse,Matlab,Octave,Matrix Inverse,我已经为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); fo

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

我现在明白了,我缺少信息。你是对的,我期望的结果是错误的,我认为Q的转置应该等于它的倒数,就像在Householder中一样。同时,我看到了差异,我解决了,谢谢!