Matlab软件
我们利用一个函数来y=5*x.^2+7*cos(x)-15*x;来生成一组数据键入以下代码clear clcx=linspace(1,8,20);y=5*x.^2+7*cos(x)-15*x;plot(x,y,'o')生成的数据图如图
首先,我们使用polyfit()函数进行数据拟合,其使用格式为P=polyfit(x,y,5);上面的代码中,P是拟合之后的多项式各项系数,x是待拟合数据的X轴数据,y是待拟合数据的Y轴数据,5是我们想要拟合的几阶的多项式,如果是4的话就是说我们拟合出来的多项式是四阶的。如图所示,就是5阶的多项式系数,一个6个数据
得到拟合的多项式系数之后,我们想要绘制图像的话就需要得到(X,Y)的数据,使用polyval()函数可以得到想要的数据。如Y1=polyval(P,x);P就是上面拟合得到的多项式系数,x就是X轴上的数据值,所得到的函数值为Y1。绘制图像如下
由上图可见,拟合精度是挺高的。如果拟合精度不够的话,我们可以将5改成6或7或更高,同时需要注意的是过拟合的问题,阶数越高并一定就越好。
以上的拟合是在我们不知道函数形式的情况下做的多项式拟合,如果我们已知函数形式,只是函数系数不知道的话,就可以使用lsqcurvefit()函数进行拟合。对于本例中的函数拟合来说,简单的用法如下func=@(a,x) a(1)*x.^2+a(2)*cos(x)-a(3)*x;%定义待拟合函数,a为系数,x为变量a=[0 0 0];%定义系数初始点b= lsqcurvefit(func,a,x,y);%得到拟合系数代码运行结果如下。如图可知,拟合出的系数与我们实际设置的系数是一样的,当然,这也是因为我们的数据没有误差,但是也可以验证可以方法的正确性。
将拟合出来的结果绘制图像,使用如下代码hold onplot(x,func(b,x));运行结果如图
对于lsqcurvefit来说,知识点很多,本例只是介绍简要用法,具体的还需要读者自行查阅