我正在尝试在Matlab中拟合简单的多项式曲线。我有看起来像这样绘制的测量数据(可以下载here):
现在,我想将二阶多项式拟合到此曲线。因此,在Matlab中,我执行了以下操作:
load vel.csv
load dp.csv
[p, ~, ~] = polyfit(vel, dp, 2);
figure()
scatter(vel, dp);
hold on;
plot(vel,polyval(p,vel));
hold off;
但是结果看起来并不像Matlab完全符合多项式:
如何使用Matlab的polyfit
函数获得不错的曲线拟合?
答案 0 :(得分:3)
尽管您没有使用它们,但是当您指定其他输出时,polyfit
在进行多项式拟合之前将x
数据居中并缩放,这将导致不同的多项式系数:
>> [p, ~, ~] = polyfit(vel, dp, 2)
p =
1.4683 35.7426 68.6857
>> p = polyfit(vel, dp, 2)
p =
0.022630 3.578740 -7.354133
这是polyfit
documentation的相关摘录:
如果选择该选项,则在应用多项式系数之前,调用polyval
来居中并缩放数据时,需要使用第三个输出。我的建议是坚持对polyfit
的第二次调用,该调用将给出正确的多项式并产生正确的图,除非您确实需要居中和缩放数据:
答案 1 :(得分:2)