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