为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

mathematica教程11

2017-10-23 50页 doc 346KB 137阅读

用户头像

is_614050

暂无简介

举报
mathematica教程11mathematica教程11 Mathematica 5.0使用教程目录 第1章 Mathematica概述 ..........................................................................3 1.1 运行和启动:介绍如何启动Mathematica软件,如何输入并运行命令 …………………………..3 1.2 表达式的输入:介绍如何使用表达式 ………………………………………………………………………...5 1.3 帮助的使用:如何在mathematica中...
mathematica教程11
mathematica教程11 Mathematica 5.0使用教程目录 第1章 Mathematica概述 ..........................................................................3 1.1 运行和启动:介绍如何启动Mathematica软件,如何输入并运行命令 …………………………..3 1.2 表达式的输入:介绍如何使用表达式 ………………………………………………………………………...5 1.3 帮助的使用:如何在mathematica中寻求帮助 ……………………………………………………………6 第2章 Mathematica的基本量 ................................................................8 2.1 数据类型和常量:mathematica中的数据类型和基本常量 …………………………………………….8 2.2 变量:变量的定义、变量的替换、变量的清除等 ………………………………………………………..10 2.3 :函数的概念,系统函数,自定义函数的 …………………………………………………….12 2.4 表:表的创建,表元素的操作,表的应用 ………………………………………………………………….15 2.5 表达式:表达式的操作 …………………………………………………………………………...................16 2.6 常用符号:经常使用的一些符号的意义 …………………………………………………………………….19 第3章 Mathematica的基本运算 ..........................................................19 3.1 多项式运算:多项的四则运算,多项式的化简等 ………………………………………………………..19 3.2 方程求解:求解一般方程,条件方程,方程数值解以及方程组的求解 …………………………..21 3.3 求积、求和:求积与求和 ...........................................................................................24 第4章 函数作图 .................................................................................................25 4.1 二维函数作图:一般函数的作图,参数方程的绘图 …………………………………………………….25 4.2 二维图形元素:点、线等图形元素的使用 ………………………………………………………………….29 4.3 图形样式:图形的样式,对图形进行设置 ………………………………………………………………….31 4.4 图形的重绘和组合:重新显示所绘图形,将多个图形组合在一起 …………………………………33 4.5 三维图形的绘制:三维图形的绘制,三维参数方程的图形,三维图形的设置 …………………36 第5章 微积分的基本操作 .............................................................................42 5.1 函数的极限:如何求函数的极限 ……………………………………………………………………………….42 1 5.2 导数与微分:如何求函数的导数、微分 ………………………………………………………………………43 5.3 定积分与不定积分:如何求函数的不定积分和定积分,以及数值积分 ……………………………45 5.4 多变量函数的微分:如何求多元函数的偏导数、微分 ………………………………………………….47 5.5 多变量函数的积分:如何计算重积分 …………………………………………………………………………49 第6章 微分方程的求解 .................................................................................51 6.1 微分方程的解:微分方程的求解 ………………………………………………………………………………51 6.2 微分方程的数值解:如何求微分方程的数值解 …………………………………………………………..53 第7章 Mathematica程序设计 ...............................................................54 7.1 模块:模块的概念和定义方法 ………………………………………………………………………………….54 7.2 条件结构:条件结构的使用和定义方法 ……………………………………………………………………..56 7.3 循环结构:循环结构的使用 ……………………………………………………………………………………..59 7.4 流程控制 ……………………………………………………………………………………………………………….61 第8章 Mathematica中的常用函数 …………………………………63 8.1 运算符和一些特殊符号:常用的和不常用一些运算符号 ……………………………………………..63 8.2 系统常数:系统定义的一些常量及其意义 …………………………………………………………………63 8.3 代数运算:表达式相关的一些运算函数 …………………………………………………………………….64 8.4 解方程:和方程求解有关的一些操作 ………………………………………………………………………..65 8.5 微积分相关函数:关于求导、积分、泰勒展开等相关的函数 ……………………………………….65 8.6 多项式函数:多项式的相关函数 ………………………………………………………………………………66 8.7 随机函数:能产生随机数的函数函数 ………………………………………………………………………..67 8.8 数值函数:和数值处理相关的函数,包括一些常用的数值算法 ……………………………………67 8.9 表相关函数:创建表,表元素的操作,表的操作函数 …………………………………………………68 8.10 绘图函数:二维绘图,三维绘图,绘图设置,密度图,图元,着色,图形显示等函数 …..69 8.11 流程控制函数 ……………………………………………………………………………………………………….72 2 第1章 Mathematica概述 1.1 Mathematica的启动和运行 Mathematica是由美国物理学家Stephen Wolfram领导的一个小组开发进行量子力学研究的,软件开发成功促使Stephen Wolfram与1987年创建Wolfram研究公司,并推出了Mathematica1.0。Mathematica系统是用C语言开发的,因此可以方便的移植到各种计算机系统上。 Mathematica是一个功能强大的数学软件包。它将符号演算、数值计算和绘图功能有机结合在一起,能进行多项式的因式分解、展开;一般和微分方程的求根;幂级数的展开;复数、向量、矩阵、极限和微积分的各种运算等。可以按需要计算成任意位数的小数表示出来(只要机器内存足够大)。并且有较强的二维函数作图、三维函数作图及动画功能。适合于从事实际工作的工程技术人员和科学工作者使用,正日益成为高等数学计算的一个不可缺少的工具。目前是三大流行数学软件之一。 假设在Windows环境下已安装好Mathematica5.0,启动Windows后,在“开始”菜单的“程序”中单击 ,就启动了Mathematica5.0,在屏幕上显示如图1的Notebook窗口,系统暂时取名Untitled-1,直到用户保存时重新命名为止。 图1 输入1+1,然后按下Shif+Enter键,这时系统开始计算并输出计算结果,并给输入和输出附上次序标识In[1] 55和Out[1],注意In[1]是计算后才出现的;再输入第二个表达式,要求系统将一个二项式x + y展开,按Shift+Enter输出计算结果后,系统分别将其标识为In[2]和Out[2],如图2。 注: In[数字]:=为输入提示符, Out[数字]=为输出提示符,为计算机执行语句后自动生成,不用键入。 3 图2 在Mathematica的Notebook界面下,可以用这种交互方式完成各种运算,如函数作图,求极限、解方程等,也可以用它编写像C那样的结构化程序。在Mathematica系统中定义了许多功能强大的函数,我们称之为内建函数(built-in function), 直接调用这些函数可以取到事半功倍的效果。这些函数分为两类,一类是数学意义上的函数,如:绝对值函数Abs[x],正弦函数Sin[x],余弦函数Cos[x],以e为底的对数函数Log[x],以a为底的对数函数Log[a,x]等;第二类是命令意义上的函数,如作函数图形的函数Plot[f[x],{x,xmin,xmax}],解方程函数Solve[eqn,x],求导函数D[f[x],x]等。 必须注意的是: Mathematica 严格区分大小写。一般地,内建函数的首写字母必须大写,有时一个函数名是由几个单词构成,则每个单词的首写字母也必须大写,如:求局部极小值函数FindMinimum[f[x],{x,x0}等。第二点要注意的是,在Mathematica中,函数名和自变量之间的分隔符是用方括号“[ ]”,而不是一般数学书上用的圆括号“( )”,初学者很容易犯这类错误。 批注[微软用户1]:表示运算顺序 如果输入了不合语法规则的表达式,系统会显示出错信息,并且不给出计算结果,例如:要画正弦函数在区间[-10,10]上的图形,输入plot[Sin[x],{x,-10,10}],则系统提示“可能有拼写错误, 新符号„plot? 很像已经存在的符号„Plot?”, 实际上,系统作图命令“Plot”第一个字母必须大写,一般地,系统内建函数首写字母都要大写。再输入Plot[Sin[x],{x,-10,10} ,系统又提示缺少右方括号,并且将不配对的括号用紫色显示,如图3。 图3 4 一个表达式只有准确无误,方能得出正确结果。学会看系统出错信息能帮助我们较快找出错误,提高工作效率。 完成各种计算后,点击“文件”“退出” 退出,如果文件未存盘,系统提示用户存盘,文件名以“.nb”作为后缀,称为Notebook文件。以后想使用本次保存的结果时可以通过“文件”“打开”菜单读入,也可以直接双击它,系统自动调用Mathematica将它打开。 1.2 表达式的输入 + - * / ^ 加、减、乘、除、乘方(乘也可用空格或在不相混淆的前提下省去不写) 上述运算的优先顺序与通常的数学运算完全一致。 Mathematica 提供了多种输入数学表达式的方法。除了用键盘输入外, 还可以使用工具样或者快捷方式健入运算符、矩阵或数学表达式。 1. 数学表达式二维格式的输入 xy,Mathematic担提供了两种格式的数学表达式。形如x/(2+3x)+y*(x-w)的称为一维格式,形如的23,,xxw称为二维格式。 你可以使用快捷方式输入二维格式,也可用基本输入工具栏输入二维格式。下面列出了用快捷方式输入二维格式的方法: 数学运算 数学表达式 按键 x 分式 x Ctrl+/ 2 2 nn 次方 x x Ctrl+^ n x开 2次方 Ctrl +2 x 下标 x x Ctrl+_ 2 2 4(1)x,例如输入数学表达式,可以按如下顺序输入按键: 2xy, (,x,+,1,),Ctrl+ ^,+,4,?,Ctrl+/,Ctrl+2,2,x,+,y 另外也可从“文件”菜单中激活“控制面板”“Basic Input”工具栏,也可输入,并且使用工具栏可输入更复杂的数学表达式,如下图4。 5 图4 图5 2. 特殊字符的输入 MathemMatica 还提供了用以输入各种特殊符号的工具栏。基本输入工具栏包含了常用的特殊字符(上图),只要单击这些字符按钮即可输入。若要输入其它的特殊字符或运算符号,必须使用从“文件”菜单中激活“控制面板”“Complete Characters”工具栏,如上图5,单击符号后即可输入。 1.3 Mathematica的联机帮助系统 用Mathematica的过程中,常常需要了解一个命令的详细用法,或者想知系统中是否有完成某一计算的命令,联机帮助系统永远是最详细、最方便的资料库。 1. 获取函数和命令的帮助 在Notebook界面下,用 ,或 ?? 可向系统查询运算符、函数和命令的定义和用法,获取简单而直接的帮助信息。 例如,向系统查询作图函数Plot命令的用法 ,Plot 系统将给出调用 Plot 的格式以及 Plot 命令的功能(如果用两个问号 “??”, 则信息会更详细一些)。? Plot* 给出所有以Plot这四个字母开头的命令。 2. Help菜单 任何时候都可以通过按shift+F1键或点击“帮助”菜单项“帮助浏览”,调出帮助菜单,如图6所示。 6 图6 其中的各按钮用途如下: Built-in Function 内建函数,按数值计算、代数计算、图形和编程分类存放 Add-ons & Links 程序包附件和链接 The Mathematica Book 一本完整的Mathematica使用手册 Getting Started/Demos 初学者入门指南/多种演示 Tour 漫游Mathematic Front End 菜单命令的快捷键,二维输入格式等 Master Index 按字母命令给出命令、函数和选项的索引表 如果要查找Mathematica中具有某个功能的函数,可以通过帮助菜单中的Mahematica使用手册,通过其目录索引可以快速定位到自己要找的帮助信息。例如:需要查找Mathematica中有关解方程的命令,单击“The Mathematica Book”按钮,再单击“Contents”,在目录中找到有关解方程的节次,点击相应的超链接,有关内容的详细说明就马上调出来了。如果知道具体的函数名,但不知其详细使用说明,可以在命令按钮 Goto 右边的文本框中键入函数名,按回车键后就显示有关函数的定义、例和相关联的章节。例如,要查找函数Plot的用法,只要在文本框中键入Plot,按回车键后显示Plot函数的详细用法和例题的窗口,如图7。 7 图7 如果已经确知Mathematica 中有具有某个功能的函数,但不知具体函数名,可以点击Built-in Functions按钮,再按功能分类从粗到细一步一步找到具体的函数,例如,要找画一元函数图形的函数,点击Built-in Functions ?Graphics and Sound?2D Plots?Plot,找到Plot的帮助信息(如图7)。 第2章 Mathematica的基本量 2.1 数据类型和常数 1. 数值类型 在Mathematic中,基本的数值类型有四种:整数、有理数、实数和复数。 如果你的计算机的内存足够大,Mathemateic可以表示任意长度的精确实数,而不受所用的计算机字长的影响。整数与整数的计算结果仍是精确的整数或是有理数。例如2的100次方是一个31位的整数: ln[1]:=2^100 Out[1]=1267650600228228229401496703205376 在Mathematica中允许使用分数,也就是用有理数表示化简过的分数。当两个整数相除而又不能整除时,系统就用有理数来表示,即有理数是由两个整数的比来组成如: In[2]:=12345/5555 2469Out[2]= 1111 实数是用浮点数表示的,Mathematica实数的有效位可取任意位数,是一种具有任意精确度的近似实数,当然在计算的时候也可以控制实数的精度。实数有两种表示方法:一种是小数,另外一种是用指数方法表示的。如: 8 In[3]:=0.239998 Out[3]=0.23998 In[4]:=0.12*10^11 Out[4]=0.12*10^11 实数也可以与整数,有理数进行混合运算,结果还是一个实数。 In[5]:=2+1/4+0.5 Out[5]=2.75 小数表示 复数是由实部和虚部组成,实部和虚部可以用整数、实数、有理数表示。在Mathematica中,用I 表示虚数单 位如: In[6]:=3+0.7I Out[6]=3+0.7i 2. 不同类型数的转换 在Mathematica的不同应用中,通常对数字的类型要求是不同的。例如在公式推导中的数字常用整数或有理数 表示,而在数值计算中的数字常用实数表示。在一般情况下在输出行Out[n]中,系统根据输入行In[n]的数字类型 对计算结果做出相应的处理。如果有一些特殊的要求,就要进行数据类型转换。 在Mathematica中的提供以下几个函数达到转换的目的: N[x] 将x转换成实数(有效位一般为6位) x//N 与N[x]等价 N[x,n] 将x转换成近似实数,精度为n Rationalize[x] 给出x的有理数近似值 Rationalize[x,dx] 给出x的有理数近似值,误差小于dx 举例: In[1]:=N[5/3,20] Out[1]=1.6666666666666666667 In[2]:=N[%,10] ,表示上一输出结果,即,=1.6666666666666666667。 Out[2]=1.666666667 第二个输出是把上面计算的结果变为10位精度的数字。 In[3]:=Rationalize[%] 5Out[3]= 3 3. 数学常数 Mathematica 中定义了一些常见的数学常数,这些数学常数都是精确数。 Pi 表示π,3.14159…… E 自然对数的底e,2.71828…… 9 Degree 1度,π/180弧度 I 虚数单位i Infinity 无穷大? ,infinity 负无穷大 ,? GondenRatio 黄金分割数0.61803 数学常数可用在公式推导和数值计算中,在数值计算中表示精确值。如: In[1]:=Pi^2 2Out[1]=π In[2]:=Pi^2//N Out[2]=9.8696 4. 数的输出形式 在数的输出中可以使用转换函数进行不同数据类型和精度的转换。另外对一些特殊要求的格式还可以使用如下 的格式函数: NumberForm[expr,n] 以n位精度的实数形式输出实数expr ScientificFormat[expr] 以科学记数法输出实数expr EngineergForm[expr] 以工程记数法输出实数expr 例如: In[1]:=N[Pi^30,30] 14 Out[1]=8.21289330402749581586503585434×10 In[2]:=NumberForm[%,10] 14Out[2]//NumberForm=8.212893304×10 下面的函数输出按工程记数法表示的指数可被3整除的实数 In[3]=EngineeringForm[%%] %%表示上两步的输出结果,即Out[1] 12Out[3]//EngineeringForm=821.289330402749581586503585434×10 2.2 变量 1. 变量的命名 Mathematica中内部函数和命令都是以大写字母开始的标示符,为了不会与它们混淆,我们自定义的变量应该 是以小写字母开始,后跟数字和字母的组合,长度不限。例如:a12,ast,aST都是合法的,而12a,z*a,a b(中间 有空格)是非法的。另外在Mathematica中的变量是区分大小写的。在Mathematica中,变量不仅可以存放一个数 值,还可以存放表达式或复杂的算式。 10 2. 给变量赋值 在Mathmatica中用等号,(或: ,)为变量赋值。同一个变量可以表示一个数值,一个数组,一个表达式,甚至 一个图形。变量=表达式 或 变量1=变量2=表达式 批注[微软用户1]: ”=”称为立即赋值,”:=”称为延迟赋值 如: In[1]:=x=3 Out[1]=3 In[2]:=x^2+2*x Out[2]=15 In[3]:=x=%+1 Out[3]=16 对不同的变量可同时赋不同的值,例如: In[4]:={u,v,w}={1,2,3} Out[4]={1,2,3} In[5]:=2u+3v+w Out[5]=11 对于已定义的变量,当你不再使用它是,为防止变量值的混淆,可以随时用,.清除它的值,如果变量本身也要 清除用函数Clear[var],例如: In[6]:=u=. In[7]:=2u+v (上面已定义了u,v的值) Out[7]=2+2u 3. 变量的替换 在给定一个表达式时其中的变量可能取不同的值,这是可用变量替换来计算表达式的不同值。方法为用 expr/.x->xval,例如: In[1]:=f=x/2+1 xOut[1]= 1+ 2 In[2]:=f/.x->1 3Out[2]= 2 In[3]:=f/.x->2 Out[3]=3 如果表达式中有多个变量,也可同时替换,方法为:expr/.{x->xval,y->yval,...} 11 In[4]:=(x+y)(x-y)^2/.{x->3,y->1-a} 2Out[4]=(4-a)(2+a) 2.3 函数 1. 系统函数 在Mathmatic中定义了大量的数学函数可以直接调用,这些函数其名称一般表达了一定的意义,可以帮助我们 理解。下面是几个常用的函数: Sqrt[x] 开平方 Floor[x] 不比x大的最大整数 Ceiling[x] 不比x小的最小整数 Sign[x] 符号函数 Round[x] 接近x的整数 Abs[x] x绝对值 Max[x1,x2,x3……..] x1 ,x2,x3…….中的最大值 Min[x1,x2,x3……..] x1,x2,x3…….中的最小值 Random[] 0~1之间的随机函数 Random[R,xmax] 0~xmax之间的随机函数(R为Real,Integer,Complex之一) Random[R,{xmin,xmax}] xmin~xmax之间的随机函数(R为Real,Integer,Complex之一) x Exp[x] 指数函数e Log[x] 自然对数函数lnx logxLog[b,x] 以b为底的对数函数 bSin[x],Cos[x],Tan[x],Csc[x],Sec[x],Cot[x] 三角函数(变量是以弧度为单位的) ArcSin[x],ArcCos[x],ArcTan[x],ArcCsc[x],ArcSec[x],ArcCot[x] 反三角函数 Sinh[x],Cosh[x],Tanhx[x],Csch[x],Sech[x],Coth[x] 双曲函数 ArcSinh[x], ArcCosh[x], ArcTanhx[x], ArcCsch[x],ArcSech[x],ArcCoth[x] 反双曲函数 Mod[m,n] m被n整除的余数,余数与n同号 Quotient[m,n] m/n的整数部分 GCD[n1,n2,n3……]或GCD[s] n1,n2,… 或s的最大公约数,s为数据集合 LCM[n1,n2……]或LCM[s] n1,n2… 或s的最小公倍数,s为数据集合 N! N的阶程 N!! N的双阶程 12 Mathematica中的函数与数学上的函数有些不同的地方,Mathematica中函数是一个具有独立功能的程序模块,可以直接被调用。同时每一函数也可以包括一个或多个参数,也可以没有参数。参数的的数据类型也比较复杂。更加详细的可以参看系统的帮助,了解各个函数的功能和使用方法是学习Mathematica软件的基础。 2. 函数的定义 (1) 函数的立即定义 立即定义函数的语法如下f[x_]=expr函数名为f,自变量为x,expr是表达式。在执行时会把expr 中的x都换为f的自变量x (不是x_ )。函数的自变量具有局部性,只对所在的函数起作用。函数执行结束后也就没有了,不会改变其它全局定义的同名变量的值。 2请看下面的例子,定义函数f(x)=xsinx+x,对定义的函数我们可以求函数值,也可绘制它的图形。 In[1]:=f[x_]=x*Sin[x]+x^2 2 Out[1]=x +xSin[x] In[2]:=f[1] Out[2]=1+Sin[1] In[3]:=Plot[f[x],{x,-3,3}] 8 6 4 2 -3-2-1123 Out[3]= -Graphics- 对于定义的函数我们可以使用命令Clear[f]清除掉,而Remove[f]则从系统中删除该函数。 (2) 多变量函数的定义 也可以定义多个变量的函数,格式为f[x_,y_,z_,…]=expr自变量为x,y,z…,相应的expr中的自变量会被替换。例如定义函数f(x,y)=xy+ycosx。 In[1]:=f[x_,y_ ]=x*y+y*Cos[x] Out[1]=xy+yCos[x] In[2]:=f[2,3] Out[2]=6+3Cos[2] (3) 延迟定义函数 延迟定义函数从定义方法上与即时定义的区别为 “=” 与“:=”延迟定义的格式为f[x_]:=expr其他操作基本相同。那么延迟定义和即时定义的主要区别是什么,即时定义函数在输入函数后立即定义函数并存放在内存中并可 13 直接调用。延时定义只是在调用函数时才真正定义函数。 (4) 使用条件运算符定义和If命令定义函数 xx,,1 0,,2如果要定义如: fx(), 01xx,,,, , sin 1xx,,, 这样的分段函数应该如何定义,显然要根据x 的不同值给出不同的表达式。一种办法是使用条件运算符,基本格式为:f[x_]:=expr/;condition ,当condition条件满足时才把expr赋给f(x) 。下面定义方法,通过图形可以验证所定义函数的正确性。 In[1]:=f[x_]:=x-1/;x>=0 f[x_]:=x^2/;(x>-1)&&(x<0) f[x_]:=x-1/;x<= -1 In[4]:=Plot[f[x],{x,-2,2}] 1 0.5 -2-112 -0.5 -1 Out[4]= -Graphics- 当然使用If命令也可以定义上面的函数,If语句的格式为If[条件,值1,值2],如果条件成立取“值1”,否则取“值2”,用If语句的定义结果如下: In[5]:=g[x_]:=If[x>=0,x-1,If[x<= -1,Sin[x],x^2]] In[6]:=Plot[g[x],{x,-2,2}] 1 0.5 -2-112 -0.5 -1 Out[6]= -Graphics- 可以看出用If定义的函数g(x)和前面函数f(x)相同,这里使用了两个If嵌套,逻辑性比较强。关于其他的条件命令的进一步讨论请看后面的章节。 14 2.4 表 将一些相互关联的元素放在一起,使它们成为一个整体。既可以对整体操作,也可以对整体中的一个元素单独 进行操作。在Mathematica中这样的数据结构就称作表(List)。表,a,b,c,表示一个向量;表{{a,b},{c,d}}表示一个 矩阵。 1. 建表 在表中元素较少时,可以采取直接列表的方式列出表中的元素,如,1,2,3,,请看下面的操作: In[1]:={1,2,3} Out[1]={1,2,3} 下面是符号表达式的列表: In[2]:=1+%x+x^% 23Out[2]={1+2x,1+2x+x,1+3x+x} 下面是把Out[2]列表中的表达式对x求导: In[3]:=D[%,x] 2Out[3]={2,2+2x,3+3x} In[4]:=%/.x->1 Out[4]={2,4,6} 如果表中的元素较多时,可以用建表函数进行建表: Table[f,{i,min,max,step}] 以step为步长给出f的数值表,i由min变到max Table[f,{min,max}] 给出f的数值表,i由min变到max 步长为1 Table[f,max] 给出max个f的表 Table[f,{i,imin,imax},{j,jmin,jmax},….] 生成一个多维表 TableForm[list] 或list//TableForm 以表格格式显示一个表 Range[n] 生成一个,1,2,……,n,的列表 Range[n1,n2,d] 生成,n1,n1+d,n1+d,….,n2,的列表 下面给出x乘i的值的表,i的变化范围为[2,6]: In[1]:=Table[x*i,{i,2,6}] Out[1]={2x,3x,4x,5x,6x} In[2]:=Table[x^2,{4}] 2222Out[2]={x,x,x,x} 用Range函数生成一个序列数: In[3]:=Range[10] Out[3]={1,2,3,4,5,6,7,8,9,10} 15 下面这个序列是以步长为2,范围从8到20: In[4]:=Range[8,20,2] Out[4]={8,10,12,14,16,18,20} 上面的参数变化都是只有一个,也可制成包括多个参数的表,下面生成一个多维表: In[5]:=Table[2i+j,{i,1,3},{j,3,5}] Out[5]={{5,6,7},{7,8,9},{9,10,11}} 使用函数TableForm可以以表格的方式输出 In[6]:=%//TableForm Out[6]//TableForm=5 6 7 7 8 9 9 10 11 2. 表的元素的操作 当t表示一个表时,t[[i]]表示t中的第i个子表。如果t={1,2,a,b}那么t[[3]]表示“a”。 In[1]:=t=Table[I+2,j{I,1,3},{j,3,5}] Out[1]={{7,9,11},{8,10,12},{9,11,13}} In[2]:=t[[2]] Out[2]={8,10,12} Prepend[list, elem] 表示表头加入elem Append[list, elem] 表示在表尾加elem Insert[list, elem, n/-n] 表示在正/倒数第n个位置插入elem 表的合并: Join[list1, list2, ...] 连接表list1, list2, ... Union[list1, list2, ...] 去掉重复元素并排序后的合并(集合的并) 对于表的操作Mathematica提供了丰富的函数,详细的可以查阅后面的附录或者系统帮助。 2. 5 表达式 1. 表达式的含义 Mathematica 能处理数学公式,表以及图形等多种数据形式。尽管他们从形式上看起来不一样,但在 Mathematica内部都被看成同种类型,即都把他们当作表达式的形式。Mathematica 中的表达式是由常量、变量、 16 函数、命令、运算符和括号等组成,它最典型的形式是f[x,y]。 2. 表达式的表示形式 在显示表达式时,由于需要的不同,有时我们需要表达式的展开形式,有时又需要其因子乘积的形式。在我们计算过程中可能得到很复杂的表达式,这时我们又需要对它们进行化简。常用的处理这种情况的函数就是变换表达式表示形式函数。 Expand[expr] 按幂次升高的顺序展开表达式 Factor[expr] 以因子乘积的形式表示表达式 Simplify[expr] 进行最佳的代数运算,并给出表达式的最少项形式 4 2 表达式(x+y) (x+y) 展开: In[1]:=Expand[(x+y)^4*(x+y^2)] 5 4 3 2 4 2 2 3 3 3 4 2 4 5 6 Out[1]=x +4xy+6x y +x y+4xy+4x y+xy+6x y+4xy+y 还原上面的表达式为因子乘积的形式: In[2]:=Factor[%] 4 2 Out[2]=(x+y) (x+y) 多项式表达式的项数较多,比较复杂,在显示时显得比较杂乱,而且在计算过程中没有必要知道全部的内容;或表达式的项很有规律,没有必要打印全部的表达式的结果,Mathematica提供了一些命令,可将它缩短输出或不输出。 expr//Short 或 Short[expr] 显示表达式的一行形式 Short[expr,n] 显示表达式的n行形式,命令后加一分号“;” 不输出结果 30将表达式(1+x) 展开,并仅显示一行有代表项的式子: In[3]:=Expand[(1+ x)^30]//Short 2 32 7 2 8 2 9 3 0 Out[3]=1+30x+435x +4060x +<<23>>+4060x +435x+30x+x 将上式分成三行的形式展开: In[4]:=Short[Expand[(1+ x)^30],3] 2 3 4 Out[4]=1+30x+435x +4060x +27405x+ 5 2 5 142506x+<<19>>+142506x+ 2 6 2 7 2 8 2 9 3 0 27405x+4060x +435x+30x+x 把代数表达式变换到你所需要的形式没有一种固定的模式,一般情况下,最好的办法是进行多次实验,尝试不同的变换并观察其结果,再挑出你满意的表示形式。 3. 关系表达式与逻辑表达式 我们已经知道“,”表示给变量赋值。现在我们来学习一些其它的逻辑与关系算子。关系表达式是最简单的逻辑表达式,我们常用关系表达式表示一个判别条件。例如:x>0,y=0。关系表达式的一般形式是:表达式,关系算子 17 ,表达式。其中表达式可为数字表达式、字符表达式或意义更广泛的表达式,如一个图形表达式等。在我们实际运 用中,这里的表达式常常是数字表达式或字符表达式。下面出Mathematica中的各种关系算子: x==y 相等 x!=y 不相等 x>y 大于 x>=y 大于等于 xy>z 严格递减 xy Out[2]=False 下面是比较两个表达式的大小: In[3]:=3^2>y+1 上面已设y=9 Out[3]= False 用一个关系式只能表示一个判定条件,要表示几个判定条件胡组合,必须用逻辑运算符将关系表达式组织在一 起,我们称表示判定条件的表达式为逻辑表达式。 下面是常用的逻辑运算和它们的意义: ~ 非 && 并 || 或 Xor 异或 If 条件 LogicalExpand[expr] 展开逻辑表达式 例如下面的例子说明它们的应用: In[4]:=3*x^2value] 在指定区间上按选项定义值画出函数在直角坐标系中的图形 Plot[{f1,f2,f3,…},{x,xmin,xmax},option->value] 在指定区间上按选项定义值同时画出多个函数在直角坐标系中的图形 Mathematica绘图时允许用户设置选项值对绘制图形的细节提出各种要求。例如,要设置图形的高宽比,给图 形加标题等。每个选项都有一个确定的名字,以“选项名->选项值”的形式放在Plot中的最右边位置,一次可设置多 个选项,选项依次排列,用逗号隔开,也可以不设置选项,采用系统的默认值。 选项 说明 默认值 AspectRatio 图形的高、宽比 1/0.618 AxesLabel 给坐标轴加上名字 不加 PlotLabel 给图形加上标题 不加 PlotRange 指定函数因变量的区间 计算的结果 PlotStyle 用什么样方式作图(颜色,粗细等) 值是一个表 PlotPoint 画图时计算的点数 25 1. 举例 2sinxfx(),(1) 例如绘制的图形: x,1 In[1]:=f[x_]=Sin[x^2]/(x+1) Plot[f[x],{x,0,2Pi}] 2Sin[x]Out[1]= 1+x 25 0.4 0.2 123456-0.2 Out[2]= -Graphics- 限制长宽比例: In[3]:=Plot[f[x],{x,0,2Pi},AspectRatio->1/2] 长宽比例为1:2 0.4 0.2 123456-0.2 Out[3]= -Graphics- (2) 如果要取消刻度可以使用Ticks选项: In[4]:=Plot[f[x],{x,0,2Pi},Ticks->None] Out[4]= -Graphics- (3) 如果要标注坐标名称x 轴为“Time”,y轴为“Height”: In[5]:= Plot[f[x],{x,0,2Pi},AxesLabel->{“time”,”height”}] height 0.4 0.2 time123456-0.2 26 Out[5]= -Graphics- (4) 将坐标原点移到点(3,0),并标注图形名称为Decay waves: DecaywavesIn[6]:= Plot[f[x],{x,0,2Pi},AxesOrigin->{3,0},PlotLabel->“Decay waves”] 0.4 0.2 012456 -0.2 Out[6]= -Graphics- (5) 修改x方向的刻度,y轴方向的刻度则用默认值: In[7]:= Plot[f[x],{x,0,2Pi},Ticks->{{0,Pi/2,Pi,3Pi/2,2Pi},Automatic}] Out[7]= -Graphics- (6) 定义y轴的绘图范围: In[8]:= Plot[f[x],{x,0,2Pi},PlotRange->{-0.6,0.6}] 0.4 0.2 123456 -0.2 -0.4 Out[8]= -Graphics- (7) 另外我们也可以将图形结果定义给变量,但不显示图形,后用Show命令显示: In[9]:=g1=Plot[f[x],{x,0,2Pi},DisplayFunction->Identity] g2=Plot[x*Cos[x]/12,{x,0,2Pi}, DisplayFunction->Identity] 27 Show[g1,g2, DisplayFunction->$ DisplayFunction] Out[9]= -Graphics- Out[10]= -Graphics- 0.4 0.2 123456 -0.2 Out[11]= -Graphics- 2. 数据集合的图形 Mathematica用于绘数字集合的图形的命令与前而介绍的绘函数图形的命令是相似的。如下: 2…时y1,y2,…的图形 ListPlot[{y1,y2,…..}] 绘出在x的值为1, ListPlot[{{x1,y1},{x2,y2},…..}] 绘出离散点(xi,yi) ListPlot[List,PlotJoined->True] 把离散点连成曲线 (1)下面举例说明下面是一个离散数据的集合的图形: In[1]:=List1=Table[i^3+i,{i,10}] Out[1]={2,10,30,68,130,222,350,520,738,1010} In[2]:=ListPlot[List1] 1000 800 600 400 200 46810 Out[2]= -Graphics- 3. 二维参数作图 前面我们使用Plot命令可以绘出直角坐标系下的函数图形,使用ParametrecPlot可以绘制参数曲线下面给出 ParametricPlot的常用形式: ParametricPlot[{fx,fy},{t,tmin,tmax}] 绘出参数图 ParametricPlot[{fx,fy},{gx,gy},….{t,tmin,tmax}] 绘出一组参数图 28 ParametricPlot[{fx,fy},{t,tmin,tmax},AspectRatio->Automatic] 设法保持曲线的形 xtt,sin3cos,(1) 绘制参数方程的图形 ,ytt,sin3sin, In[1]:= ParametricPlot[{Sin[3t]Cos[t],Sin[3t]Sin[t]},{t,0,2Pi}] 0.5 0.25 -0.75-0.5-0.250.250.50.75 -0.25 -0.5 -0.75 -1 Out[1]= -Graphics- (2) 下面将一个园与上面参数方程的图象绘在同一个坐标下,并保证图形的形状正确: In[2]:= ParametricPlot[{{Sin[3t]Cos[t],Sin[3t]Sin[t]},{Sin[t],Cos[t]}},{t,0,2Pi}, AspectRatio->Automatic] 1 0.5 -1-0.50.51 -0.5 -1 Out[2]= -Graphics- 4.2 二维图形元素 用图形元素绘图适合于绘制结构复杂的图形。Mathematica中还提供了各种如绘制点、线段、圆弧等函数。同 样我们可先用Graphics作出平面图形的表达式,再用Show显示守成的图形。下面给出在Mathematica中常用的二 维图形元素: Point[[x,y]] 点 Line[{{x1,y1},{x2,y2},…}] 线段 29 Rectangle[{xmin,ymin},{xmax,ymax}] 填充矩阵 Polygon[{{x1,y1},{x2,y2},…….}] 填充多边形 Circle[{x,y},r] 圆 Circle[{x,y},{rx,ry}] 半轴分别为rx,ry的椭圆 Circle[{x,y},r,{theta1,thata2}] 圆弧 Circle[{x,y},{rx,ry},{theta1,theta2}] 椭圆弧 Disk[{x,y},r] 填充圆 Raster[{{a11,a12,…..},{a21,……},….}] 灰度在0到1之间的灰层组 Text[Expr,{x,y}] 文本大小 下图绘出一个有颜色和大小的点,且在图形四周插入文本: In[1]:=g1=Graphics[{Text[“Left”,{-1,0},{-1,0}],Text[“Right”,{1,0},{1,0}],Text[“Above”,{0,1},{0,-1}],Text[“B elow”,{0,-1},{0,-1}],{PointSize[0.3],Point[{0,0}]}},PlotRange->All] Show[g1] Out[1]= -Graphics- Above LeftRight Below Out[2]= -Graphics- 下面绘制一些有线条组成的图形: In[3]:=sawline=Line[Table[{n,(-1)^n},{n,6}]] Show[Graphics[sawline]] Out[3]=Line[{{1,-1},{2,1},{3,-1},{4,1},{5,-1},{6,1}}] Out[4]= -Graphics- 当然也可以添加坐标轴,下面的例子说明了这一点: 30 In[5]:=Show[Graphics[sawline],Axes->True] 1 0.5 23456 -0.5 -1 Out[5]= -Graphics- 下面的例子是说明了Retangle的图形绘制,例子中用一些小矩形逼近正弦曲线与x轴所成面积。程序中生成一 个图形集合并显示出来。 In[6]:=St=Table[Rectangle[{x,0},{x+0.08,Sin[x]}],{x,0,2Pi,0.15}] Show[Graphics[St],Axes->True] 1 0.5 123456 -0.5 -1 Out[7]= -Graphics- 4.3 图形的样式 我们称图形的颜色、曲线的形状和宽度等特性为图形样式。在本节中,我们就图形的各种样式,尤其是曲线的 样式进行学习。下面给出选项用于设置图形样式: Graykvel[] 灰度介于0(黑)到l(白)之间 RGBColor[r,g,b] 由红、绿,蓝组成的颜色,每种色彩取0到1之间的数 Hue[A] 取0到1之间的色彩 Hue[h,s,b] 指定色调,位置和亮度的颜色,每项介于0到1之间 PointSize[d] 给出半径为d的点,单位是Plot的一个分数 AbsolutePointSize[d] 给出半径为d的点(以绝对单位量取) Thickness[w] 给所有线的宽度w,单位是Plot的分数 AbsoluteThickness[w] 给所有线的宽度w,(以绝对单位量取) 31 Dashing[wl,w2,….] 给所有线为一系列虚线,虚线段的长度为wl,w2,… Absolutedashing[{w1,w2,…..}] 以绝对单位给出虚线长度 PlotStyle->style 设立Plot中所有曲线的风格 PlotStyle->{{Style1},{Style2}…….} 设立Plot中一些列曲线的风格 MeshStyle->Style 设立宽度和表面网格的风格 1. 图形颜色的设置 在Mathematicaa提供各种图形指令中,对图形元素颜色的设置是一个很重要的设置.。下面给出三条不同颜色 的正弦曲线,此处以灰度表示,即颜色深浅不同。 In[1]:=Plot[{Sin[x],Sin[2x],Sin[3x]},{x,0,2Pi},PlotStyle->{RGBColor[0.9,0,0], RGBColor[0,0.9,0], RGBColor[0,0,0.9]}] 1 0.5 123456 -0.5 -1 Out[1]= -Graphics- 下面用不同的色调对三个菱形进行着色。 In[2]:=v1={{-1,0},{0,-1},{1,0},{0,1}}; Show[Graphics[{Hue[0.1],Polygon[3*v1], Hue[0.8],Polygon[2*v1], Hue[0.2],Polygon[v1]}, AspectRatio->Automatic]] Out[2]= -Graphics- 2. 图形大小 下面是一些点,注意点大小的控制。 In[3]:=Table[Point[{n^2,Prime[n]}],{n,5}];Show[Graphics[{PointSize[0.1],%}],PlotRange->All]; 32 下面的点的控制是用绝对单位: In[4]:=ListPlot[Table[Prime[n],{n,10}],Prolog->AbsolutePointSize[5]] 25 20 15 10 46810 Out[4]= -Graphics- 3. 线段的控制 下面的例子是控制线段的宽度,使用的是绝对控制。 In[5]:=Show[Graphics[{Table[{AbsoluteThickness[d],Line[{{0,0},{1,d}}]},{d,5}], Line[{{0,5},{1,0}}]}]] Out[5]= -Graphics- Mathematica提供的虚线指令可生成多种不同的复杂虚线。 4.4 图形的重绘和组合 每次绘制图形后,Mathematica保存了图形的所有信息,所以用户可以重绘这些图形。我们在重绘图形的时候, 还可以改变一些使用。下面是常用重绘图形的函数。 Show[plot] 重绘图形 33 Show[plot,option->value] 改变重绘图形 Show[plot1,plot2,plot3…] 多个图形的绘制 Show[GraphcisArray[{{plot1,plot2,…}…}]] 绘制图形矩阵 InputForm[plot] 给出所有的图形信息 1. 使用Show显示图形 2下面绘制函数sinx 的图形。 In[1]:=Plot[Sin[x^2],{x,-Pi,Pi}] 1 0.5 -3-2-1123 -0.5 -1 Out[1]= -Graphics- In[2]:=Show[%] 1 0.5 -3-2-1123 -0.5 -1 Out[2]= -Graphics- 重绘图形时,可以改变命令的设置,下面改变y的比例同时给图加边框: In[3]:=Show[%,PlotRange->{-1,2},Frame->True]] 2 1.5 1 0.5 0 -0.5 -3-2-10123 34 Out[3]= -Graphics- 2. 使用Show命令进行组合 也可使用Show进行图形组合。图形组合与图形是否有相同的比例无关,这是Mathematica会自动选择新的比 例来绘制图形。下面绘制函数xsin(2x+π)的图形和xcos2x 然后绘制在一张图时。 In[4]:=f1=Plot[x*Sin[2x+Pi],{x,0,4Pi}] 10 5 24681012 -5 -10 Out[4]= -Graphics- In[5]:=f2=Plot[x*Cos[2x],{x,0,4Pi}] 10 5 24681012 -5 -10 Out[5]= -Graphics- In[6]:=Show[f1,f2] 10 5 24681012 -5 -10 Out[6]= -Graphics- 3. 将多个图形组合为一个图形 我们也可把图形组合为一个图形,我们还可以用GraphicsArray把多个图形绘制在一个图形矩阵中如下图。 35 In[7]:=Show[GraphicsArray[{{%6,f1},{%6,f2}}]] 1010 55 2468101224681012-5-5 -10-10 1010 55 2468101224681012-5-5 -10-10 Out[7]= -GraphicsArray- 4.5 基本三维图形 绘制函数f(x,y)在平面区域上的三维立体图形的基本命令是Plot3D,Plot3D和Plot的工作方式和选项基本相 同。ListPlot3D可以用来绘制三维数字集合的三维图形,其用法也类似于ListPlot,下面给出这两个函数的常用形式: Plot3D[f ,(x,xmin,xmax),(y,ymin,ymax)] 绘制以x和y为变量的三维函数的图形 ListPlot3D[{Z11,Z12,…},{Z21,Z22,…},…..]] 绘出高度为Zvx数组的三维图形 Plot3D同平面图形一样,也有许多输出选项,你可通过多次试验找出你所需的最佳图形样式。 选项 取值 意义 Axes True 是否包括坐标轴 AxesLabel None 在轴上加上标志:zlabel规定z轴的标志, {xlabel,ylabel,zlabel}规定所有轴的标志 Boxed True 是否在曲面周围加上立方体 ColorFunction Automatic 使用什么颜色的明暗度; Hue表示使用一系列颜色 TextStyle STextStyle 用于图形文本的缺省类型 ormatType StandardForm 用于图形文本的缺省格式类型 DisplayFunction SdlisplayFunction 如何绘制图形,Indentity表示不显示 FaceGrids None 如何在立体界面上绘上网格; All表示在每个界面上绘上网格 HiddenSurface True 是否以立体的形式绘出曲面 Lighdng True 是否用明暗分布米给表面加色 Mesh True 是否在表面上绘出xy网格 36 PlotRange Automatic 图中坐标的范围;可以规定为All,{zmin,zmax} 或{xminn,xmax},{ymin,ymax},{zmin,zmax} Shading True 表面是用阴影还是留空白 ViewPoint {1(3,-2(4,2} 表面的空间观察点 1. 三维绘图举例 (1) 函数sin(x+y)cos(x+y)的立体图: In[1]:=t1=Plot3D[Sin[x+y]*Cos[x+y],{x,0,4},{y,0,4}] 0.5 0.2540 -0.253 -0.5002 11 122 33044 Out[1]= -SurfaceGraphics- (2) 对于三维图形中Axes、Axeslabel、Boxed等操作同二维图形的一些操作很相似。用PlotRange设定曲线的 表面的变化范围。 In[2]:=Show[t1,PlotRange->{0.2,0.2}] 0.4 0.340.2 0.13 0200 11 122 33 044 Out[2]= -SurfaceGraphics- (3) 图形轴上加上标记,且在每个平面上画上网格。 In[3]:=Show[t1,AxesLabel->{“Time”,”Depth”,”Value”},FaceGrids->All] 37 0.50.254Value0-0.253-0.5002Depth11122TimeTime33044 Out[3]= -SurfaceGraphics- (4) 视图的改变 学习过画法几何或工程制图的都知道,制图时通常用三视图来表示一个物体的具体形状特性。我们在生活中也知道从不同观察点观察物体,其效果是很不一样的。Mathematica在绘制立体图形时,在系统默认的情况下,观察点在(1.3, -2.4, 2)处。这个参考点选择是具有一般性的,因此偶尔把图形的不同部分重在一起也不会发生视觉混乱。 下面例子改变观察视点。 In[4]:=Show[t1,ViewPoint->{2,-2,0}] 0.5 0.25 0 -0.25 -0.5004113222331404 Out[4]= -SurfaceGraphics- 从上面我们可以看出,观察点位于曲面的上方有利于看清对于图形全貌。对于较复杂的图形,我们在所绘的图形上包括尽可能多的曲线对于我们观察很有帮助。同时,在曲面的周围直接绘出立方体盒子也有利于我们认清曲面的方位。 (5) 下面是没有网格和立体盒子的曲面图,它看起来就不如前面的图形清晰明了。 In[5]:=Show[t1,Mesh->False, Boxed->False] 0.5 0.2540 -0.253 -0.5 002 11 122 33 044 38 Out[5]= -SurfaceGraphics- (6) 下图给出没有阴影的曲面 In[6]:=Show[t1,Shading->False] 0.5 0.2540 -0.253 -0.5002 11 122 33044 Out[6]= -SurfaceGraphics- 带有阴影和网格的图形对于理解曲面的形状是很有好处的。在有些矢量图形的输出装置中,你可能得不到阴影, 但是当有阴影时,输出装置可能要花很长时间来输出它。 (7) 给空间立体曲面着色 通常情况下,Mathematica为了使图形更加逼真而用明暗分布的形式给空间立体曲面着色。在这种情况下, Mathematica假定在图形的右上方有三种光源照在物体上。但有时这种方法会造成混乱,此时你可用Lighting->False 来采取根据高度在表面上涂以不同灰度的阴影的方法。 In[7]:=Show[t1,Lighting->False] 0.5 0.2540 -0.253 -0.5002 11 122 33 044 Out[7]= -SurfaceGraphics- 2. 用数据来进行绘图 同二维绘图一样,三维图形也可用数据来进行绘图。下面给出数据矩阵,因其较大未表示其结果。 In[8]:= MyTable:=Table[Sin[x*y]+Random[Real,{0.15,0.15}],{x,0,3Pi/2,Pi/15},{y,0,3Pi/2,Pi/15}] ListPlot3D[MyTable] 39 1 0.5 200 -0.515 1055 101051515 2020 Out[9]= -SurfaceGraphics- 3. 三维空间的参数方程绘图 三维空间中的参数绘图函数ParametricPlot3D[{fx,fv,fz},{t,tmin,tmax}]和二维空间中的ParametricPlot 很相仿。在这种情况下,Mathematica实际上都是根据参数t来产生一系列点,然后再连接起来。 三维参数作图的基本形式为: ParametricPlot3D[{fx,fv,fz},{t,tmin,tmax}] 给出空间曲线的参数图 ParametricPlot3D[{fx,fv,fz},{t,tmin,tmax},{u,umin,umax}] 给出空间曲面的参数图 ParametricPlot3D[{fx,fv,fz,s}…..] 按照函数关系s绘出参数图的阴影部分 ParametricPlot3D[{fx,fv,fz},{gx,gy,gz}…..] 把一些图形绘制在一起 下面是一些空间曲线的例子 In[10]:=pp1:= ParametricPlot3D[{3*Cos[4*t+1],Cos[2*t+3],4Cos[2*t+5]},{t,0,Pi}]; In[11]:=pp2:= ParametricPlot3D[{3*Cos[4*t+1],Cos[2*t+3],4Cos[2*t+5]},{t,0,Pi}, Boxed->False]; In[12]:=pp3:= ParametricPlot3D[{3*Cos[4*t+1],Cos[2*t+3],4Cos[2*t+5]},{t,0,Pi}, Boxed->False,Axes->False]; In[13]:=pp4:= ParametricPlot3D[{3*Cos[4*t+1],Cos[2*t+3],4Cos[2*t+5]},{t,0,Pi}, Boxed->False,Axes->False,BoxRatios->{1,1,1}]; In[14]:=Show[GraphicsArray[{{pp1,pp2},{pp3,pp4}}]] 结果为 40 11110.50.5-20.50.5-20000-0.5-0.5-0.5-0.500-1-1-1-122 4444 2222 0000 -2-2-2-2 -4-4-4-4 Out[14]= -GraphicsArray- 命令ParametricPlot3D[{fx,fv,fz},{t,tmin,tmax},{u,umin,umax}] 产生一个曲面而不是一条曲线, 曲面是由四边形组成。 In[15]:= ParametricPlot3D[{r,Exp[- r^2Cos[4r]^2]*Cos[t], Exp[- r^2Cos[4r]^2]*Sin[t]}, {r,-1,1},{t,0,2Pi}] 11 0.50.5 00 -0.5-0.5 -1-11 0.5 0 -0.5 -1 -1-1-0.5-0.5 00 0.50.5 11 Out[15]= -Graphics3D- 下面这个图形也很漂亮 In[16]:= ParametricPlot3D[{Cos[u]Sin[v],Sin[u]Sin[v], Cos[v]+Log[Tan[v/2]]+0.1*u}, {u,0,4Pi},{v,0.001,1},PlotPoints->{64,32}] 41 -0.500.50.50.500-0.5-0.5 1 0 -1 -2 -3 Out[16]= -Graphics3D- 第5章 微积分的基本操作 5.1 极限 Mathematica计算极限的命令是Limit它的使用方法主要有: Limit[expr,x->x] 当x趋向于x时求expr的极限 00Limit[expr,x->x,Direction->1] 当x趋向于x时求expr的左极限 00Limit[expr,x->x,Direction->-1] 当x趋向于x时求expr的右极限 00趋向的点可以是常数,也可以是+?,-? 例如: 2x,2lim1(求 x,,36x, In[1]:=Limit[Sqrt[x^2+2]/(3x-6),x->Infinity] 1Out[1]= 3 2sinxlim2(求 2x,0x In[2]:=Limit[Sin[x]^2/x^2,x->0] Out[2]=1 lnx3(求 lim,x,0x In[3]:=Limit[Log[x]/x,x->0,Direction->-1] Out[3]= -? 42 5.2 微分 1. 函数的微分 在Mathematica 中,计算函数的微分或导数是非常方便的,命令为D[f,x],表示对x求函数f的导数或偏导数。 该函数的常用格式有以下几种 df,fD[f,x] 计算导数或 ,xdx n,fD[f,x,x,…] 计算多重偏导数 12,,,xxx12n ndfD[f,{x,n}] 计算n阶导数 ndx dfD[f,x,NonConstants->{v,v,…}] 计算导数,其中v,v…依赖于x 1212dx例如: (1) 求函数sinx的导数 In[1]:=D[Sin[x],x] Out[1]=Cos[x] x(2) 求函数e sinx的2阶导数 In[2]:=D[Exp[x]*Sin[x],{x,2}] x Out[2]=2eCos[x] (3) 假设a是常数,对sinax求导 In[3]:=D[Sin[a*x],x] Out[3]=aCos[ax] 2 2 (4) 二元函数f(x,y)=x y+y 求f对x,y 的一阶和二阶偏导 In[4]:=f[x_,y_]=x^2*y+y^2 2 2Out[4]= x y+y In[5]:=D[f[x,y],x] Out[5]=2xy In[6]:=D[f[x,y],y] 2 Out[6]=x + 2y In[7]:=D[f[x,y],x,y] Out[7]=2x In[8]:=D[f[x,y],{x,2}] Out[8]=2y 43 In[9]:=D[f[x,y],{y,2}] Out[9]=2 Mathematica可以求函数式未知的函数微分,通常结果使用数学上的表示法。 例如: In[10]:=D[x*g[x],x] Out[10]=g[x]+xg′[x] In[11]:=D[x*g[x],{x,4}] (3)(4)Out[11]=4g[x]+xg [x] 对复合函数求导法则同样可用: In[12]:=D[g[h[x]],x] Out[12]=g′[h[x]] h′[x] 如果要得到函数在某一点的导数值,可以把这点代入导数如: In[13]:=D[Exp[x]*Sin[x],x]/.x->2 22Out[13]=e Cos[2]+e Sin[2] In[14]:=N[%] Out[14]=3.64392 2. 全微分 在Mathematica中,D[f,x]给出f的偏导数,其中假定f中的其他变量与x无关。当f为单变量时,D[f,x]计算f 对x的导数。函数Dt[f,x]给出f的全微分形式,并假定f中所有变量依赖于x.下面是Dt命令的常用形及意义 Dt[f] 求全微分df Dt[f,x] 求f对x的微分 Dt[f,x,x,…] 求f对x多重全微分 12i Dt[f,x,Constants->{c,c,….}] 求全微分df,其中c,c..是常数 1212 22下面我们求x +y 的偏微分和全微分 In[1]:=D[x^2+y^2,x] Out[1]=2x In[2]:=Dt[x^2+y^2,x] Out[2]=2x+2yDt[y,x] 2 3可以看出第一种情况y与x没有关系,第二种情况y是x的函数。再看下列求多项式 x +xy +yz的全微 分并假定z保持不变是常数。 In[3]:=Dt[x^2+x*y^3+y*z,Constants->{z}] 3 Out[3]=2Dt[x,Constants?{z}]+y Dt[x, Constants?{z}] 44 2 +3xy Dt[y,Constants?{z}]+zDt[y, Constants?{z}] 如果y是x的函数,那么y被看成是常数 In[4]:=Dt[x^2+x*y[x]+y[x]*z] Out[4]=2xDt[x]+Dt[x]y[x]+Dt[z]y[x]+xDt[x]y′[x]+zDt[x] y′[x] 5.3 计算积分 1. 不定积分 在Mathematica中计算不定积分命令为Integerate[f,x],当然也可使用工具栏直接输入不定积分式。来求函数 的不定积分。当然并不是所有的不定积分都能求出来。 sinsinxdx例如若求 Mathematica就无能为力: , In[1]:=Integrate[Sin[Sin[x]],x] sin[sin[x]]dxOut[1]= , 2uu1,du但对于一些手工计算相当复杂的不定积分,MatheMatica还是能轻易求得,例如求 2,211,u 2u1+uduIn[2]:= 2,2+11u 123ArcTanh[111+u]21+u2Out[2]= ,111111 积分变量的形式也可以是一函数,例如: Sin[Sin[x]]dSin[x]In[3]:= , Out[3]= -Cos[Sin[x]] 输入命令也可求得正确结果: In[4]:=Integrate[Sin[Sin[x]],Sin[x]] Out[4]= -Cos[Sin[x]] 对于在函数中出现的除积分变量外的函数,统统当作常数处理,请看下面例子: 2(a*x+b*x+c)dxIn[5]:= , 23bxaxcx++Out[5]= 23 2. 定积分 45 42ax定积分的求解主要命令是Integrate[f,{x,min,max}], 或者使用工具栏输入也可以。例如求 xedx,,4In[6]:=Integrate[x^2Exp[ax],{x,-4,4}] ax128eOut[6]= 3 41dx显然这条命令也可以求广义积分,例如求: 2,0(-2)x In[7]:=Integrate[1/(x-2)^2,{x,0,4}] Out[7]=? ,,1求无穷积也可以,例如: dx4,1x In[8]:=Integrate[1/x^4,{x,1,Infinity}] 1Out[8]= 3 如果广义积分发散也能给出结果,例如: In[9]:=Integrate[1/x^2,{x,-1,1}] Out[9]= ? 如果无法判定敛散性,就用给出一个提示,例如: In[10]:=Integrate[1/x,{x,0,2}] 1 Integrate::idiv: Integral of does not converge on {0,2}. x 21Out[10]= dx,0x ,,1如果广义积分敛散性与某个符号的取值有关,它也能给出在不同情况下的积分结果。例如: dxp,1xIn[11]:=Integrate[1/x^p,{x,1,Infinity}] 1 p–Out[11]=If[Re[p]>1,,Integrate[x,{x,1,?},Assumptions?Re[p]?1]] -1+p 1结果的意义是当p >1时,积分值为,否则不收敛。在Integrate中可加两个参数Assumptions 和 -1+p GenerateConditions例如上例中,只要用Assumptions->{Re[p]>1}就可以得到收敛情况的解: In[12]:=Integrate[1/x^p,{x,1,Infinity},Assumptions->{Re[p]>1}] 1Out[12]= -1+p 3. 数值积分 数值积分是解决求定积分的另一种有效的方法,它可以给出一个近似解。特别是对于用Integrate命令无法求 46 出的定积分,数值积分更是可以发挥巨大作用。 它的命令格式为: Nintegrate[f,{x,a,b}] 在[a,b]上求f数值积分 Nintegrate[f,{x,a,x,x,…,b}] 以x,x….为分割求[a,b]上的数值积分 1212 Nintegrate[f,{x,a,b},MaxRecursion->n] 求数值积分时指定迭代次数n 下面我们求Sinsinx在[0,π]上的积分值,由于这个函数的不定积分求不出,因此使用Integrate命令无法得到具体结果,但可以用数值积分求: In[13]:=Nintegrate[Sin[Sin[x]],{x,0,Pi}] Out[13]=1.78649 1如果积分函数存在不连续点,或存在奇点我们可对积分进行分段求解。例如函数在[-1,1]上,显然x=0 ||x点是一个无穷间断点。因此若要求其数值积分,必须在其中插入点0。 In[14]:=NIntegrate[1/Sqrt[Abs[x]],{x,-1,1}] 1 Nintegrate::inum:Integrand is not numerical at {x} = {0.}. Abs[x] 1Out[14]=Nintegrate[,{x,-1,1}] Abs[x] In[15]:=NIntegrate[1/Sqrt[Abs[x]],{x,-1,0,1}] Out[15]=4. 对无穷积分,也可求数值积分,例如: In[16]:=Nintegrate[Exp[-x^2],{x,0,Infinity}] Out[16]=0.886227 5.4 多变量函数的微分 下面是计算多变量函数的偏导数及全微分的命令与单变量基本相同,通过分析下面的例子我们可以我们可以轻松掌握。 n,f ( 1 ) D[f,x, x,…, x ]计算偏导数 12 n,,,xxx12n 下面是实际的例子: 2求函数sin(xy)对x的偏导数: In[1]:=D[Sin[x*y^2],x] 22Out[1]=y Cos[xy ] 47 2求函数sin(xy)对x的二阶偏导数: In[2]:=D[Sin[x*y^2],x,x] 42Out[2]= -y Sin[xy ] 上述命令也可写成如下形式: In[3]:=D[Sin[x*y^2],{x,2}] 42Out[3]= -y Sin[xy ] 2求函数sin(xy)对x的二阶对y的一阶混合偏导数: In[4]:=D[Sin[x*y^2],x,x,y] 5232Out[4]= -2xy Cos[xy ] - 4y Sin[xy ] 上述命令也可写成如下形式: In[5]:=D[Sin[x*y^2],{x,2},y] 5232Out[5]= -2xy Cos[xy ] - 4y Sin[xy ] ,f( 2) D[f,x,NonConstants->{c ,c ,…}],中c依赖于x 12i,x 下面是实际的例子: In[6]:=D[x^2+y^2,x,NonConstants->{y}] Out[6]=2x+2yD[y,x,NonConstants?{y}] ,y注意:D[y,x,NonConstants?{y}]表示,其中y是x的函数。 ,x ( 3 ) Dt[f] 计算全微分df 下面是实际的例子: 23计算d(x y ) In[7]:=Dt[x^2*y^3] 3 22Out[7]=2xy Dt[x]+3x y Dt[y] 其中Dt[x]为dx,Dt[y]为dy 定义z为一个二元函数,求z的全微分,并提出Dt[x]和Dt[y]: In[8]:=z=x^3*y+x^2*y^2-3x*y^2;Collect[Dt[z],{Dt[x],Dt[y]}] 22 2 3 2 Out[8]=(3x y -3y +2xy )Dt[x]+(x – 6xy+2x y)Dt[y] 将上式表示成的形式: In[9]:=%/.{Dt[x]->dx,Dt[y]->dy} 3 2 22 2 Out[9]= dy(x – 6xy+2x y)+ dx(3x y -3y +2xy ) 求z对x的导数: In[10]:=Dt[z,x] 2 2 2 3 2 Out[10]=3x y -3y +2xy +x Dt[y,x] -6xyDt[y,x]+2x yDt[y,x] 因为Mathematica不知道y是否为x的函数,所以保留Dt[y,x]。用置换运算将Dt[y,x]置换成0即可求得z对x 48 的导数: In[11]:=Dt[z,x]/.Dt[y,x]->0 2 2 2 Out[11]=3x y -3y +2xy ( 4) 求隐函数的导数 下面是实际的例子: 2 2求隐函数5y + siny= x 的导数: In[12]:=Dt[5*y^2+Sin[y]==x^2,x] Out[12]=10yDt[y,x]+Cos[y]Dt[y,x]==2x In[13]:=Solve[%,Dt[y,x]] 2xOut[13]={{Dt[y,x]?}} 10y+Cos[y] ( 5 ) Dt[f,x,Constants->{c ,c ,…}]计算全微分df , 其中c是常数 12i 下面是实际的例子: In[14]:= Dt[x^2+y^2+z^2,x,Constants->{z}] Out[14]=2x+2yDt[y,x,Constants?{z}] ( 6 ) Dt[f, x, x,…, x ]计算f对x的多重全微分 12 ni 下面是实际的例子: In[15]:= z=x^3*y+x^2*y^2-3x*y^2; In[16]:=Dt[z,x,y] 2 2 2 Out[16]=3x– 6y + 4xy + 6xyDt[x,y] + 2y Dt[x,y] – 6xDt[y,x] + 2x Dt[y,x] 2 + 3x Dt[x,y]Dt[y,x] – 6yDt[x,y]Dt[y,x] + 4xyDt[x,y]Dt[y,x] 5.5 多变量函数的积分 (重积分) 多变量函数的积分类似于一元函数的积分,可以利用Integrate函数来完成。命令如下: bdnIntegrate[f,{x,a,b},{y,c,d},…{z,m,n}] 计算重积分 fxyzdzdydx(,,,),,,acm Nintegrate[f,{x,a,b},{y,c,d},…{z,m,n}] 数值积分或重积分的数值解 下面是具体的例子: 1dxdy计算重积分 2,,xy,,1 1dxdyIn[1]:= 2,,x+y+1 49 x221+yArcTan[]+xLog[1+x+y]Out[1]= 1+y 我们也可以直接输入Integrate命令进行积分,但要注意x与y的顺序: In[2]:=Integrate[1/(x^2+y+1),y,x] x221+yArcTan[]+xLog[1+x+y]Out[2]= 1+y ab22计算二重积分: ()xydxdy,,,00 In[3]:= Integrate[x^2+y^2,{x,0,a},{y,0,b}] 122Out[3]= ab(a+b)3 y的积分限也可以是x的函数: In[4]:= Integrate[x^2+y^2,{x,0,a},{y,0,x^2}] 57aa+Out[4]= 521 以下是数值积分的例子: 在重积分中,无法求出某个变量的积分值,会求出可积的部分,再输出运算结果。 In[5]:= Integrate[Sqrt[x+y],{x,0,2},{y,0,Sqrt[x+2]}] 11/ 4 3/ 41/ 4Out[5]=22(7692–4622 –1024-4602–2430Log[3]+1215Log[1+22 +2]) 960 将上式转换成数值解: In[6]:=N[%] Out[6]=4.65557 直接利用NIntegrate命令求解,也可以得到相同的答案: In[7]:= NIntegrate[Sqrt[x+y],{x,0,2},{y,0,Sqrt[x+2]}] Out[7]=4.65557 224yx,22以下是一个三重积分: xzdzdydx,22,,,,,,2xyx In[8]:=Off[Nintegrate::slwcon];Nintegrate[Sqrt[x^2+z^2],{x,-2,2},{y,x^2,4},{z,-Sqrt[y-x^2],Sqrt[y-x^2]}] Out[8]=26.8083 注意:命令Off[Nintegrate::slwcon]的作用是不显示提示信息。 50 第6章 微分方程的求解 6.1 微分方程解 在Mathematica中使用DSolve[]可以求解线性和非线性微分方程,以及联立的微分方程组。在没有给定方程的 初值条件下,我们所得到的解包括C[1],C[2]是待定系数。求解微分方程就是寻找未知的函数的表达式,在 Mathematica中,方程中未知函数用y[x]表示,其微分用y?[x],y??[x]等表示。下面给出微分方程(组)的求解函数: DSolve[eqn,y[x],x] 求解微分方程函数y[x] DSolve[eqn,y,x] 求解微分方程函数y DSolve[{eqn1,eqn2,…},{y1,y2,….},x] 求解微分方程组 1. 用Dsolve求解微分方程y[x] In[1]:=DSolve[y ?[x]==2y[x],y[x],x] 2 x Out[1]={{y[x]?e C[1]}} In[2]:=DSolve[y?[x]+ 2y[x]+1==0,y[x],x] 12 x -Out[2]={{y[x]?+e C[1]}} ,2 In[3]:=DSolve[y??[x]+ 2y ?[x]+ y[x]==0,y[x],x] x x --Out[3]={{y[x]?e C[1]+ e xC[2]}} 解y[x]仅适合其本身,并不适合于y[x]的其它形式,如y?[x],y[0]等,也就是说y[x]不是函数,例如我们如果 有如下操作,y ?[x],y[0]并没有发生变化: In[4]:=y[x]+y[0]+y?[x]/.% x x --Out[4]= {e C[1]+ e xC[2]+y[0]+y?[x]} 2. 解的纯函数形式 使用DSolve命令可以给出解的纯函数形式,即y,请分析下面的例子: In[5]:= DSolve[y ?[x]==2y[x],y,x] 2 x Out[5]={{y?Function[{x},e C[1]]}} In[6]:=DSolve[y?[x]+ 2y[x]+1==0,y,x] 12 x -Out[6]={{y?Function[{x},,+e C[1]]}} 2 In[7]:=DSolve[y??[x]+ 2y ?[x]+ y[x]==0,y,x] x x --Out[7]={{y?Function[{x},e C[1]+ e xC[2]]}} 这里y适合y的所有情况下面的例子可以说明这一点 In[8]:=y[x]+y?[x]+y[0]/.% 51 x -Out[8]= {C[1]+ e C[2]} 在标准数学表达式中,直接引入亚变量表示函数自变量,用此方法可以生成微分方程的解。如果需要的只是解 的符号形式,引入这样来变量很方便。然而,如果想在其他的的计算中使用该结果,那么最好使用不带亚变量的纯 函数形式的结果。 3. 求微分方程组 请分析下面的例子 In[9]:=DSolve[{y[x]==-z ?[x],z[x]==-y?[x]},{y[x],z[x]},x] 11 x x x x -2-2Out[9]={{z[x]?e (1+ e )C[1] -e (-1+e )C[2], 22 11 x x x x -2-2y[x] ?e (-1+ e )C[1]+e (1+e )C[2]}} ,22 当然微分方程组也有纯函数形式: In[10]:=DSolve[{y[x]==-z ?[x],z[x]==-y?[x]},{y,z},x] 11 x x x x -2-2Out[10]={{z?Function[{x},e (1+ e )C[1] -e (-1+e )C[2]], 22 11 x x x x -2-2y?Function[{x},e (-1+ e )C[1]+e (1+e )C[2]]}} ,22 4. 带初始条件的微分方程的解 当给定一个微分方程的初始条件可以确定一个待定系数。请看下面的例子 In[11]:=DSolve[{y?[x]== y[x],y[0]==5},y[x],x] xOut[11]={{y[x]?5e}} In[12]:=DSolve[{y??[x]== y[x],y?[0]==0},y[x],x] x x -2Out[12]={{y[x]?e (1+ e )C[2]}} 由于给出一个初始条件所以只能确定C[1] 5. 进一步讨论 对于简单的微分方程的解比较简单,对一些微分方程它的解就复杂的多。特别是对一些微分方程组或高阶微分 方程,不一定能得具体的解,其解中可能含有一些特殊函数。并且很多特殊函数的提出,就是为了解这些方程的, 如: In[13]:=DSolve[y?[x]-2x* y[x]==1,y[x],x] 221- x- xeOut[13]={{y[x]?C[1]+Erfi[x]}} ,e2 In[14]:=DSolve[y??[x]-x* y[x]==0,y[x],x] Out[14]={{y[x]?AiryAi[x]C[1]+AiryBi[x]C[2]}} In[15]:=DSolve[y??[x]-Exp[x]y[x]==0,y[x],x] xxOut[15]={{y[x]?BesselI[0,2]C[1]+ 2BesselK[0,2]C[2]}} ee 52 上面三个方程中分别使用了三种类型的函数,可以查看系统帮助了解他们的性质和含义。对于非线性微分方程,仅有一些特殊的情况可用标准数学函数得到解。Dsolve能够处理所有在标准数学手册有解的非线性微分方程。例如: In[16]:=DSolve[y?[x]-y[x]^2==0,y[x],x] 1Out[16]={{y[x]?}} -x+C[1] In[17]:=DSolve[y?[x]-y[x]^2==x,y[x],x] 1/ 3 1/ 3 1/ 3Out[17]={{y[x]? - ((-1) (AiryBiPrime[(-1) x]+AiryAiPrime[(-1) x]C[1])) 1/ 3 1/ 3/ ( AiryBi [(-1) x]+AiryAi [(-1) x]C[1])}} 可以看出第二个方程的解已经非常复杂。 6.2 微分方程的数值解 在Mathematica中用函数DSolve[]得到微分方程的准确解,用函数NDSolve得到微分方程的数值解,当然在此处要给出求解区间(x,xmin,xmax)。 NDSolve也是既能计算单个的微分方程,也能计算联立微分方程组。它能对大多数的常微分方程和部分偏微分方程求解。在常微分可能有一些未知函数y,但这些未知函数都依赖于一个单变量x。 i NDSolve[{eqn1,eqn2,…},y,{x,xmin,xmax}] 求函数y的数值解,x属于[xmin,xmax] NDSolve[{eqnl,eqn2,…},{y,y,…}{x,xmin,xmax}] 求多个函数y的数值解 12i NDSolve以InterpolatingFunction 目标生成函数y的解,InterpolatingFunction目标提供在独立变量x的xmini 到xmax范围内求解的近似值。NDSolve用迭代法求解,它以某一个x值开始,尽可能覆盖从xmin到xmax的全区间。 为使迭代开始,NDSolve指定y及其导数为初始条件。初始条件给定某定点x处的y[x]及尽可能的导数y? [x],i i i一般情况下,初始条件可在任意x处,NDSolve将以此为起点自动覆盖xmin到xmax的全区域。下面对初始条件y[0]=0和y[1]=0分别求出x从0到1的范围内y?[x]=y[x]的解。 In[1]:=NDSolve[{y?[x]==y[x],y[0]==0},y,{x,0,1}] Out[1]={{y?InterpolatingFunction[{{0.,1.}},<>]}} In[2]:=NDSolve[{y?[x]==y[x],y[1]==0},y,{x,0,1}] Out[2]={{y?InterpolatingFunction[{{0.,1.}},<>]}} 再看下面的微分方程的数值解 In[3]:=NDSolve[{y?[x]==y[x]^3,y[0]==1},y,{x,0,1}] NDSolve::ndsz: At x==0.49999975898557525`,step size is effectively zero;singularity or stiff system suspected . Out[3] ={{y?InterpolatingFunction[{{0.,0.5}},<>]}} 53 使用Mathematica也可以很容易的得到解的图形。这儿给出如何观察微商的逆函数的近似值图形。我们使用命令Evaluate代替InterpolatingFunction能够节省时间。例如: In[4]:=s1=NDSolve[{y?[x]==1/(2*y[x]),y[.01]==0.1},y,{x,.01,1}] Out[4]= ={{y?InterpolatingFunction[{{0.01,1.}},<>]}} In[5]:=Plot[Evaluate[y[x]/.s1],{x,.01,1}] 1 0.8 0.6 0.4 0.2 0.20.40.60.81 Out[5]= -Graphics- 第7章 Mathematica程序设计 7.1 模块和块中的变量 前面我们学习了有关Mathematica的各种基本运算及操作,为了使Mathematica更有效的工作,我们可对Mathematica进行模块化运算。在模块内部通过编写一系列表达式语句,使其实现一定的功能。在Mathematica内部也提供了很多程序包,我们将学习如何调用它们。 一般情况下,Mathematica假设所有变量都为全局变量。也就是说无论何时你使用一个你定义的变量,Mathematica都假设你指的是同一个目标。然而在编制程序时,你则不会想把所有的变量当作全局变量,因为如果这样程序可能就不具有通用性,你也可能在调用程序时陷入混乱状态。给出定义模块或块和局部变量的常用形式: Module[{x,y,...},body] 具有局部变量x,y…的模块 Module[{x=x0,y=y0,…},body] 具有初始值的局部变量的模块 lhs:=Module[vars,rhs/:cond] rhs和cond共享局部变量 Block[{x,y,... },body] 运用局部值x,y, …计算body Block[{x=x0,y=y0,…},bddy] 给x,y,..赋初始值 Mathematica中的模块工作很简单,每当使用模块时,就产生一个新的符号来表示它的每一个局部变量。产生的新符号具有唯一的名字,互不冲突,有效的保护了模块内外的每个变量的作用范围。首先我们来看Module函数,这个函数的第一部分参数,里说明的变量只在Module内起作用,body执行体,包含合法的Mathematica语句,多个语句之间可用“;”分割下面定义有初值的变量t,Mathematica默认它为全局变量: In[1]:=t=l0 54 Out[1]=10 模块中的t为局部变量,因此它独立于全局变量t In[2]:=Module[{t},t=8;Print[t]] 8 全局变量t的值仍为10 In[3]=t=l0 Out[3]=10 下面定义函数中的中间变量t为局部变量并调用f In[4]:=f[v_]:=Module[{t},t=(1+v)^2;Expand[t]] In[5]:=f[a] 2Out[5]=1+2a+a 全局变量t的值仍为10 ln[6]:=t=10 Out[6]=10 我们可以对模块中的任意局部变量进行初始化,这些初始值总是在模块执行前就被计算出来。下面给局部变量t赋初值u调用函数g: In[7]:=g[u_]:=Module[{t=u},t=t+t/(1+u)] In[8]:=g[a+b] a+bOut[8]=a+b+ 1+a+b Mathematica中的模块允许你把某变量名看作局部变量名。然而又存在有时你又希望它们为全局变量时但变量值为局部的矛盾,这时我们可以用Block[]函数。下面是一个含有全局变量x表达式,使用x的局部值计算上面的表达式: In[9]:=x^2+1 2 Out[9]=1+x In[10]:=Block[{x=a+1},%] 2 Out[10]=1+(1+a) In[11]:=x Out[11]=x 在Mathematica中编制程序时,必须使程序中的各个部分尽可能的独立,这样程序才便于读懂、维护和修改。确保程序各部分不相干的主要方法是设置具有一定作用域的变量。在Mathematica中有两种限制变量作用域的基本方法:模块(Module)和块(Block)。我们在书写实际程序中,模块比块更具普遍性。然而在交互式计算中需要定义作用域时,块更实用。 55 Module[vars,body]所要做的是把执行模块时表达式body的形式看成Mathematica程序的“代码”。然而当“代码”中直接出现变量vars时,这些vars都将被看作局部的。Block[vars,body]并不查看表达式body的形式,而在整个计算Body的过程中,实用vars的局部值。 下例中我们根据i定义m: In[12]:=m=i^2 2Out[12]= i 在计算i+m的整个过程中使用块中i的局部值: In[13]:=Block[{i = a},i+m] 2Out[13]=a+a 而对于下面的例子,只有直接出现在i+m中的i,才被看作局部变量: In[14]:=Module[{i=a},i+m] 2Out[14]=a+i 7.2 条件结构 我们在用计算机语言进行编程时,常用到条件语句。在Mathematica中也提供了多种设置条件的方法,并规定只有在该条件满足时才计算表达式。 下面条件结构的常用形式: lhs:=rhsl/;test 当test为真时使用定义 If[test,then,else] 如test为真计算then,反之计算else which[test1,value1,test2,...] 依次计算testi,给出对应的第一个为真的值 Switch[expr,forml,value1,form2,...] expr与每一个formi相比较,给出第一个相匹配的值 Switch[expr,form1, value1,form2,…,def] 用def为系统默认值 1. If命令 下面的test为真,故返回第一表达式的值: In[1]:=If [1>0,1+2,2+3] Out[1]=3 用Mathematica编程时,不可避免的要在单个或多个定义之间进行选择。单个定义的右边包含多个由If函数控制的分支,多个定义是用/;condition来表示的。运用多个定义进行编程你常能得到结构很好的程序。下面定义了一个阶跃函数,即当x>0时值为1,反之值为 -1: In[2]:=If[x>0,1,-1] Out[2]=If[x>0,1,-1] 下面运用/;condition形式分别定义阶跃函数的正数和负数部分: 56 In[3]:=g[x_]:=1/;x>0 In[4]:=g[x_]:= -1/;x<0 用“?”显示用/;condition定义的函数g的完整信息: In[5]:=?g Global`g g[x_]:=1/;x>0 g[x_]:=-1/;x<0 求函数g(x)在-2和5的值: In[6]:=g[-2] Out[6]= -1 In[7]:=g[5] Out[7]=1 我们用函数If时,还可以用if(test,expr)结构,即当test真时,计算表达式expr,表达式expr的值就是整个 If结构的值,反之返回空值。 2. Which命令 对于一般情况函数If提供一个两者择一的方法。然而,有时条件多于两个,在这种情况下可用If函数的嵌套方 式来处理,但在这种情况下使用Whitch或Switch函数将更合适。下面用Which定义具有三个条件的函数,调用这 个函数: In[8]:=h[x_]:=Which[x>0,1,x==0,0,x<0,-1] In[9]:={h[0],h[3],h[-3]} Out[9]={0,1,-1} 用Switch定义一个与模的余数有关的函数: In[10]:=q[x_]:=Switch[Mod[x,3],0,a,1,b,2,c] In[11]:=q[17] Out[11]=c 因为Mod[17,3]=2,因此运用了Switch中的第三种情况。 3. 符号条件 在Mathemahca中,有一种可能的情况就是你给出的条件结果既不是真也不为假。下面测试的结果既不是真也 不是假,因此If的两个分支保持不变: ln[1]:=If[x==y,a,b] Out[1]=If[x==y,a,b] 你可以给If加上第三个条件结果,这允许你测试的结果既不是真也不是假的情况下使用它: 57 ln[2]:=If[x==y,a,b,c] Out[2]=c 下面给出处理符号条件的函数。因x=x,故Mathematica给出结果为真。 但Mathematica在下面情况下以符号等式输出: ln[4]:=x==y Out[4]:=x==y 除非表达式能得出真,否则都被假设为假: ln[5]:=TrueQ[x==x] Out[5]=True ln[6]:=TrueQ[x==y] Out[6]=False 我们用“===”可直接测试两个表达式的等同性: In[7]:x===y Out[7]:=False 一般情况下,“===”返回值为真(True)或假(False),而“==”为符号形式输出,表示一个符号等式。在特殊情况下 可用“===”测试一个表达式的结构,而用“==”测试数学上的等同性。下例用“===”来测试表达式的结构: In[8]:=(1+x)^2===(1+x)(x+1) Out[8]=True In[9]:=(1+x)^2===1+2*x+x^2 Out[9]=False In[10]:=Tan[x]===Sin[x]/Cos[x] Out[10]=True 在建立条件时,你常需要运用组合条件,如testl&&test2&&…。对于这些组合条件,如果其中有一个为假,则 最后结果为假。Mathematica依次对test进行计算,直到其中有一个为假为止。 4. 逻辑表达式的运算形式 逻辑表达式: expr1&&expr2&&expr3 计算expri直到其中有一个为假为止 exprl||expr2||expr3 计算expri直到其中有一个为真为止 下面的函数包括两个组合条件: In[l1]:=t[x_]:=(x!=0&&1/x<3) 对这两个测试条件进行计算: ln[12]:={t[0],t[-3],t[1],t[1/5]} 58 Out[12]={False,True,True,False} Mathematica处理逻辑表达式的方法允许你组合一系列的测试条件,且只有当前面条件满足时才处理后面的条 件。 7.3 循环结构 Mathematica程序的执行包括对一系列Mathematica表达式的计算。对简单程序,表达式的计算可用分号“;” 来隔开,然后一个接一个地进行计算。然而,有时你需要对同一表达式进行多次计算,即循环计算。 1. Do循环结构 简单地Do循环结构形式: Do[expr,{i,imax}] 循环计算expr,以步长1,i从1增加到imax Do[expr,{i,imin,imax,di}] 循环计算expr,以步长di,i从imin增加到imax Do[expr,{n}] 循环计算expr n次 计算Print[i+i^2],i从1增加到3: In[1]:=Do[Print[i+i^2],{i,1,3}] 2 6 12 Do中的定义的循环方式与函数Table和Sum中的定义一样。在函数Do中,你同样能建立重循环。下面给出 的i从1到4进行循环,而对于每个i,j又从1到i-1进行循环: In[2]:=Do[Print[{i,j}],{i,1,4},{j,1,i-1}] 两个{}中的初值1可以省略 {2,1} {3,1} {3,2} {4,1} {4,2} {4,3} 我们还可把一个过程放入Do函数中: In[3]:=t=67;Do[Print[t];t=Floor[t/2],{3}] 67 33 16 59 2. While与For结构 在Mathematica程序中,Do是以结构方式进行循环的,然而有时你需要生成非结构循环。此时,运用函数While 和For是合适的。下面是While和For函数的循环结构形式: While[test,body] 只要test为真,就重复计算body For[start,test,incr,body] 以start为起始值,重复计算body和incr,直到test为假为止 当条件满足时,While循环一直进行,因此,为了防止死循环,在While 中应包括命令能改变test的值。 In[4]:=n=25;While[(n=Floor[n/3])!=0,Print[n]] 8 2 下面给出For循环的例子,i++表示i的值加1(在本节的最后我们给出在编程时常会用到的赋值方法): In[5]:=For[i=1,i<4,i++,Print[i]] 1 2 3 下面再给出一个较复杂的For循环的例子,一旦i^220时,Break[]就引起循环体的中断: In[1]:=t=1;Do[t*=k;Print[t];If[t>20,Break[]],{k,10}] 1 2 6 24 当k<3时,Continue[]继续执行循环: In[2]:=t=1;Do[t*=k;Print[t];If[t<3,Continue[]],t+=2,{k,5}] 1 2 6 32 170 下面给出Return的一个例子: In[3]:=f[x_]:=(If[x>5,Return[big]];t=x^3;Return[t-7]) In[4]:=f[10] Out[4]=big In[5]:=f[4] Out[5]=57 Return[]允许你退出一函数,并返回一个值。Mathematica可以进行局部返回,这可允许你退出一列迭代函数。 非局部返回在错误处理时是很有用的。下面给出的例子中如函数变量小于0则输出error。 In[6]:=h[x_]:=If[x<0,Throw[error],Sqrt[x]] In[7]:=Catch[h[6]] 6Out[7]= In[8]:=Catch[h[-6]] Out[8]=error X=6时不产生error,且出示Catch的结果, 当变量小于0时输出error。 62 第8章 Mathematica中的常用函数 8.1 运算符及特殊符号 Linel 执行Line,不显示结果 Line2,并显示结果 Linel,line2 顺次执行Line1,?name 关于系统变量name的信息 ??name 关于系统变量name的全部信息 !command 执行Dos命令 N! N的阶乘 !!filename 显示文件内容 <>filename 打开文件写 Expr>>>filename 打开文件从文件末写 ( ) 结合率 [ ] 函数 { } 一个表 <*MathFun*> 在c语言中使用math的函数 (*Note*) 程序的注释 #n 第n今参数 ## 所有参数 Rule& 把rule作用于后面的式子 % 前一次的输出 %% 倒数第二次的输出 Var::mote 变量var的注释 “Astring” 字符串 Context 上下文 A+b 加 a-b 减 A*b或ab 乘 A/b 除 8.2 系统常量 Pi 3.1415的无限精度数值 63 E 2.17828的无限精度数值 Catalan 0(915966Catalan常数 EulerGamma 0(5772Euler常数 Khinchin 2(68545Khinchin Glaisher 0(915966Glaisher GoldenRatio 1(61803黄金分割数 Degree π/l80角度弧度换算 I 复数单位 Infinity 无穷大 -Infinity 负无穷大 Complexlnfinity 复无穷大 Indeterminate 不定式 8.3 代数计算 Expand[expr] 展开表达式 Factor[expr] 展开表达式 Simplify[expr] 化简表达式 FullSimplify[expr] 将特殊函数也进行化简 PowerExpand[expr] 展开所有的幂次形式 ComplexExpand[expr,{x1,x2…}] 按复数实部虚部展开 FunctionExpand[expr] 化简表达式中的特殊函数 Collect[expr,x] 合并同次项 Collect[expr,{x1,x2,…}] 合并x1,x2,...的同次项 Together[expr] 通分 Apart[expr] 部分分式展开 Apart[expr,var] 对var的部分分式展开 Cancel[expr] 约分 ExpandAll[expr] 展开表达式 ExpandAll[expr,patt] 展开表达式 FactorTermsrpoly] 提出共有的数字因子 FactorTerms[poly,x] 提出与x无关的数字因子 FactorTerms[poly,(x1,x2…)] 提出与xi无关的数字因子 64 Coefficient[expr,form] 多项式expr中form的系数 Coefficient[expr,form,n] 多项式expr中form^n的系数 Exponent[expr,form] 表达式expr中form的最高指数 Numerator[expr] 表达式expr的分子 Denominator[expr] 表达式expr的分母 ExpandNumerator[expr] 展开expr的分子部分 8.4 解方程 Solve[eqns,vats] 从方程组eqns中解出Vats Solve[eqns,vats,elims] 从方程组eqns中削去变量elims,解出vats DSolve[eqn,y,x] 解微分方程,其中、y是x的函数 DSolve[{eqnl,eqn2,…},{y1,y2…},] 解微分方程组,其中yi是x的函数 DSolve[eqn,y,{x1,x2…}] 解偏微分方程 Eliminate[eqns,Vats] 把方程组eqns中变量vars约去 SolveAlways[eqns,vars] 给出等式成立的所有参数满足的条件 Reduce[eqns,Vats] 化简并给出所有可能解的条件 LogicalExpand[expr] 用&&和,,将逻辑表达式展开 InverseFunction[f] 求函数f的反函数 Root[f,k] 求多项式函数的第k个根 Roots[1hs==rhs,var] 得到多项式方程的所有根 8.5 微积分 D[f,x] 求f[x]的微分 D[f,{x,n}] 求f[x]的n阶微分 D[f,x1,x2…] 求f[x]x1,x2…偏微分 Dt[f,x] 求f[x]的全微分df/dx Dt(f) 求f[x]的全微分df Dt[f,{x,n}] n阶全微分d^nf/dx^n Dt[f,x1,x2..] 对x1,x2..的偏微分 Integrate[f,x] f[x]对x在的不定积分 Integrate[f,{x,xmin,xmax}] f[x]对x在区间(xmin,xmax)的定积分 Integrate[f,{x,xmin,xmax},{y,ymin,ymax}] f[x,y]的二重积分 65 Limit[expr,x->x0] x趋近于x0时expr的极限 Residue[expr,{x,x0}] expr在x0处的留数 Series[f,{x,x0,n}] 给出f[x]在x0处的幂级数展开 Series[f,{x,x0,nx},{y,y0,ny}] 先对y幂级数展开,再对x幂级数展开 Normal[expr] 化简并给出最常见的表达式 SeriesCoefficient[series,n] 给出级数中第n次项的系数 SeriesCoefficient[series,{n1,n2…}] 一阶导数 InverseSeries[s,x] 给出逆函数的级数 ComposeSeries[seriel,serie2…] 给出两个基数的组合 SeriesData[x,x0,{a0,a1,..},nmin,nmax,den] 表示一个x0处x的幂级数 O[x]^n n阶小量x^n 8.6 多项式函数 Variables[poly] 给出多项式poly中独立变量的列表 CoefficientList[poly,var] 给出多项式poly中变量var的系数 CoefficientList[poly,{varl,var2…}] 给出多项式poly中变量var(i)的系数列 PolynomialMod[poly,m] poly中各系数mod m同余后得到的多项式,m可为整式 PolynomialQuotient[p,q,x] 以x为自变量的两个多项式之商式p/ PolynomialRemainder[p,q,x] 以x为自变量的两个多项式之余式 P01ynomialGCD[polyl,poly2,...] poly(i)的最大公因式 PolynomialLCM[polyl,poly2((((] poly(i)的最小公倍式 PolynomialReduce[pjoly,{polyl,Poly2,..},{xl,x2…}) 得到一个表I(a1,a2,?),b)其中Sumld*polyi]+b=poly Resultant[polyl,poly2,var] 约去polyl,poly2中的var Factor[poly] 因式分解(在整式范围内) FactorTerms[poly] 提出poly中的数字公因子 FactorTerms[poly,{x1,x2…}] 提出poly中与xi无关项的数字公因子 FactorList[poly],FactorSquareFreeList[poly],FactorTermsList[poly,{x1,x2…}] 给出各个因式列表 Cyclotomic[n,x] n阶柱函数 Decomposet[poly,x] 迭代分解,给出{p1,p2,...},其中P1(p2(…))=poly InterpolafinSPolynomial[data,Var] 在数据data上的插值多项式 RootSum[f,form] 得到f[x]=0的所有根,并求得Sum[form[xi]] 66 8.7 随机函数 Random[type,range] 产生type类型且在range范围内的均匀分布随机数 Random[] 0-1上的随机实数 SeedRandom[n] 以n为seed产生伪随机数 Random[distribution] 可以产生各种分布 8.8 数值函数 N[expr] 表达式的机器精度近似值 N[expr,n] 表达式的n位近似值,n为任意正整数 NSolve[1hs==rhs,val] 求方程数值解 Nsolve[eqn,Var, n] 求方程数值解,结果精度到n位 NDSolve[eqns,y,{x,xmin,xmax}] 微分方程数值解 NDSolve[eqns,{y1,y2,…},{x,xmin,xmax}] 微分方程组数值解 FindRoot[1hs==rhs,{x,x0}] 以x0为初值,寻找方程数值解 FindRoot[1hs==rhs,{x,xstart,xmin,xmax}] 以xstart为初值,在[xmin,xmax]范围内寻找方程数值解 NSum[f,{imin,imax,di}] 数值求和,di为步长 NSum[f,{imin,imax,di},{jmin,jmax,dj},..] 多维函数求和 NProduct[f,{i,imin,imax,di}] 函数求积 NIntegrate[f,{x,xmin,xmax}] 函数数值积分 FindMinimum[f,{x,x0}] 以x0为初值,寻找函数最小值 FindMinimum[f,{x,xstart,xmin,xmax}] 以xstart为初值,在[xmin,xmax]范围内寻找函数最小值 ConstrainedMin[f,{inequ},{x,y,..}] inequ为线性不等式组,f为x,y,…之线性函数,得到最小值及此时的x,y,…取值 ConstrainedMax[f,{inequ},{x,y,..}] inequ为线性不等式组,f为x,y,…之线性函数,得到最大值及此时的x,y,…取值 LinearProgramming[C,m,b] 解线性组合C*x在m*x>=b&&x>=0约束下的最小值,x,b,C 为向量,m为矩阵 LatticeReduce[{v1,v2...}] 向量组Vi的极小无关组 Fit[data,funs,vats] 用指定函数组对数据进行最小二乘拟合 Interpolation[data] 对数据进行插值 Lisfinterpolation[array] 对离散数据插值,array可为n维 ListInterpolafion[array,{{xmin,xmax},{min,ymax},..}] 在特定网格上进行插值 67 FunctionInterpolation[expr,{x,xmin,xmax},{y,ymin,ymax},..] 以对应expr[xi,yi]的数值为数据进行插值 Fourier[list] 对复数数据进行傅氏变换 InverseFourier[list] 对复数数据进行傅氏逆变换 8.9 表的操作 (1)制表函数 {e1,e2,...} 一个表,元素可以为任意表达式,无穷嵌套 Table[expr,{imax}] 生成一个表,共imax个元素 Table[expr,{i,imax}] 生成一个表,共imax个元素expr间 Table[expr,{i,imin,imax},{j,jmin,jmax},..] 多维表 Range[imax] 简单数表(1,i+,imax) Range[imin,imax,di] 从imin到imax,以di为步长的数表 Array[f,n] 一维表,元素为f…(i从1到n) Array[f,{n1,n2..}] 多维表,元素为f (各自从1到ni) IdentityMatrix[n] n阶单位阵 DiagonalMatrix[list] 对角阵 (2)元素操作 Part[expr,i]或expr[[i]] 第i个元素 expr[[-i]] 倒数第i个元素 expr[{i,j,..}] 多维表的元素 expr[{i1,i2,..}] 返回由第i(n)的元素组成的子表 First[expr] 第一个元素 Last[expr] 最后一个元素 Head[expr] 函数头,等于expr[[0]] Extract[expr,list] 取出由表list指定位置上expr的元素值 Take[list,n] 取出表list前n个元素组成的表 Take[list,{m,n}] 取出表list从m到n的元素组成的表 Drop[list,n] 去掉表list前n个元素组下的表 Rest[expr] 去掉表list第一个元素剩下的表 Select[USt,crit] 把crit作用到每一个list的元素上,为True的所有元素组成的表 Length[expr] expr第一层元素的个数 Dimensions[expr] 表的维数返回(n1,n2..),expr为一个nl*n2…的阵 68 TensorRank[expr] 秩 Depth[expr] expr最大深度 Level[expr,n] 给出expr中第n层子表达式的列表 Count[USt,paUem] 满足模式的list中元素的个数 MembefQ[1ist,form] list中是否有匹配form的元素 FreeQ[expr,form] MemberQ的反函数 FreeQ[expr,form] 表中匹配模式pattern的元素的位置列表 pattem] 匹配模式pattem的所有元素ei的表 Cases[{e1,e2…}, (3) 表的操作 Append[exp[elem] 返回在表expr的最后追加elem元素后的表 Prepend[expr,elem] 返回在表expr的最前添加elem元素后的表 Insert[1ist,elem,n] 在第n元素前插入elem lnsert[expr,elem,{i,j,...}] 在元素expr[[{i,j,..}]]前插入elem Delete[expr,{i,j,..}] 删除元素expr[[{i,j,..}]]后剩下的表 DeleteCases[expr,pattem] 删除匹配pattern的所有元素后剩下的表 ReplacePart[expr,new,n] 将expr的第n元素替换为new Sort[list] 返回list按顺序排列的表 Reverse[expr] 把表expr倒过来 RotateLeft[expr,n] 把表expr循环左移n次 RotateRight[expr,n] 把表expr循环右移n次 Partition[list,n] 把list按每n个元素为一个子表分割后再组成的大表 Flatten[1ist] 抹平所有子表后得到的一维大表 Flatten[1ist,n] 抹平到第n层 Split[1ist] 把相同的元素组成一个子表,再合成的大表 8.10 绘图函数 (1)二维绘图 Plot[f,{x,xmin,xmax}] 一维函数f[x]在区间[xmin,xmax]上的函数曲线 Plot[{fl,f2..},{x,xmin,xmax}] 在同一图形上画几条曲线 ListPlot[{y1,y2,..}] 绘出由离散点对(n,yn)组成的图 ListPlot[{{x1,y1},{x2,y2},…}] 绘出由离散点对(xn,ynl)组成的图 ParametricPlot[{fx,fy},{t,tmin,tmax}] 由参数方程在参数变化范围内产生的曲线 69 ParametricPlot[{{fx,fy},{gx,gy},...},{t,tmin,truax}] 由参数方程组在参数变化范围内产生的曲线 (2)二维设置 PlotRange->{0,1} 作图显示的值域范围 AspectRatio->1/GoldenRatio 生成图形的纵横比 PlotLabel->label 标题文字 Axes->{false,True} 分别制定是否画x,y轴 AxesLabel->{xlabel,ylabel} x,y轴上的说明文字 Ticks->None,Automatic,fun 用什么方式画轴的刻度 AxesOrigin->{x,y} 坐标轴原点位置 AxesStyle->{{xstyle},{ystyle}} 设置轴线的线性颜色等属性 Frame->True,False 是否画边框 FrameLabel->{xmlabel,ymlabel,xplabel,yplabel} 边框四边上的文字 FrameTicks 同Ticks 边框上是否画刻度 GridLines 同Ticks 图上是否画栅格线 Framestyle->{{xmstyle},{ymstyle}} 设置边框线的线性颜色等属性 ListPlot[data,PlotJoined->True] 把离散点按顺序连线 Plotsytle->{{style1},{style2},..} 曲线的线性颜色等属性 PlotPoints->15 曲线取样点,越大越细致 (3)三维绘图 Plot3D[f,{x,xmin,xmax},{y,ymin,ymax}] 二维函数flx,y]的空间曲面 Plot3D[{f,s},{x,xmin,xmax},{y,ymin,ymax}] 同上,曲面的染色由s(x,y)值决定 ListPlot3D[array] 二维数据阵array的立体高度图 ListPlot3D[array,shades] 同上,曲面的染色由shades[数据]值决定 ParametricPlot3D[{fx,fy,fz},{t,tmin,tmax}] 三维参数图形 ContourPlot[f,{x,xmin,xmax},{y,ymin,ymax}] 二维函数f(x,y)在指定区间上的等高线图 ListContourPlot[array] 二维函数f(x,y)在指定array上的等高线图 (4)三维设置 Contours->n 画n条等高线 Contours->{z1,z2,...} 在zi处画等高线 ContourShading->False 是否用深浅染色 ContourLines->True 是否画等高线 ContourStyle->{{stylel},{style2},..} 等高线线性颜色等属性 70 (5)密度图 DensityPlot[f,{x,xmin,xmax},{y,ymin,ymax}] 二维函数f[x,y]在指定区间上的密度图 ListDensityPlot[array] 二维函数f[x,y]在指定array上的密度图 (6)图形显示 Show[graphics,options] 显示一组图形对象,options为选项设置 Show[g1,g2,…] 在一个图上叠加显示一组图形对象 GraphicsArray[{g1,g2,...}] 在一个图上分块显示一组图形对象 SelectionAnimate[notebook,t] 把选中的notebook中的图画循环放映 (7)图元函数 Graphics[prim,options] prim为下面各种函数组成的表,表示一个二维图形对象 Graphics3D[prim,options] prim为下面各种函数组成的表,表示一个三维图形对象 SurfaceGraphics[array,shades] 表示一个由array和shade决定的曲面对象 ContourGraphics[array] 表示一个由array决定的等高线图对象 DensityGraphics[array] 表示一个由array决定的密度图对象 Point[p] p={x,y}或{x,y,2},在指定位置画点 Line[{p1,p2,..}] 经由Pi点连线 Rectangle[{xmin,ymin},{xmax,ymax}] 画矩形 Cuboid[{xmin,ymin,zmin},{xmax,ymax,zmax}] 由对角线指定的长方体 Polygon[{p1,p2,...}] 封闭多边形 Circle[{x,y},r] 画圆 Circle[{x,y},{rx,ry}] 画椭圆,rx,ry为半长短轴 Circle[{x,y},r,{a1,a2}] 从角度al-a2的圆弧 Disk[{x,y},r] 填充的园、椭圆、圆弧等参数同上 Raster[array,ColorFunction->f] 颜色栅格 Text[expr,coords] 在坐标coords上输出表达式 PostScrip["string"] 直接用Postscript图元语言写 Scaled[{x,y...}] 返回点的坐标,且均大于0小于1 (8)着色及其他 GrayLevel[level] 灰度level为0~1间的实数 RGBColor[red,green,blue] RGB颜色,均为0~I间的实数 Hue[h,s,b] 亮度,饱和度等,均为0~1间的实数 71 CMYKColor[cyan,magenta,yellow,block] CMYK颜色 Thicknessr[r] 设置线宽为r PointSize[d] 设置绘点的大小 Dashing[{r1,r2,...}] 画一个单元的间隔长度的虚线 ImageSize->{x,y} 显示图形大小(单位为像素) 8.11 流程控制 If[condition,t,f] 如果condition为True,执行t,否则执行f段 if[condition,t,f,u] 如果condition为Tme,执行t,为False执行f,既非True 又非False,则执行u段 Which[test1,blockl,test2,block2..] 执行第一为True的tesfi对应的blocki Switch[expr,forml,blockl,form2,block2...] 重复执行expr imax次 Do[expr,{imax}] 重复执行expr imax次 Do[expr,{i,imin,imax},{j,jmin,jmax}] 多重循环 While[test,body] 循环执行body直到test为False For[start,test,incr,body] 循环执行body直到test为False Throw[value] 停止计算,把value返回给最近一个Catch处理 Throw[value,tag] 停止计算,把value返回给最近一个Catch处理 Catch[expr] 计算expr,遇到Throw返回的值则停止 Catch[expr,form] 当Throw[value,tag]中Tag匹配form时停止 Return[expr] 从函数返回,返回值为expr Return[] 返回值Null Breakl[] 结束最近的一重循环 Continuel[] 停止本次循环,进行下一次循环 Goto[tag] 无条件转向Label[Tag]处 Label[tag] 设置一个断点 Check[expr,fmlexpr] 计算expr,如果有出错信息产生,则返回failexpr的值 Check[expr,failexpr,s1::t1,s2::t2,...] 当特定信息产生时则返回failexpr CheckAbort[expr,failexpr] 当产生abort信息时返回failexpr Interrupt[] 中断运行 Abort[] 中断运行 TimeConstrained[expr,t] 计算expr,当耗时超过t秒时终止 72 MemoryConstrained[expr,b] 计算expr,当耗用内存超过b字节时终止运算 Print[exprl,expr2,...] 顺次输出expri的值 Input[] 产生一个输入对话框,返回所输入的任意表达式 Input["prompt"] 同上,prompt为对话框的提示 Pause[n] 运行暂停n秒 73
/
本文档为【mathematica教程11】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索