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