下面我们在Mathematica的Notebook上,调用内建函数FindFit对数据进行非线性拟合,这里可以按照函数解析式直接进行定义。
In[3]:= modle =;
FindFit[data,modle,{,,},t]
Out[4]= {,,}
In[5]:= modle /.%
Out[5]=
In[6]:= fitg = Plot[ %,{t,0,20}];
Show[ pg,fitg ]
在Out[7]中同样可以得到曲线图fitg与散点图pg的对比图。
在软件Mathematica中,可以按照函数的形式进行定义,便于查找与对照。这里对参数求解使用的内建函数格式为FindFit[data,expr,pars,vars],其用途是求出参数pars的数值,给出关于自变量vars的函数expr对data最佳拟合。表达式expr对参数可以线性或非线性依赖,在线性情况下,FindFit求出全局最优拟合,在非线性情况下,FindFit通常求出局部最优拟合。
通过对比分析,Mathematica与Matlab都能方便快捷的进行数据拟合运算,计算结果完全一致。在录入数据及表达式方面,Mathematica比Matlab 界面更为直观,并且方便数据输入与命令修改。另外在Mathematica中,也可以直接输入、、等希腊字母,函数表达式与常规书写一致,这对无编程基础的学生来说,操作与修改都很直观,便于查找计算结果。在拟合函数方面, Mathematica里有Fit和FindFit两种用于拟合的内建函数。Fit采用函数列表,用一个确定且有效的步骤找到产生最佳二乘拟合的函数线性组合。FindFit既能用于线性拟合,也能用于非线性拟合,通过搜索产生数据最佳拟合的参数值,可以设置选项参数选择所需的搜索精确度、最大迭代次数等,也可以通过设置选择需要的内部运算方法,如MethodQuasiNewton表示用牛顿方法,MethodNMinimize表示用搜索全局极小值的办法。一般情况下,不必设置选项参数直接用FindFit拟合,系统会自动寻找最佳拟合方法求出参数值。Matlab里提供了fit,polyfit,nlinfit,lesqcurvefit等几类线性、非线性拟合函数,用函数lesqcurvefit或nlinfit进行非线性拟合时,需要选取初值,计算结果受初值影响较大。而在Mathematica中用FindFit拟合不需要输入初始值,内建函数能够自动找出最佳数据拟合的参数值,非常方便,当然在需要时,也可以输入初值或约束条件。
Mathematica与Matlab在数据拟合上的功能都十分强大,而根据教学实践情况,学生更易于接受Mathematica的使用,而且Mathematica还提供了互动且丰富的帮助功能,在8.0版本中还出现了中文帮助,使学生容易理解软件的操作,可以现学现用。Mathematica这种强大的功能,简单的操作,加上非常容易学习特点,使学生可以更快的掌握并运用。
参考文献:
[1] 姜启源,谢金星,叶俊. 数学模型(第三版)[M]. 北京:高等教育出版社,2003.
[2] 顔文勇. 数学建模[M]. 北京:高等教育出版社,2011.
[3] 卓金武 MATLAB在数学建模中的应用[M].北京航空航天大学出版社,2011.