我有以下问题。
我的任务是为数据拟合多项式。我想使用 Gram-Schimdt 正交化过程来实现 QR 算法。它内置在这个函数中:
function [ Q,R ] = QRDec( A )
n = length(A(1,:));
for i=1:n
Q(:,i) = A(:,i);
for j=1:i-1
R(j,i) = (Q(:,j)')*Q(:,i);
Q(:,i) = Q(:,i)-R(j,i)*Q(:,j);
end
R(i,i) = norm(Q(:,i),2);
if R(i,i) == 0
break;
end
Q(:,i)=Q(:,i)/R(i,i);
end
end
矩阵 Q,R 与在 MatLab 函数中实现的这些 Q,R 几乎相同。唯一的区别是符号。如果我用 MatLab 函数求解我的方程组 R*x=Q*y,我会得到精确解。但是如果我使用我自己的矩阵 Q 和 R,那么我会得到错误的结果。谁能告诉我我的方法的问题在哪里?我还附上了我的脚本代码。
% clear variables
clear; clc;
N = 100;
p = ones(1,15);
d = 14;
x = linspace(0,1,N)';
y = polyval(p,x);
A = zeros(N,d+1);
for i = 1 : d+1
A(:,i) = x.^(i-1);
end
[Qm,Rm] = QRDec(A);
[Q,R] = qr(A,0);
a_qrm = Rm\(Qm'*y);
a_qr = R\(Q'*y);
end
你认为这么大的错误会是计算错误造成的吗?我真的很绝望,因为我似乎有两个相同的线性方程组并且解决方案不同。