数学软件选讲•Mathematica•Matlab•SAS第一篇Mathematica基础知识作为一门新的编程语言图形处理(二维、三维及其参数方程的形式)极限、微分与积分求解方程(组)、微分方程(组)在线形代数方面的应用数值处理文件及其它高级操作第一章基础知识一、Mathematica3.0界面及运行介绍二、基本数值运算1.整数运算:加、减、乘、除、幂、阶乘2.数学常量:E、Pi、I、Degree、Infinity3.函数及数学函数4.浮点数及复数运算:N函数三、变量及表达式1.变量的定义及清除◆变量的特点(1)变量的默认作用域是全局的(2)全局变量不需事先定义或声明(3)尽量避免使用下划线定义变量2.多项式及其操作(1)定义、替换符操作(2)常用操作:Expand、Factor、Together、PartSimplify、Collect、Coefficient、Exponent四、序列及其操作1.序列的定义2.序列的生成:Table函数3.序列的操作(1)添加删除:Append、Prepend、Insert、Delete、DeleteCases(2)取元素:Part、Take、Drop、Select(3)检测:Length、Count、Position五、表达式“头”的概念:Head及Apply函数六、自定义函数1.一元函数例:Clear[f,x]f[x_]:=x^2+4x-22.多元函数例:f[x_,y_]:=x^2+y^2-33.迭代函数例:f[n_]:=f[n-1]+f[n-2];f[0]=1;f[1]=1;1·条件语句◆逻辑判断符====!=====!=第二章编程语言◆逻辑运算符!||&&◆/;运算符x=a/;test仅当test为True时才执行赋值语句◆If语句语法:If[test,then,else]若test为True,则执行then,若test为False,则执行else.◆Which语句语法:Which[test1,value1,test2,…]依次计算testi,给出对应第一个test为True的value◆Switch[expr,form1,value1,form2,…]比较expr与formi,给出与第一个form值匹配的value例1.定义如下的函数:220002xxxxx①使用/;定义:f[x_]:=0/;x=0f[x_]:=x/;x0&&x=2f[x_]:=x^2/;x2②使用If定义:f[x_]:=If[x=0,0,If[x2,x^2,x]]③使用Which定义:f[x_]:=Which[x=0,0,x2,x^2,True,x]2·输出语句Print3·循环语句◆Do语句语法:Do[expr,{i,imin,imax,di}]计算expr,i=imin,…,imax,步长为di◆While语句语法:While[test,body]当test为True时,计算body◆For语句语法:For[start,test,incr,body]以start为起始值,重复计算body和incr,直到test为False时为止◆循环控制语句Break和ContinueBreak[]退出最里面的循环Continue[]转入当前循环的下一步1.基本二维图形①Plot[f,{x,xmin,xmax}],用于绘制形如y=f(x)的函数的图形。当将多个图形绘制在同一坐标系上时,形如:Plot[{f1,…,fn},{x,xmin,xmax}]注意:有时需要使用Evaluate函数。第三章图形处理例:在同一坐标系下绘出sinx,sin2x,sin3x,sin4x,sin5x的图形。常用的选项:PlotStyle-Hue[a]设置线条颜色PlotRange-{a,b}控制显示范围DisplayFunction控制图形显示AspectRatio图形的宽、高比AxesOrigin设置原点坐标形为间隔时,绘出这组图,以变化到从当,157515)2008.9(2sec)(tan02022vgvgxxy程序:Clear[a,y,x]v=200;g=9.8;y[a_,x_]:=Tan[a]*x-g*x^2*Sec[a]^2/(2v^2)Plot[Evaluate[Table[y[i,x],{i,Pi/12,5Pi/12,Pi/12}]],{x,0,4000}]例:有如下的抛物线簇:②ListPlot[List],用于绘制散点图。注意,List的形式应为:}},{,},,{},,{{1100nnyxyxyx例:在同一坐标系下绘制下列两组散点图p1={{0,0},{0,45},{5.3,89.6},{22.6,131.2}};p2={{0,0},{2.68,44.8},{12.57,88.28},{27,130.3}};程序:g1=ListPlot[p1,PlotJoined-True,DisplayFunction-Identity];g2=ListPlot[p2,PlotJoined-True,DisplayFunction-Identity];Show[g1,g2,DisplayFunction-$DisplayFunction];③ParametricPlot[{fx,fy},{t,tmin,tmax}]用于绘制形如{x=fx(t),y=fy(t)}的参数方程图形。例:绘制以点(3,4)为圆心,半径为2的圆。ParametricPlot[{3+2Cos[t],4+2Sin[t]},{t,0,2Pi}]可增加如下选项:AspectRatio-1,AxesOrigin-{0,0}2.其它二维图形①ContourPlot[f,{x,xmin,xmax},{y,ymin,ymax}],用于绘制形如z=f(x,y)的函数的等高线图。②DensityPlot[f,{x,xmin,xmax},{y,ymin,ymax}],用于绘制形如z=f(x,y)的函数的密度图。例:绘制函数f=sinx·siny的等高线图和密度图3.三维图形①Plot3D[f,{x,xmin,xmax},{y,ymin,ymax}]绘制形如Z=f(x,y)的三维图形。例:绘制以下的函数图形:Z=10sin(x+siny)命令:Plot3D[10Sin[x+Sin[y]],{x,-10,10},{y,-10,10}]可增加选项:PlotPoints-40②ParametricPlot3D[{fx,fy,fz},{t,tmin,tmax},{u,umin,umax}]用于绘制形如{x=fx(t),y=fy(t),z=fz(t)}的参数图形。)200,8.9(60)0,0(22022020vgyyxxvggvy所得的图形。轴旋转绕例:画出抛物线202022,2],0[],32,0[sincosvgbgvabarbrayrzrx其中,其中参数方程为:解:旋转所得的抛物面4.利用函数包绘制特殊图形载入图形函数包的方法:类名`包名`例:Graphics`Graphics`PolarPlot[r,{t,tmin,tmax}]绘制极坐标图形LogPlot[f,{x,xmin,xmax}]画对数线性图BarChart[list]画出list的条形图PieChart[list]画出list的百分图例:Graphics`ImplicitPlot`ImplicitPlot[eqn,{x,xmin,xmax}]绘制形如f(x,y)=0的隐函数图形例:绘制以点(3,4)为圆心,半径为2的圆。ImplicitPlot[(x-3)^2+(y-4)^2==2,{x,0,5}]第二章幂级数、极限、微分与积分1.幂级数展开Series[expr,{x,xo,n}]求在点x=xo处至多n次的幂级数展开例:求ex在点x=0处x4级幂级数展开注:使用Normal函数可以去掉级数中的极小项,从而转变成一般表达式。2.极限Limit[expr,x-xo]求x逼近xo时expr的极限某些函数在一点处的极限随逼近方向不同而不同,可用Direction选择方向:Limit[expr,x-xo,Direction-1]左极限Limit[expr,x-xo,Direction--1]右极限例:求1/x的左右极限xxxsinlim0xxxx32lim例:3.微分D[f,{x,n}]求f的n阶偏微分Dt[f]求f的全微分例:D[x^n,{x,3}]Dt[x^2+y^2]例:y=xarctgx,求其100阶导数及其在0点的值4.积分Integrate[f,x]求f的不定积分Integrate[f,{x,xmin,xmax}]求f的定积分Integrate[f,{x,xmin,xmax},{y,ymin,ymax}]求f的多重积分例:ax21)sin(sinx2121ax20)sin(sinx第三章线性代数1.构造矩阵和向量Table[f,{i,m},{j,n}]构造m×n矩阵,f是i,j的函数,给出[i,j]项值Array[f,{m,n}]构造m×n矩阵,[i,j]项的值是f[i,j]DiagonalMatrix[List]生成对角线元素为List的对角矩阵IdentityMatrix[n]构造n阶单位阵2.截取矩阵块M[[i]]取矩阵M的第i行Map[#[[i]]&,M]取矩阵M的第i列M[[i,j]]取矩阵M的i,j位置的元素M[[{i1,…,ir},{j1,…,js}]]矩阵M的r×s子矩阵,元素行标为ik,列标为jkM[[Range{i0,i1},Range{j0,j1}]]矩阵M的从i0到i1行,j0到j1列元素组成的子矩阵3.矩阵及向量的运算M.N对M、N做矩阵乘法(向量内积)M*N将M、N的对应位置元素相乘Outer[Times,M,N]求M、N的外积Dimensions[M]给出矩阵M的维数Transpose[M]转置Inverse[M]求逆Det[M]方阵M的行列式值MatrixPower[M,n]n阶矩阵幂MatrixExp[M]矩阵指数Eigenvalues[M]M的特征值Eigenvectors[M]M的特征向量第四章求解方程(组)、微分方程(组)1.求解多项式方程(组)Solve[eqns,vars]求解多项式方程Solve[{eqn1,…eqnn},{var1,…varn}]求解多项式方程组注:Solve只能给出多项式方程(组)的解,因此它们只适用于幂次不高、规模不大的多项式方程(组)。21yxbyaxNSolve[eqns,vars]求多项式方程的数值解NSolve[{eqn1,…eqnn},{var1,…varn}]求多项式方程组的数值解对于数值解,可以直接用NSolve求解例:求解以下方程(组)x2+ax=2x3+34x+1=0x5-1331x+11=0133xyyxxyyx2.求解微分方程(组)DSolve[eqns,y[x],x]求解y[x]的微分方程DSolve[eqns,y,x]以纯函数的形式给出y的解DSolve[{eqn1,eqn2,…},{y1,y2,…},x]求解微分方程组例:求解以下微分方程(组)y’=yy’’-ky=1xyyx''的值时函数并求yxyyy8.21)0(2'第五章数值处理1.数值积分NIntegrate[expr,{x,xmin,xmax}]注意,NIntegrate直接计算数值积分,不先给出符号结果,而Integrate[…]//N会尽可能的先求精确解的形式。2.数值根求解FindRoot[lhs=rhs,{x,x0}]以x0为初始点求方程的数值解FindRoot[lhs=rhs,{x,{x0,x1}}]给出两个初值求数值根(方程的符号导数无法求出时,必须使用此形式)FindRoot[{eqn1