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

2025-10-28 20:46:08

1、我们利用一个函数来

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')

生成的数据图如图

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

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

2、首先,我们使用polyfit()函数进行数据拟合,其使用格式为

P=polyfit(x,y,5);

上面的代码中,P是拟合之后的多项式各项系数,x是待拟合数据的X轴数据,y是待拟合数据的Y轴数据,5是我们想要拟合的几阶的多项式,如果是4的话就是说我们拟合出来的多项式是四阶的。如图所示,就是5阶的多项式系数,一个6个数据

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

3、得到拟合的多项式系数之后,我们想要绘制图像的话就需要得到(X,Y)的数据,使用polyval()函数可以得到想要的数据。如

Y1=polyval(P,x);

P就是上面拟合得到的多项式系数,x就是X轴上的数据值,所得到的函数值为Y1。绘制图像如下

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

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

4、由上图可见,拟合精度是挺高的。如果拟合精度不够的话,我们可以将5改成6或7或更高,同时需要注意的是过拟合的问题,阶数越高并一定就越好。

5、以上的拟合是在我们不知道函数形式的情况下做的多项式拟合,如果我们已知函数形式,只是函数系数不知道的话,就可以使用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);%得到拟合系数

代码运行结果如下。如图可知,拟合出的系数与我们实际设置的系数是一样的,当然,这也是因为我们的数据没有误差,但是也可以验证可以方法的正确性。

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

6、将拟合出来的结果绘制图像,使用如下代码

hold on

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

运行结果如图

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢