gpt4 book ai didi

matlab - 区分居中和缩放的 Polyfit 拟合

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:36 27 4
gpt4 key购买 nike

我有一些数据,我希望对其进行建模,以便能够在与数据相同的范围内获得相对准确的值。

为此,我使用 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 BTW。

编辑。只是在玩弄它,通过将微分的结果点除以标准偏差 mu(2),它给出了在 -3e-13 到大约 5e-13 范围内的非常接近的结果。

polyval(ScaledDeriv,(x-mu(1))/mu(2))/mu(2);

不太清楚为什么会这样,有没有另一种更优雅的方法来解决这个问题?

编辑2。抱歉进行了另一次编辑,但再次四处乱逛,发现对于大样本 x = 1:1000;偏差变得更大,达到 10。我不确定这是否是由于 polyfit 不好,即使它是居中和缩放的,还是由于导数的绘制方式很有趣。

谢谢你的时间

最佳答案

链式法则的简单应用给出

df(x)/dx = df(xS)/dxS * dxS/dx

根据定义

xS = (x-mu1)/mu2

由此可见

df(x)/dx = df(xS)/dxS /mu2

这正是您通过数字验证的内容。

大样本的准确性不足是由于您使用的是全局而非局部的拉格朗日多项式插值。我建议您尝试用样条拟合数据,并使用 fnder() 获得导数。另一种选择是在本地应用 polyfit() 函数,即应用于移动的一小组点,然后将 polyder() 应用于所有拟合多项式。

关于matlab - 区分居中和缩放的 Polyfit 拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25206954/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com