Origin软件提供了多种非线性拟合工具,可以在“分析”菜单栏下找到。其中的多项式拟合对于许多不规则的函数曲线有比较好的拟合功能,一般需要选择合适的阶数才能达到比较好的拟合效果。下面针对一个实际例子,说明在应用多项式拟合功能时需要注意的问题。以某两列数据为例(好友梅子提供),其图形如下图:
上图中空白圆点为给定的数据点,而红线为多项式拟合得到的曲线,其项数取为9阶,对应的多项式表达式为:
Y =-0.19458+1.80324E-4*X-5.26164E-9*X^2-7.17185E-13*X^3+4.99335E-17*X^4
-1.3961E-21*X^5+2.11857E-26*X^6-1.83728E-31*X^7+8.59577E-37*X^8-1.68907E-42*X^9
相关系数R^2=0.99179,与给定数据点拟合很好。但使用该表达式时需要特别注意,在X比较大的情况下,多项式的高次项将会对计算结果产生较大的影响。图中的红点是采用上述表达式得到的对应X点处的Y值,在X=80000时,函数值即与实验点和曲线发生了较大偏离。很明显,这是由于小数点舍入误差的原因造成的,因此,这个表达式还不能应用。否则在取较大X值时将产生发散现象。对于这个问题,有两种处理方法:
1、加大多项式中小数点后的位数,从而保证精度;
2、适当降低多项式的阶数,将高次项的影响降低,从而得到合理的曲线。
第一种方法这里不再述及,给出第2种处理方法。如下图:
从上图可以看出,按阶数=6得到的表达式可以应用。用Fortran计算得到的离散点(红点)与实验数据吻合的也较好。附Fortran程序:
program test
implicit none
integer x,y,time,tmax
real ft,A,b1,b2,b3,b4,b5,b6
parameter(A=-0.36515,B1=2.84281E-4,B2=-2.36972E-8,B3=7.33018E-13,B4=-1.07321E-17,B5=7.56699E-23,B6=-2.07544E-28)
open(unit=10,file='ft.txt')
tmax=100000
do time=0,tmax,10000
ft=A+B1*(time)+B2*(time)**2.0+B3*(time)**3.0+B4*(time)**4.0+B5*(time)**5.0+B6*(time)**6.0
write(10,*) time,ft
enddo
close(10)
end
从上面的实例可以看出,在进行多项式拟合时,多项式阶数的选择是比较关键的。

评论