【Matlab】Curve曲线拟合后如何获得高精度参数

一 出现的问题

Matlab的Curve工具是非常实用的曲线拟合工具,关于它的使用网上一搜一大把。一直以来,我也在使用它进行曲线拟合,而且一直用的很好,没有感觉到不对,直到今天出现了这样一个情况:
在拟合完一条3次多项式曲线后,直接将红框中的参数扔到C语言里参与计算了。
在这里插入图片描述
在C中的程序如下所示:

	res = -2.121e05*pow(x,3) + 6.302e05*pow(x,2) - 6.241e05*x + 2.06e05

这个式子与Curve中的参数完全吻合,而真正到计算时,res会返回一个“令人感觉不对”的数。甚至我将拟合时用的点带入,都不能得到准确的结果。

二 问题所在

后来经过考虑,认为这是精度丢失造成的结果。所谓精度丢失,即上图红框中的参数只取了4位有效数字,这本来就是截断后的浮点数,是有精度损失的。因此在对计算精度非常敏感的场合,将会产生不可预知的误差。

三 问题解决

知道了原因,解决办法很简单——直接从Curve中获得高精度的参数不就好了?可是当我在网上一顿搜索无果后,只得自己想办法解决。
经过摸索,可以通过将Curve拟合结果保存到workspace中,然后分别提取参数的方式获得高精度参数。具体步骤如下:
1.在Curve中,Fit–>Save to Workspace
在这里插入图片描述
2.在弹出的窗口中,其实只选择第一个选项即可,其他两个可选可不选,因为我们要的参数就在第一个选项里,这里我把它存到一个名为fittedmodel6的变量中。
在这里插入图片描述
3.这时,在workspace中就出现了fittedmodel6变量,我们在命令行中查看fittedmodel6变量,输出如下:

fittedmodel6 = 

     Linear model Poly3:
     fittedmodel6(x) = p1*x^3 + p2*x^2 + p3*x + p4
     Coefficients:
       p1 =  -2.121e+05
       p2 =   6.302e+05
       p3 =  -6.241e+05
       p4 =    2.06e+05

可以看到,仍然是截断为4位有效数字。
5.分别提取变量,提取后的即是满精度数据。fittedmodel6中有p1 p2 p3 p4四个参数,取出其中的某一个只需fittedmodel6.px即可。那么方法就简单了:
直接依次取出,存在不同的变量里,然后再将高精度的数copy到C程序中,问题得以解决。

p1 =

    -2.121057443100790e+05

>> p2 = fittedmodel6.p2

p2 =

     6.301790424353683e+05

>> p3 = fittedmodel6.p3

p3 =

    -6.241000774146421e+05

>> p4 = fittedmodel6.p4

p4 =

     2.060275894166932e+05
  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜老越

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值