一 出现的问题
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.在弹出的窗口中,其实只选择第一个选项即可,其他两个可选可不选,因为我们要的参数就在第一个选项里,这

本文介绍了使用Matlab Curve工具进行曲线拟合时遇到的精度丢失问题及解决方案。通过保存拟合结果到工作区并提取高精度参数,解决了由参数截断导致的计算误差。

360

被折叠的 条评论
为什么被折叠?



