期刊
论文
课题
会议
Matlab与Mathematica在非线性拟合中应用比较

【关键字】数据拟合,Matlab,Mathematica,内建函数

【出   处】 2018年 1期

【收   录】中文学术期刊网

【作   者】郑丽 李亮 陈宇

【单   位】

【摘   要】  摘 要:文章简单介绍了Matlab与Mathematica的拟合函数功能,并通过具体例子的数据,分别利用Matlab与Mathematica进行了非线性拟合,对比了它们的应用办法,分析了各自的特点。 


  摘 要:文章简单介绍了Matlab与Mathematica的拟合函数功能,并通过具体例子的数据,分别利用Matlab与Mathematica进行了非线性拟合,对比了它们的应用办法,分析了各自的特点。

  关键词:数据拟合,Matlab,Mathematica,内建函数

  Matlab与Mathematica是两种常用的数学软件。Matlab具备卓越的数值计算能力,还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。Matlab的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似。Mathematica是一套整合数值以及符号运算的数学工具软件,提供了人们容易使用的顶级科学运算环境。Mathematica具有高阶的演算方法,以及丰富的数学函数库和庞大的数学知识库,让Mathematica在符号运算,逻辑推理等方面比Matlab做得更快更好,也可以提供精确的数值运算结果。对于很多问题的解决,这两种强大的计算软件都可以做到,但Mathematica比Matlab的操作界面更加简洁直观,输入形式也与传统数学公式相一致,这对于没有学过计算机语言的学生操作起来相对更为方便,Mathematica强大的函数库和知识库,使它可以用简单的函数解决问题。

  这里我们就数据非线性拟合问题来比较两种软件的应用。

以全国大学生数学建模竞赛2004C题饮酒驾车的数据为例,利用房室模型分析后可建立微分方程组,求得结果为:人若在短时间内喝的酒,则血液中的酒精含量与距离喝酒时间的函数关系为

其中,,,为待定参数。假设一体重为70公斤的人短时间内喝下两瓶啤酒后,隔一定时间测量他的血液中酒精含量(毫克/百毫升),得到数据为

  时间(小时) 0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 酒精含量 30 68 75 82 82 77 68 68 58 51 50 41 时间(小时) 6 7 8 9 10 11 12 13 14 15 16 酒精含量 38 35 28 25 18 15 12 10 7 7 4

根据表中数据确定参数,,的值。

  这里,我们分别利用Matlab与Mathematica的内建函数进行数据拟合,比较他们在使用上的异同,便于大家根据自身实际选择适合自己的数学软件。

  首先,我们分别用Matlab与Mathematica做出数据的散点图。

在Matlab命令窗口中,分别定义横坐标,纵坐标,以“·”绘出散点图像。

  >> t = [ 0.25,0.5,0.75,1,1.5,2,2.5,3,3.5,4,4.5,5,6,7,8,9,10,11,12,13,14,15,16 ];

  >> y = [ 30,68,75,82,82,77,68,68,58,51,50,41,38,35,28,25,18,15,12,10,7,7,4 ];

>> plot = ( t,y,)

  即可绘制出带坐标的散点图。

  在Mathematica的NoteBook中输入数据,按照坐标对形式输入数据,用内建函数ListPlot将数据绘制散点图。

In[1]:= data={{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}};

  pg=ListPlot[data]

  就可以输出的带坐标的散点图。

当数据需手动输入时,Mathematica可以随时将录入错误的数据加以修正,而在Matlab命令窗口中,如果需要修正数据,就必须调出已输入过的数据再加以修改,查找起来不如Mathematica方便。作图时Matlab使用绘图命令plot = ( t,y,),而Mathematica用ListPlot[data],两种软件绘图操作都很方便。

  其次,利用软件的内建函数对此数据进行非线性拟合,做出比较。

  用Matlab的内建函数对参数求解,可调用最小二乘拟合函数lsqcurvefit( ),先定义非线性函数fun.m文件:

  function y = fun(a,t)

y =;

这里为,为,代表,即为。

  在命令窗口中运行以下命令:

  >> t = [ 0.25,0.5,0.75,1,1.5,2,2.5,3,3.5,4,4.5,5,6,7,8,9,10,11,12,13,14,15,16 ];

  >> y = [ 30,68,75,82,82,77,68,68,58,51,50,41,38,35,28,25,18,15,12,10,7,7,4 ];

>> a = lsqcurvefit(,[0.2;2;100],t,y)

  a =

  0.1855

  2.0079

  114.4329

即,,。根据拟合出的参数值将其代回,作出曲线图与散点图的对比图,可以看出,此曲线拟合程度较好。

  函数lsqcurvefit是非线性最小二乘法拟合函数,使用格式为lsqcurvefit(fun,x0,xdata,ydata,…),其中fun是要拟合的函数,x0是各参数的初值,xdata是横坐标,ydata是纵坐标。输入命令时,一般是随意取一组初值,再把算出来的值当作初值继续算,直到两者相差不大为止。如果改变初值,可能会导致给出的参数值产生较大改变。如将本例中初值分别设为0.1,10,79,则求得三个参数值分别为0.1855,2.0079,114.4332,结果变化不大。而当初值设为10,100,10时,求得三个参数值分别为0.1235,100.00,79.4943,改变较大。可见用函数lsqcurvefit做拟合时,初值选取具有不确定性。查看Matlab的帮助文档,nlinfit与lsqcurvefit同属于非线性最小二乘拟合,一般来说都能得到比较接近的结果。但是由于nlinfit使用的是牛顿方法,在使用时也需要给出参数的初值,当问题对初值比较敏感时,不同的初值会导致差异较大。在本例中当初始值设为0.2,10,50时,用nlinfit也可以拟合,而当初值改为0.2,50,100时,非线性拟合命令nlinfit失效。由此可见,在Matlab中用内建函数lsqcurvefit与nlinfit做非线性拟合时,对初值的依赖性是比较大的。当然,Matlab用于拟合的函数还有很多,基于软件Matlab的扩展性,在Matlab中还集成了一个拟合工具箱模块可以调用,功能十分强大。

下面我们在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.

论文推荐 +更多
不锈钢在4-甲基咪唑缓蚀液中的电化学行为研究
长庆油田第一净化厂外输污水配伍性试验研究
低烟耐火材料聚氧化磷腈的合成与表征研究
等离子发射光谱法测定煤中总硫含量的研究
煤与瓦斯突出危险区域巷道贯通安全技术
登录 注册 投稿