问题很简单。将四次曲线拟合到一些嘈杂的数据。Mldivide 给出了错误的系数值集,而直接计算伪逆可以工作。
四次方程:c0 + c1*t + c2*t^2 + c3*t^3 + c4*t^4
输入文件包含每个样本的 t 和实际值。
fid = fopen('Data_Corr.txt');
A = zeros(4001,5);
for i = 1:4001
dataPt = fscanf(fid,'%f',2);
A(i,:) = [1 dataPt(1) dataPt(1)^2 dataPt(1)^3 dataPt(1)^4];
b(i) = dataPt(2);
end
%c = b\A; %using matlab mldivide
c = inv(A'*A)*A'*b; %computing pseudo inverse directly
for i = 1:4001
d(i) = A(i,1)*c(1) + A(i,2)*c(2) + A(i,3)*c(3) + A(i,4)*c(4) + A(i,5)*c(5);
end
figure; hold on; grid on;
plot(b,'-b');
plot(d,'r-');