【问题标题】:Differentiating a Centred and Scaled Polyfit Fit区分居中和缩放的 Polyfit 拟合
【发布时间】: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


    【解决方案1】:

    链式法则的简单应用给出了

    根据定义

    这样

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

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

    【讨论】:

    • 谢谢,花了很长时间摸不着头脑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2019-12-30
    • 2018-02-20
    • 2013-06-04
    相关资源
    最近更新 更多