您的位置首页生活百科

Matlab进行多项式曲线拟合以及自定义系数的拟合

Matlab进行多项式曲线拟合以及自定义系数的拟合

的有关信息介绍如下:

Matlab进行多项式曲线拟合以及自定义系数的拟合

通常,我们做实验或者一些其他手段得到的数据并不是连续的、大量的,当我们需要从有限的数据中得到其中的关系时,经常用到的手段是将其进行拟合。在Matlab中,有polyfit()函数可以方便我们对数据进行多项式拟合,还有lsqcurvefit()函数进行最小二乘多项式进行拟合。我们以两个实例进行说明。

我们利用一个函数来

y=5*x.^2+7*cos(x)-15*x;

来生成一组数据

键入以下代码

clear

clc

x=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 on

plot(x,func(b,x));

运行结果如图