当前位置:文档之家› 数学建模模型与应用

数学建模模型与应用

Mathematica软件常用功能【实验目的】1. 用Mathematica软件进行各种数学处理;2. 用Mathematica软件进行作图;3. 用Mathematica软件编写程序.【注意事项】Mathematica中大写小写是有区别的,如Name、name、NAME等是不同的变量名或函数名。

系统所提供的功能大部分以系统函数的形式给出,内部函数一般写全称,而且一定是以大写英文字母开头,如Sin[x],Conjugate[z]等。

乘法即可以用*,又可以用空格表示,如2 3=2*3=6 ,x y,2 Sin[x]等;乘幂可以用“^”表示,如x^0.5,Tan[x]^y。

自定义的变量可以取几乎任意的名称,长度不限,但不可以数字开头。

当你赋予变量任何一个值,除非你明显地改变该值或使用Clear[变量名]或“变量名=.”取消该值为止,它将始终保持原值不变。

一定要注意四种括号的用法:()圆括号表示项的结合顺序,如(x+(y^x+1/(2x)));[]方括号表示函数,如Log[x],BesselJ[x,1];{}大括号表示一个“表”(一组数字、任意表达式、函数等的集合),如{2x,Sin[12 Pi],{1+A,y*x}};[[]]双方括号表示“表”或“表达式”的下标,如a[[2,3]]、{1,2,3}[[1]]=1。

Mathematica的语句书写十分方便,一个语句可以分为多行写,同一行可以写多个语句(但要以分号间隔)。

当语句以分号结束时,语句计算后不做输出(输出语句除外),否则将输出计算的结果。

命令行“Shift+Enter”才是执行这个命令。

§1. 初等代数1.1 有理式的运算 1. 多项式的展开表1.1 多项式展开的常用命令In[1]:= Out[1]= 9+6x+x 2+6y+2xy+y 2 In[2]:= Factor[f] Out[2]= (3+x+y)2 In[3]:= Exponent[f,x] Out[3]= 2 In[4]:=Coefficient[f,x]Out[4]= 6+2y 2. 有理式的运算 In[5]:=Factor[(x^3+2x+1)/(x^3+x^2+x+1)]Out[5]= )x x)(1(1x 2x 123++++In[6]:=Apart[%]Out[6]= 2x 11x 111+++-表1.2有理式运算的常用命令3. 多项式的代数运算表1.3多项式代数运算的常用命令In[7]:= PolynomialQuotient[1+x^2,x+1,x] Out[7]= -1+x In[8]:=PolynomialGCD[x^2+2x+1,x^3+1,x^5+1]Out[8]= 1+x 1.2方程求解表1.4 方程(组)求解的常用命令In[1]:= Solve[a*x+b==0,x]Out[1]= }}ab {{x -→ In[2]:=Reduce[a*x+b==0,x]Out[2]= ab &x &0a ||0&a &0b -=≠==== In[3]:=FindRoot[Sin[x]==0,{x,3}]Out[3]= {x →3.14159}In[4]:= FindRoot[Sin[x]==0,{x,{6,6.5}}] Out[4]= {x →6.28319} In[5]:=FindRoot[{2^x+y^2==4,x^2+Sin[y]==1}, {x,0},{y,0}]Out[5]= {x →1.38686,y →-1.17682}§2. 微积分微积分的常用命令如表1.5所示,下面是一些例子. In[1]:=Limit[Sin[x]/x,x->0]Out[1]= 1 In[2]:=D[Sin[n*x],x]Out[2]= n Cos[n x] In[3]:=D[Sin[n*x],{x,3}]Out[3]= -n 3Cos[n x]In[4]:= Dt[Sin[n*x],x]Out[4]= Cos[n x] (n + x Dt[n, x]) In[5]:= Dt[Sin[n*x],x,Constants->n] Out[5]= n Cos[n x] In[6]:= Integrate[Log[x],x]Out[6]= -x + x Log[x] In[7]:=Integrate[Tan[x]*Tan[y],{x,0,1},{y,0,1}]Out[7]= Log[Cos[1]]2In[8]:= NIntegrate[Exp[-x^2/2],{x,0,Infinity}] Out[8]= 1.25331In[9]:= DSolve[y'[x]-y[x]==1,y[x],x] Out[9]= {{y[x] -> -1 + E x C[1]}} In[10]:= Series[ArcTan[x],{x,0,5}]Out[10]= 6530[x]5x 3x x ++-表1.5微积分的常用命令§3. 线性代数3.1 向量与矩阵的定义表1.6向量与矩阵的定义的常用命令In[1]:=a[1,1]=2;a[1,2]=3;a[2,1]=4;a[2,2]=5;AOut[2]={{2, 3}, {4, 5}}In[3]:=B=Table[1.0,{2},{2}]Out[3]= {{1., 1.}, {1., 1.}}3.2向量与矩阵的运算向量与矩阵都可以看作为集合,因此有关集合的运算都能适用于向量与矩阵.另外,向量与矩阵还有下面的一些运算:表1.7向量与矩阵的定义的常用命令In[4]:= R=A-2*BOut[4]= {{0., 1.}, {2., 3.}}In[5]:= Inverse[R]Out[5]= {{-1.5,0.5},{1,0}}In[6]:=Eigenvectors[R]Out[6]= {{-0.270323, -0.96277},{-0.871928,0.489634}}In[7]:=Exp[R]Out[7]={{1., 2.71828}, {7.38906, 20.0855}}§4. 计算方法4.1插值Mathematica软件中的插值有两种形式InterpolatingPolynomial[data,var] 多项式插值Interpolation[data]一般插值其中data为被插值的数据,形式为{{x1,y1},{x2,y2},…,{xn,yn}}var为插值变量,一般可取为x.In[1]:=d=Table[{x,Log[x]},{x,1.0,3.0}];InterpolatingPolynomial[d,x]Out[2]=(0.693147 - 0.143841 (-2. + x)) (-1. + x)In[3]:=dat=Table[{x,Sin[x]},{x,0,2.0,0.1}];f=Interpolation[dat]Out[4]=InterpolatingFunction[{{0., 2.}}, <>]在上面的第二个例子中,输出结果表示一个[0,2]上的插值函数,此插值函数无法给出表达式.我们可以比较函数Sin[x]与所得到的插值函数的误差.In[5]:=Plot[Sin[x]-f[x],{x,0,2}]图1.1 拟合误差图由图1.1可以看出,两个函数的误差相当小(数量级为10-6).4.2 拟合下面的命令用来对数据data进行最小二乘拟合.Fit[data,funs,vars]其中data为要拟合的数据,funs为拟合函数的基,vars为拟合的变量.In[6]:=Clear[d,dat];d=Table[{x,Log[x]},{x,1,10,1}];Fit[d,{1,x,x^2},x]Out[8]=-0.355396+0.529707x-0.0272091x24.3 最优化下面的命令用来求函数f[x]在x0附近的极小值.FindMinimum[f[x],{x,x0}]In[9]:=t=FindMinimum[Sin[x], {x, 5}]Out[9]= {-1., {x -> 4.71239}}若要在程序中引用上面的结果中的函数的极小值或x的值,可以用下面的命令:In[10]:=t[[1]]Out[10]=-1.In[11]:=x/.t[[2,1]] (*在此处等价于x/.x->4.71239*)Out[11]=4.71239§5. Mathematica软件中的作图5.1 二维函数作图给出一个一元函数及其作图区间,用Plot语句可以立刻作出函数在相应区间上的图形.In[1]:=Plot[Sin[x],{x,0,2Pi}] (*图1.2*)In[2]:= Plot[Sin[x],{x,0,2Pi},AspectRatio->Automatic, PlotStyle->{GrayLevel[0.1],Dashing[{0.02,0.01}],Thickness[0.01]}, AxesLabel->{”x”,”y”}] (*图1.3*)Plot 命令的一般形式为:Plot[f[x],{x,xmin,xmax},选项]在绘制图形时,允许使用选项对绘制图形的细节提出各种要求和设置.如果不设置任何选项,则Mathematica 软件作图时选项取默认值.图1.2x sin 的函数图形(1) 图1.3 x sin 的函数图形(2)Plot 语句的各种常用的选项如下:表1.8 Plot 语句的各种常用的选项PlotStyle 的常用选项见表1.9.表1.9 PlotStyle 的可选项5.2二维参数作图使用Plot 命令只能绘出一般的函数曲线,要绘制参数曲线,可以用ParametricPlot 命令,其一般形式为:ParametricPlot[{x[t],y[t]},{t,tmin,tmax},选项]In[3]:= ParametricPlot[{Cos[t],Sin[t]},{t,0,2Pi}]图1.4 参数方程绘制的圆(1)图1.5 参数方程绘制的圆(2)In[3]中输入的是一个圆的参数方程,但由于系统默认的高宽比为0.618,故画出的是一个椭圆(图1.4),改变图形的高宽比可画出一个圆.In[4]:= ParametricPlot[{Cos[t],Sin[t]},{t,0,2Pi},AspectRatio->Automatic] (*图1.5*)5.3 三维函数作图作出二元函数),(y x f 的立体图形的命令是Plot3D ,其格式为:Plot3D[f[x,y],{x,xmin,xmax},{y,ymin,ymax},选项] In[5]:= Plot3D[Sin[Sqrt[x^2+y^2]],{x,-5,5},{y,-5,5}] (*图1.6*)与Plot 语句类似,Plot3D 语句中也可以加入许多选项.图1.6 三维函数作图1 图1.7 三维函数作图2In[6]:=Plot3D[Sin[Sqrt[x^2+y^2]],{x,-5,5},{y,-5,5},Boxed->False,Axes->False,PlotPoints->50,Mesh->False] (*图1.7*)表1.10 Plot3D语句的各种常用的选项5.4 三维参数作图在Mathematica软件中三维参数作图有两种形式,一种是空间曲线参数作图,其命令为:ParametricPlot3D[{x[t],y[t],z[t]},{t,tmin,tmax},选项]下面的命令给出图1.8中的螺旋线.In[7]:=ParametricPlot3D[{6Cos[t],6Sin[t],3*t},{t,-8,8},AspectRatio->1]另一种是空间曲面参数作图,其命令为:ParametricPlot3D[{x[u,v],y[u,v],z[u,v]},{u,umin,umax},{v,vmin,vmax},选项]图1.9是如下命令画出的球面.In[8]:=ParametricPlot3D[{Cos[u]*Cos[v],Sin[u]*Cos[v],Sin[v]},{u,0,2Pi},{v,-Pi/2,Pi/2},Boxed->False]图1.8 空间曲线参数作图图1.9 空间曲面参数作图5.5 数据作图Mathematica软件也可以根据一组数据作出图形,其命令为:ListPlot[数据,选项]In[9]:=p=Table[{n,Prime[n]},{n,1,20}];ListPlot[p] (*图1.10*)In[10]:=ListPlot[p,PlotStyle->AbsolutePointSize[4]](*图1.11,将点的大小定义为4个单位*)In[11]:=ListPlot[p,PlotJoined->True](*图1.12,将相邻的点用线段相连*)图1.10 散点图1 图1.11 散点图2图1.12 连线散点图5.6 图形的组合上述的各种图形命令中,ParametricPlot, ParametricPlot3D,Plot 三个语句不仅可以画出一个函数的图形,而且可以同时画出几个函数的图形.其一般形式为:图形命令[{函数1,函数2,…},变量范围,选项] In[12]:= Plot[{Sin[x],x,x-x^3/6,x-x^3/6+x^5/120},{x,-2Pi,2Pi}] (*图1.13*) In[13]:=ParametricPlot3D[{{Cos[u]*Cos[v],Sin[u]*Cos[v],Sin[v]},{2Cos[u]*Cos[v],2Sin[u]*Cos[v],2Sin[v]}},{u,0,Pi},{v,-Pi/2,Pi/2},Boxed->False,Axes->False](*图1.14*)图1.13 组合图形(1) 图1.14 组合图形(2)5.7图形元素作图如果要绘制一些最基本的图形,如点,线段,圆等,可以先用Graphics语句(三维图用Graphics3D)作出基本的图形元素,再用Show语句显示图形.常用的二维图形元素与三维图形元素分别见表1.11及表1.12.表1.11常用的二维图形元素执行下列语句所得图形为图1.15:v1= Graphics[Circle[{0,0},{3.5,4}]];v2= Graphics[Line[{{-2,2.5},{-1,2.5}}]];v3= Graphics[Line[{{2,2.5},{1,2.5}}]];v4= Graphics[Circle[{-1.5,1.5},0.5]];v5= Graphics[Circle[{1.5,1.5},0.5]];v6= Graphics[Disk[{-1.65,1.5},0.15]];v7= Graphics[Disk[{1.35,1.5},0.15]];v8= Graphics[Polygon[{{-0.5,-1},{0.5,-1},{0,0}}]];v9= Graphics[Circle[{0,-2},{0.5,0.3}]];v10=Graphics[Text["我是谁?",{0,-5}]];Show[v1,v2,v3,v4,v5,v6,v7,v8,v9,v10, AspectRatio->Automatic]图1.15 图形元素作图表1.12常用的三维图形元素5.8 图形的重绘Mathematica软件在屏幕上显示图形后,可以用Show命令再现图形、组合图形和修改图形的各种选项.Show命令的一般形式见表1.13:表1.13 Show命令的一般形式§6. 编程6.1 分支结构在复杂的计算中常需要根据表达式的情况(它是否满足一些条件)确定是否做某些处理,或在满足不同的条件时做不同的处理.Mathematica软件提供了一些描述条件分支的结构,它们常用在程序里,用于控制程序的执行过程.1. If语句Mathematica软件中If语句有三种形式.形式一:If[test,expr]当test的值为True时,对expr求值,将它的值作为整个语句的值;当test 的值为False时,则给出空值Null.形式二:If[test,expr1,expr2]当test的值为True时,求expr1的值作为整个语句的值;当test的值为False时,求expr2的值作为整个语句的值.形式三:If[test,expr1,expr2,expr3]当test的值为True时,求expr1的值作为整个语句的值;当test的值为False时,求expr2的值作为整个语句的值;当test求不出值为True与False 时,求expr3的值作为整个语句的值.In[1]:= abs[x_]=If[x>=0,x,-x]In[1]中定义出的函数abs[x]即为绝对值函数Abs[x].In[2]:=f[x_]:=If[x>5,3,2,1]In[3]:=f[6]Out[3]=3In[4]:=f[5]Out[4]=2In[5]:=f[a]Out[5]= 12. Which 语句Which[test1,expr1,test2,expr2,]该语句依次求出每一个条件的值,当求出第一个值为True 的条件时,求出对应表达式的值作为整个语句的值. 例:In[6]:=g[x_]:=Which[x>=8,8,x>=6,6,x>=4,4,True,0]用“True ”作为Which 语句的最后一个条件,可以处理“其它”情况.在此处即为,当x<4时,g[x]取值为0.6.2 循环结构高级程序设计语言都提供了描述重复执行的循环语句.在Mathematica 软件中也提供了一些类似的循环控制结构.1. While[test,expr]在计算时,条件test 先被求值.若求出值为True ,则对表达式求值,然后再重复上述过程;一旦test 的值不是True ,整个循环结构计算结束.例如下面的程序可用来计算∑=1001k k 与!100k=1;s=0;p=1;While[k<=100,s=s+k;p=p*k;k++]; Print[“s=”,s,“ p=”,p] 2. For[start,test,incr,body]在计算时,其初始表达式start 首先求值,然后进入循环,依次计算条件test ,步进表达式incr 与循环体body .一旦test 的值不是True ,整个循环结构计算结束.我们可将上面的程序用For 循环的形式改写如下: s=0;p=1;For[k=1,k<=100,k++, s=s+k;p=p*k]Print[“s=”,s,“ p=”,p] 3. Do[expr,{i,imin,imax,di}]在循环变量i 依步长di 从imin 取到imax 时,重复计算循环表达式expr . 上述程序可用Do 循环的形式写为: s=0;p=1;Do[s=s+k;p=p*k,{k,1,100}];Print[“s=”,s,“ p=”,p]6.3 过程在高级程序设计语言中提供了子程序功能,用来将某些语句串在一起以实现某种目的.Mathematica软件中的过程也有类似的功能.在Mathematica 软件中主要有两种过程.1. {expr1;expr2;…;exprn}这一过程的输出值为最后一个表达式exprn的值.下面的程序用来检验一个正整数是否可以写成两个素数的和.如果正整数x不能写成两个素数的和,则p[x]是一个空集;若正整数x能写成两个素数的和,则p[x]给出两个素数构成的集合,这两个素数的和为x.p[x_]:={m=2;n=Floor[x/2];s={};While[s=={}&&m<=n,If[PrimeQ[m]&&PrimeQ[x-m],s={m,x-m}];m++];s}2. Module[{x=x0,y,…},expr1;expr2;…;exprn]在Module过程中,大括号中的语句用来说明局部变量,并可以赋初值.其输出结果也是表达式exprn的值.有时,我们为了输出多个结果,可将Return[{exprk1,exprk2,…}]置于Module过程的最后一个语句.下面的程序的作用与上一个程序类似.只是输出有所不同,除了输出上述程序的结果,p[x]还给出用该程序进行判断所需的步数.p[x_]:= Module[{m=2,n=Floor[x/2],s={}},While[s=={}&&m<=n,If[PrimeQ[m]&&PrimeQ[x-m],s={m,x-m}];m++];Return[{s, m-2}]]读者可以运行上述两个程序来比较它们的不同.。

相关主题