怎样用 mathematica 拟合二元函数?
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/11 15:42:30
怎样用 mathematica 拟合二元函数?
数据拟合
由一组已知数据(xk,yk)(k=1,2,…,n),求函数的近似解析式y=f(x),就是数据拟合问题,当然函数还可以是多元的.
Mathematica提供了进行数据拟合的函数:
Fit[data,funs,vars] 对数据data用最小二乘法求函数表funs中各函数的一个线性组合作为所求的近似解析式,其中vars是自变量或自变量的表.
例如:
Fit[data,{1,x},x] 求形为y=a+bx的近似函数式.
Fit[data,{1,x,x2},x] 求形为y=a+bx+cx2的近似函数式.
Fit[data,{1,x,y,x y},{x,y}] 求形为z=a+bx+cy+dxy的近似函数式.
以上出现的参数data的格式为{{x1,y1,…,f1},{x2,y2,…,f2},…}.
函数表中的函数还可以是更复杂的初等函数.
例1 由下面给出的一组数据进行线性拟合,并绘制拟合曲线.
xi 19.1 25 30.1 36 40 15.1 50
yi 76.3 77.8 79.25 80.8 82.35 83.9 85.1
In[1]:=data={{19.1,76.3},{25,77.8},{30.1,79.25},{36,80.8},
{40,82.35},{45.1,83.9},{50,85.1}};
f=Fit[data,{1,x},x]
Out[2]=70.5723+0.291456x
In[3]:= pd=ListPlot[data,DisplayFunction→Identity];
fd=Plot[f,{x,19,52},DisplayFunction→Identity];
Show[pd,fd,DisplayFunction→$DisplayFunction]
图13-49 线性拟合的示意图
Out[5]=-Graphics-
说明:上例使用一次函数得到很理想的拟合,图形如图13-49所示.
例2 由下面给出的一组数据进行二次函数拟合,并绘制拟合曲线.
xi 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
yi 5.1234 5.3057 5.5687 5.9378 6.4337 7.0978 7.9493 9.0253 10.3627
In[1]:= data={{0.1,5.1234},{0.2,5.3057},{0.3,5.5687},
{0.4,5.9378},{0.5,6.4337},{0.6,7.0978},
{0.7,7.9493},{0.8,9.0253},{0.9,10.3627}};
f=Fit[data,{1,x,x^2},x]
Out[2]=5.30661-1.83196x+8.17149x2
In[3]:= pd=ListPlot[data,DisplayFunction→Identity];
fd=Plot[f,{x,0,1},DisplayFunction→Identity];
Show[pd,fd,DisplayFunction→$DisplayFunction]
图13-50 使用二次函数拟合的示意图
Out[5]= -Graphics-
以上两例都是计算方法教材中的习题,利用Mathematica可以轻而易举地得到答案,并同时画出图形以便直观地了解拟合的质量.
以下是二元拟合.
例3 观察下面的二元函数拟合.
In[1]:=Flatten[Table[{x,y,1 + 5x –x y},
{x,0,1,0.2},{y,0,1,0.2}],1]
Out[1]={{0,0,1},{0,0.2,1},{0,0.4,1},
{0,0.6,1},{0,0.8,1},{0,1.,1},
{0.2,0,2.},{0.2,0.2,1.96},{0.2,0.4,1.92},
{0.2,0.6,1.88},{0.2,0.8,1.84},{0.2,1.,1.8},
{0.4,0,3.},{0.4,0.2,2.92},{0.4,0.4,2.84},
{0.4,0.6,2.76},{0.4,0.8,2.68},{0.4,1.,2.6},
{0.6,0,4.},{0.6,0.2,3.88},{0.6,0.4,3.76},
{0.6,0.6,3.64},{0.6,0.8,3.52},{0.6,1.,3.4},
{0.8,0,5.},{0.8,0.2,4.84},{0.8,0.4,4.68},
{0.8,0.6,4.52},{0.8,0.8,4.36},{0.8,1.,4.2},
{1.,0,6.},{1.,0.2,5.8},{1.,0.4,5.6},
{1.,0.6,5.4},{1.,0.8,5.2},{1.,1.,5.}}
In[2]:=Fit[%,{1,x,y,x y},{x,y}]
Out[2]=1.+5.x+7.77156×10-16 y -1.x y
In[3]:=Chop[%]
Out[3]= 1.+ 5.x -1.x y
说明:在上例的In[1]中,首先生成二元函数1+5x-xy在0≤x≤1,0≤y≤1时的一个数据表,然后In[2]由这些数据反过来求二元函数,说明Fit可以求解多元问题.In[3]使用函数Chop去掉系数很小的项,以此消除误差.
函数Chop的一般形式为:
Chop[expr,δ] 去掉表达式expr的系数中绝对值小于δ的项,δ的默认值为10-10.
最后这个例子用于说明Fit的第二个参数中可以使用复杂的函数,不限于1,x,x2等基本类型.
例4 观察下面使用初等函数组合进行的拟合.
In[1]:= ft=Table[N[1+2Exp[-x/3]],{x,10}]
Out[1]={2.43306,2.02683,1.73576,1.52719,1.37775,
1.27067,1.19394,1.13897,1.09957,1.07135}
In[2]:=Fit[ft,{1,Sin[x],Exp[-x/3],Exp[-x]},x]
Out[2]= 1.-4.44089×10-15e-x +2.e-x/3+2.22045×10-16Sin[x]
In[3]:=Chop[%]
Out[4]=1.+2.e-x/3
说明:在上例中,In[1]由一个指数函数生成数据表,然后In[2]由这些数据反过来进行拟合,其中的第2个参数使用了几个初等函数,用于说明可以任意选用函数组成函数表.
额外说一句,这个用matlab不是也很方便
由一组已知数据(xk,yk)(k=1,2,…,n),求函数的近似解析式y=f(x),就是数据拟合问题,当然函数还可以是多元的.
Mathematica提供了进行数据拟合的函数:
Fit[data,funs,vars] 对数据data用最小二乘法求函数表funs中各函数的一个线性组合作为所求的近似解析式,其中vars是自变量或自变量的表.
例如:
Fit[data,{1,x},x] 求形为y=a+bx的近似函数式.
Fit[data,{1,x,x2},x] 求形为y=a+bx+cx2的近似函数式.
Fit[data,{1,x,y,x y},{x,y}] 求形为z=a+bx+cy+dxy的近似函数式.
以上出现的参数data的格式为{{x1,y1,…,f1},{x2,y2,…,f2},…}.
函数表中的函数还可以是更复杂的初等函数.
例1 由下面给出的一组数据进行线性拟合,并绘制拟合曲线.
xi 19.1 25 30.1 36 40 15.1 50
yi 76.3 77.8 79.25 80.8 82.35 83.9 85.1
In[1]:=data={{19.1,76.3},{25,77.8},{30.1,79.25},{36,80.8},
{40,82.35},{45.1,83.9},{50,85.1}};
f=Fit[data,{1,x},x]
Out[2]=70.5723+0.291456x
In[3]:= pd=ListPlot[data,DisplayFunction→Identity];
fd=Plot[f,{x,19,52},DisplayFunction→Identity];
Show[pd,fd,DisplayFunction→$DisplayFunction]
图13-49 线性拟合的示意图
Out[5]=-Graphics-
说明:上例使用一次函数得到很理想的拟合,图形如图13-49所示.
例2 由下面给出的一组数据进行二次函数拟合,并绘制拟合曲线.
xi 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
yi 5.1234 5.3057 5.5687 5.9378 6.4337 7.0978 7.9493 9.0253 10.3627
In[1]:= data={{0.1,5.1234},{0.2,5.3057},{0.3,5.5687},
{0.4,5.9378},{0.5,6.4337},{0.6,7.0978},
{0.7,7.9493},{0.8,9.0253},{0.9,10.3627}};
f=Fit[data,{1,x,x^2},x]
Out[2]=5.30661-1.83196x+8.17149x2
In[3]:= pd=ListPlot[data,DisplayFunction→Identity];
fd=Plot[f,{x,0,1},DisplayFunction→Identity];
Show[pd,fd,DisplayFunction→$DisplayFunction]
图13-50 使用二次函数拟合的示意图
Out[5]= -Graphics-
以上两例都是计算方法教材中的习题,利用Mathematica可以轻而易举地得到答案,并同时画出图形以便直观地了解拟合的质量.
以下是二元拟合.
例3 观察下面的二元函数拟合.
In[1]:=Flatten[Table[{x,y,1 + 5x –x y},
{x,0,1,0.2},{y,0,1,0.2}],1]
Out[1]={{0,0,1},{0,0.2,1},{0,0.4,1},
{0,0.6,1},{0,0.8,1},{0,1.,1},
{0.2,0,2.},{0.2,0.2,1.96},{0.2,0.4,1.92},
{0.2,0.6,1.88},{0.2,0.8,1.84},{0.2,1.,1.8},
{0.4,0,3.},{0.4,0.2,2.92},{0.4,0.4,2.84},
{0.4,0.6,2.76},{0.4,0.8,2.68},{0.4,1.,2.6},
{0.6,0,4.},{0.6,0.2,3.88},{0.6,0.4,3.76},
{0.6,0.6,3.64},{0.6,0.8,3.52},{0.6,1.,3.4},
{0.8,0,5.},{0.8,0.2,4.84},{0.8,0.4,4.68},
{0.8,0.6,4.52},{0.8,0.8,4.36},{0.8,1.,4.2},
{1.,0,6.},{1.,0.2,5.8},{1.,0.4,5.6},
{1.,0.6,5.4},{1.,0.8,5.2},{1.,1.,5.}}
In[2]:=Fit[%,{1,x,y,x y},{x,y}]
Out[2]=1.+5.x+7.77156×10-16 y -1.x y
In[3]:=Chop[%]
Out[3]= 1.+ 5.x -1.x y
说明:在上例的In[1]中,首先生成二元函数1+5x-xy在0≤x≤1,0≤y≤1时的一个数据表,然后In[2]由这些数据反过来求二元函数,说明Fit可以求解多元问题.In[3]使用函数Chop去掉系数很小的项,以此消除误差.
函数Chop的一般形式为:
Chop[expr,δ] 去掉表达式expr的系数中绝对值小于δ的项,δ的默认值为10-10.
最后这个例子用于说明Fit的第二个参数中可以使用复杂的函数,不限于1,x,x2等基本类型.
例4 观察下面使用初等函数组合进行的拟合.
In[1]:= ft=Table[N[1+2Exp[-x/3]],{x,10}]
Out[1]={2.43306,2.02683,1.73576,1.52719,1.37775,
1.27067,1.19394,1.13897,1.09957,1.07135}
In[2]:=Fit[ft,{1,Sin[x],Exp[-x/3],Exp[-x]},x]
Out[2]= 1.-4.44089×10-15e-x +2.e-x/3+2.22045×10-16Sin[x]
In[3]:=Chop[%]
Out[4]=1.+2.e-x/3
说明:在上例中,In[1]由一个指数函数生成数据表,然后In[2]由这些数据反过来进行拟合,其中的第2个参数使用了几个初等函数,用于说明可以任意选用函数组成函数表.
额外说一句,这个用matlab不是也很方便