在前面已经介绍Malthus、Logistic两种预测模型,这是两种典型的数学模型.但是这两种拟合方式可以实现的非多项式模型是非常有限的,如何自定函数形式进行数据拟合是本节所要介绍的内容.在Matlab语言中,有许多方式可以实现非多项式拟合,其中的lsqcurvefit(@myfun,x0,xdata,ydata)和nlinfit(X,y,fun,beta0)是最常用的命令,下面将介绍它们的实现方式.
例3-8 输入输出测量问题
有一个原理未知的黑箱系统:在这个系统中每输入一个数据都会输出一个数据.经过若干次试验,测量数据如表3-12所示.为了能够深入对该黑箱进行研究,请找出输入与输出之间的关系式.
表3-12 输入输出测量数据
【解题思路】
图3-18 输入输出测量数据散点图
为了确定函数形式,首先使用Matlab画出数据的散点图,以便观察数据的规律,如图3-18所示.
通过对于图像所呈现规律的分析,认为可以用以下函数对数据进行描述.其中,x表示系统的输入,y表示系统的输出;参数a,b,c就是通过拟合需要求解的参数.
y=ax2+b sin(x)+cx3
估计一般形式拟合函数参数的Matlab源程序如下所示:
1.首先需要通过Matlab新建一M文件,命名为myfun.m,其内容如下:function F=myfun(x,xdata)
F=x(1)*xdata.^2+x(2)*sin(xdata)+x(3)*xdata.^3;
2.然后在Command Window窗口中键入命令进行参数拟合,其内容如下:
xdata=[3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];
ydata=[16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3];
x0=[10,10,10];
[x,resnorm]=lsqcurvefit(@myfun,x0,xdata,ydata)
在以上命令中,首先建立一个M文件,用于存放自定的函数形式,参数x与data就是函数参数接口.在命令窗口输入的命令中,第一、二行为测量数据,第三行x0是参数预估计数值,而第四行核心程序就是对参数进行估计.在程序运行后得到的x是一个1×3的数组,分别代表a、b、c;而resnorm得到的将是该拟合函数所产生的拟合平方误差.可以得到拟合函数如下所示:
y=0.2269x2+0.3385sin(x)+0.3021x3
使用M文件编程过程中,需要注意将M文件存放在当前的运行目录下,并且以函数名命名,否则将会发生编译错误.
例3-9 公司销售量预测问题
为了指导生产,现有一家公司对本年度前十个月的销售量作了数据统计,统计数据如表3-13所示.该公司希望能够通过统计数据进行分析,找出数据内在的关系式,并对该年的后两个月进行销售量预测.
表3-13 公司销售量统计数据
【解题思路】
图3-19 公司销售量数据散点图
为了确定函数形式,首先使用Matlab画出数据的散点图,以便观察数据的规律,如图3-19所示.
通过对于图所呈现规律的分析,认为可以用以下函数对数据进行描述.其中,x表示时间月份,y表示公司的销售量;参数a,b,c就是通过拟合需要求解的参数.
y=ax+b ln x+c
估计一般形式拟合函数参数的Matlab源程序如下所示:
1.首先需要通过Matlab新建一个M文件,命名为myfun.m,其内容如下:
function yy=myfun(b)eta0,x
a=beta0(1);
b=beta0(2);
c=beta0(3);
yy=c*x+b*log(x)+a;
2.然后在Command Window窗口中键入命令进行参数拟合,其内容如下:
x=[1 2 3 4 5 6 7 8 9 10];
y=[10 16 21 26 30 34 38 41 45 49];
beta0=[3 6 5];
betafit=nlinfit(x,y,′myfun1′,beta0)
在以上命令中,首先建立一个M文件,用于存放自定的函数形式.在命令窗口中输入的命令中,第一、二行为测量数据,第三行beta0是参数预估计数值,而第四行核心程序就是对参数进行估计.在程序运行后得到的x是一个1×3的数组,分别代表a、b、c,可以得到拟合函数如下所示:
y=6.7347x+4.6543lnx+3.1337
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。