如何使用 Matlab 的 polyfit 获得合适的曲线拟合?
How to get a proper curve fit using Matlab's polyfit?
我正在尝试在 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
函数获得合适的曲线拟合?
polyfit
的使用是正确的,但是您在绘制多项式时忘记包括 S
and mu
。
有两种方法可以修复您的代码:
选项 1
改变
[p, ~, ~] = polyfit(vel, dp, 2);
plot(vel,polyval(p,vel));
成为
[p, S, mu] = polyfit(vel, dp, 2);
plot(vel,polyval(p,vel,S,mu));
选项2
不要指定 S
和 mu
。变化
[p, ~, ~] = polyfit(vel, dp, 2);
成为
p = polyfit(vel, dp, 2);
输出
虽然您不使用它们,但当您指定附加输出时,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
的第二次调用,它给出正确的多项式并生成正确的图,除非你真的需要居中和缩放数据:
我正在尝试在 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
函数获得合适的曲线拟合?
polyfit
的使用是正确的,但是您在绘制多项式时忘记包括 S
and mu
。
有两种方法可以修复您的代码:
选项 1
改变
[p, ~, ~] = polyfit(vel, dp, 2);
plot(vel,polyval(p,vel));
成为
[p, S, mu] = polyfit(vel, dp, 2);
plot(vel,polyval(p,vel,S,mu));
选项2
不要指定 S
和 mu
。变化
[p, ~, ~] = polyfit(vel, dp, 2);
成为
p = polyfit(vel, dp, 2);
输出
虽然您不使用它们,但当您指定附加输出时,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
的第二次调用,它给出正确的多项式并生成正确的图,除非你真的需要居中和缩放数据: