【发布时间】:2014-08-08 15:27:21
【问题描述】:
我有一些数据要建模,以便能够在与数据相同的范围内获得相对准确的值。
为此,我使用 polyfit 来拟合 6 阶多项式,并且由于我的 x 轴值,它建议我将其居中并缩放以获得更准确的拟合。
但是,现在我想找到这个函数的导数,以便为我的模型的速度建模。
但我不确定 polyder 函数如何与我制作的缩放和拟合的 polyfit 交互。 (我不想使用未缩放的模型,因为这不是很准确)。
这是一些重现我的问题的代码。我试图在将 x 值放入适合导数之前重新调整 x 值,但这仍然没有解决问题。
x = 0:100;
y = 2*x.^2 + x + 1;
Fit = polyfit(x,y,2);
[ScaledFit,s,mu] = polyfit(x,y,2);
Deriv = polyder(Fit);
ScaledDeriv = polyder(ScaledFit);
plot(x,polyval(Deriv,x),'b.');
hold on
plot(x,polyval(ScaledDeriv,(x-mu(1))/mu(2)),'r.');
这里我选择了一个简单的多项式,这样我就可以准确地拟合它并产生实际的导数。
任何帮助将不胜感激,谢谢。 我正在使用 Matlab R2014a 顺便说一句。
编辑。 只是一直在玩它,通过将微分的结果点除以标准偏差 mu(2),它在 -3e-13 到大约 5e-13 的范围内给出了非常接近的结果。
polyval(ScaledDeriv,(x-mu(1))/mu(2))/mu(2);
不太清楚为什么会这样,还有其他更优雅的方法来解决这个问题吗?
编辑2。很抱歉再次进行编辑,但又一次搞砸了,发现对于大样本 x = 1:1000;偏差变得更大,达到 10。我不确定这是否是由于 polyfit 不好,即使它是居中和缩放的,还是由于绘制导数的有趣方式。
感谢您的宝贵时间
【问题讨论】:
标签: matlab curve-fitting