首页 Mathematica使用教程11547

Mathematica使用教程11547

举报
开通vip

Mathematica使用教程11547精品文档Mathematica教程【Mathematica简介】Mathematica软件是由沃尔夫勒姆研究公司(WolframResearchInc.)研发的。Mathematica1.0版发布于1988年6月23日。发布之后,在科学、技术、媒体等领域引起了一片轰动,被认为是一个革命性的进步。几个月后,Mathematica就在世界各地拥有了成千上万的用户。今天,Mathematica已经在世界各地拥有了数以百万计的忠实用户。Mathematica已经被工业和教育领域被广泛地采用。实际上,Mathematica负...

Mathematica使用教程11547
精品文档Mathematica教程【Mathematica简介】Mathematica软件是由沃尔夫勒姆研究公司(WolframResearchInc.)研发的。Mathematica1.0版发布于1988年6月23日。发布之后,在科学、技术、媒体等领域引起了一片轰动,被认为是一个革命性的进步。几个月后,Mathematica就在世界各地拥有了成千上万的用户。今天,Mathematica已经在世界各地拥有了数以百万计的忠实用户。Mathematica已经被工业和教育领域被广泛地采用。实际上,Mathematica负责将高级的数学和计算引入了传统上非技术的领域,极大的增加了科技软件的市场。一个包含应用、咨询、书籍、和课程软件的行业支持着国际化的Mathematica用户群,这个行业还在不断地膨胀。随着沃尔夫勒姆研究公司不断地扩大和Mathematica的使用被不断地扩展到不同的领域,将会看到Mathematica在全世界范围内对未来产品、重要研究发现、和教学的巨大影响。数学软件是现在科研工作者的必备的工具,个人比较喜欢用Mathematica,因为它是最接近数学语言的。Mathematica在15日发布,其最显著的变化是允许自由形式的英文输入,而不再需要严格按照Mathematica语法,这类似于Wolfram|Alpha搜索引擎。Mathematica8允许用户按照自己习惯的思考过程输入方程式或问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,最令人激动的部分是软件不是逐行执行命令,而是能理解上下文背景。1.EnteryourqueriesinplainEnglishusingnewfree-formlinguisticinput2.Accessmorethan10trillionsetsofcurated,up-to-date,andready-to-usedata3.Importallyourdatausingawiderarrayofimport/exportformats4.Usethebroadeststatisticsanddatavisualizationcapabilitiesonthemarket5.Choosefromafullsuiteofengineeringtools,suchaswaveletsandcontrolsystems6.Usemorepowerfulimageprocessingandanalysiscapabilities7.Createinteractivetoolsforrapidexplorationofyourideas8.DevelopfasterandmorepowerfulapplicationsWolframResearch的CEO和创立者斯蒂芬·沃尔夫勒姆表示:“传统上,让计算机执行任务必须使用计算机语言或者使用点击式界面:前者要求用户掌握它的语法;而后者则限制了可访问函数的范围。”“自由格式语言学能够理解人类的语言,并将其转化为具有特定语法结构的语言。这是产品适用性上的一个突破。Mathematica8是这种创新思想下的第一个产品,但是它已经能够大幅度提高用户的工作效率。”Mathematica简明教程第1章Mathematica概述1.1运行和启动:介绍如何启动Mathematica软件,如何输入并运行命令1.2表达式的输入:介绍如何使用表达式1.3帮助的使用:如何在mathematica中寻求帮助第2章Mathematica的基本量2.1数据类型和常量:mathematica中的数据类型和基本常量2.2变量:变量的定义,变量的替换,变量的清除等2.3函数:函数的概念,系统函数,自定义函数的方法2.4表:表的创建,表元素的操作,表的应用2.5表达式:表达式的操作2.6常用符号:经常使用的一些符号的意义第3章Mathematica的基本运算3.1多项式运算:多项的四则运算,多项式的化简等3.2方程求解:求解一般方程,条件方程,方程数值解以及方程组的求解3.3求积求和:求积与求和第4章函数作图4.1二维函数作图:一般函数的作图,参数方程的绘图4.2二维图形元素:点,线等图形元素的使用4.3图形样式:图形的样式,对图形进行设置4.4图形的重绘和组合:重新显示所绘图形,将多个图形组合在一起4.5三维图形的绘制:三维图形的绘制,三维参数方程的图形,三维图形的设置第5章微积分的基本操作5.1函数的极限:如何求函数的极限5.2导数与微分:如何求函数的导数,微分5.3定积分与不定积分:如何求函数的不定积分和定积分,以及数值积分5.4多变量函数的微分:如何求多元函数的偏导数,微分5.5多变量函数的积分:如何计算重积分5.6无穷级数:无穷级数的计算,敛散性的判断第6章微分方程的求解6.1微分方程的解:微分方程的求解6.2微分方程的数值解:如何求微分方程的数值解第7章Mathematica程序设计7.1模块:模块的概念和定义方法7.2条件结构:条件结构的使用和定义方法7.3循环结构:循环结构的使用7.4流程控制第8章Mathematica中的常用函数8.1运算符和一些特殊符号:常用的和不常用一些运算符号8.2系统常数:系统定义的一些常量及其意义8.3代数运算:表达式相关的一些运算函数8.4解方程:和方程求解有关的一些操作8.5微积分相关函数:关于求导,积分,泰勒展开等相关的函数8.6多项式函数:多项式的相关函数8.7随机函数:能产生随机数的函数函数8.8数值函数:和数值处理相关的函数,包括一些常用的数值算法8.9表相关函数:创建表,表元素的操作,表的操作函数8.10绘图函数:二维绘图,三维绘图,绘图设置,密度图,图元,着色,图形显示等函数8.11流程控制函数第1章Mathematica概述1.1Mathematica的启动和运行Mathematica是美国Wolfram研究公司生产的一种数学 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 型的软件,以符号计算见长,也具有高精度的数值计算功能和强大的图形功能。假设在Windows环境下已安装好Mathematica5.0,启动Windows后,在“开始”菜单的“程序”中单击,就启动了Mathematica5.0,在屏幕上显示如图1的Notebook窗口,系统暂时取名Untitled-1,直到用户保存时重新命名为止。图1输入1+1,然后按下Shif+Enter键,这时系统开始计算并输出计算结果,并给输入和输出附上次序标识In[1]和Out[1],注意In[1]是计算后才出现的;再输入第二个表达式,要求系统将一个二项式x5+y5展开,按Shift+Enter输出计算结果后,系统分别将其标识为In[2]和Out[2],如图2。图2在Mathematica的Notebook界面下,可以用这种交互方式完成各种运算,如函数作图,求极限、解方程等,也可以用它编写像C那样的结构化程序。在Mathematica系统中定义了许多功能强大的函数,我们称之为内建函数(built-infunction),直接调用这些函数可以取到事半功倍的效果。这些函数分为两类,一类是数学意义上的函数,如:绝对值函数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中,函数名和自变量之间的分隔符是用方括号“[]”,而不是一般数学书上用的圆括号“()”,初学者很容易犯这类错误。如果输入了不合语法规则的表达式,系统会显示出错信息,并且不给出计算结果,例如:要画正弦函数在区间[-10,10]上的图形,输入plot[Sin[x],{x,-10,10}],则系统提示“可能有拼写错误,新符号‘plot’很像已经存在的符号‘Plot’”,实际上,系统作图命令“Plot”第一个字母必须大写,一般地,系统内建函数首写字母都要大写。再输入Plot[Sin[x],{x,-10,10},系统又提示缺少右方括号,并且将不配对的括号用紫色显示,如图3。图3一个表达式只有准确无误,方能得出正确结果。学会看系统出错信息能帮助我们较快找出错误,提高工作效率。完成各种计算后,点击“文件”“退出”退出,如果文件未存盘,系统提示用户存盘,文件名以“.nb”作为后缀,称为Notebook文件。以后想使用本次保存的结果时可以通过“文件”“打开”菜单读入,也可以直接双击它,系统自动调用Mathematica将它打开。1.2表达式的输入Mathematica提供了多种输入数学表达式的方法。除了用键盘输入外,还可以使用工具样或者快捷方式健入运算符、矩阵或数学表达式。1.数学表达式二维格式的输入Mathematic担提供了两种格式的数学表达式。形如x/(2+3x)+y*(x-w)的称为一维格式,形如的称为二维格式。你可以使用快捷方式输入二维格式,也可用基本输入工具栏输入二维格式。下面列出了用快捷方式输入二维格式的方法:数学运算数学表达式按键分式xCtrl+/2n次方xnxCtrl+^n开2次方Ctrl+2x下标x2xCtrl+_2例如输入数学表达式,可以按如下顺序输入按键:(,x,+,1,),Ctrl+^,+,4,→,Ctrl+/,Ctrl+2,2,x,+,y另外也可从“文件”菜单中激活“控制面板”“BasicInput”工具栏,也可输入,并且使用工具栏可输入更复杂的数学表达式,如下图4。图4图52.特殊字符的输入MathemMatica还提供了用以输入各种特殊符号的工具栏。基本输入工具栏包含了常用的特殊字符(上图),只要单击这些字符按钮即可输入。若要输入其它的特殊字符或运算符号,必须使用从“文件”菜单中激活“控制面板”“CompleteCharacters”工具栏,如上图5,单击符号后即可输入。1.3Mathematica的联机帮助系统用Mathematica的过程中,常常需要了解一个命令的详细用法,或者想知系统中是否有完成某一计算的命令,联机帮助系统永远是最详细、最方便的资料库。1.获取函数和命令的帮助在Notebook界面下,用?或??可向系统查询运算符、函数和命令的定义和用法,获取简单而直接的帮助信息。例如,向系统查询作图函数Plot命令的用法?Plot系统将给出调用Plot的格式以及Plot命令的功能(如果用两个问号“??”,则信息会更详细一些)。?Plot*给出所有以Plot这四个字母开头的命令。2.Help菜单任何时候都可以通过按shift+F1键或点击“帮助”菜单项“帮助浏览”,调出帮助菜单,如图6所示。图6其中的各按钮用途如下:Built-inFunction内建函数,按数值计算、代数计算、图形和编程分类存放Add-ons&Links程序包附件和链接TheMathematicaBook一本完整的Mathematica使用手册GettingStarted/Demos初学者入门指南/多种演示Tour漫游MathematicFrontEnd菜单命令的快捷键,二维输入格式等MasterIndex按字母命令给出命令、函数和选项的索引表如果要查找Mathematica中具有某个功能的函数,可以通过帮助菜单中的Mahematica使用手册,通过其目录索引可以快速定位到自己要找的帮助信息。例如:需要查找Mathematica中有关解方程的命令,单击“TheMathematicaBook”按钮,再单击“Contents”,在目录中找到有关解方程的节次,点击相应的超链接,有关内容的详细说明就马上调出来了。如果知道具体的函数名,但不知其详细使用说明,可以在命令按钮Goto右边的文本框中键入函数名,按回车键后就显示有关函数的定义、例题和相关联的章节。例如,要查找函数Plot的用法,只要在文本框中键入Plot,按回车键后显示Plot函数的详细用法和例题的窗口,如图7。图7如果已经确知Mathematica中有具有某个功能的函数,但不知具体函数名,可以点击Built-inFunctions按钮,再按功能分类从粗到细一步一步找到具体的函数,例如,要找画一元函数图形的函数,点击Built-inFunctions→GraphicsandSound→2DPlots→Plot,找到Plot的帮助信息(如图7)。第2章Mathematica的基本量2.1数据类型和常数1.数值类型在Mathematic中,基本的数值类型有四种:整数、有理数、实数和复数。如果你的计算机的内存足够大,Mathemateic可以表示任意长度的精确实数,而不受所用的计算机字长的影响。整数与整数的计算结果仍是精确的整数或是有理数。例如2的100次方是一个31位的整数:ln[1]:=2^100Out[1]=1267650600228228229401496703205376在Mathematica中允许使用分数,也就是用有理数表示化简过的分数。当两个整数相除而又不能整除时,系统就用有理数来表示,即有理数是由两个整数的比来组成如:In[2]:=12345/5555Out[2]=实数是用浮点数表示的,Mathematica实数的有效位可取任意位数,是一种具有任意精确度的近似实数,当然在计算的时候也可以控制实数的精度。实数有两种表示方法:一种是小数,另外一种是用指数方法表示的。如:In[3]:=0.239998Out[3]=0.23998In[4]:=0.12*10^11Out[4]=0.12*10^11实数也可以与整数,有理数进行混合运算,结果还是一个实数。In[5]:=2+1/4+0.5Out[5]=2.75小数表示复数是由实部和虚部组成,实部和虚部可以用整数、实数、有理数表示。在Mathematica中,用I表示虚数单位如:In[6]:=3+0.7IOut[6]=3+0.7i2.不同类型数的转换在Mathematica的不同应用中,通常对数字的类型要求是不同的。例如在公式推导中的数字常用整数或有理数表示,而在数值计算中的数字常用实数表示。在一般情况下在输出行Out[n]中,系统根据输入行In[n]的数字类型对计算结果做出相应的处理。如果有一些特殊的要求,就要进行数据类型转换。在Mathematica中的提供以下几个函数达到转换的目的:N[x]将x转换成实数N[x,n]将x转换成近似实数,精度为nRationalize[x]给出x的有理数近似值Rationalize[x,dx]给出x的有理数近似值,误差小于dx举例:In[1]:=N[5/3,20]Out[1]=1.6666666666666666667In[2]:=N[%,10]%表示上一输出结果,即%=1.6666666666666666667。Out[2]=1.666666667第二个输出是把上面计算的结果变为10位精度的数字。In[3]:=Rationalize[%]Out[3]=3.数学常数Mathematica中定义了一些常见的数学常数,这些数学常数都是精确数。Pi表示π=3.14159⋯⋯E自然对数的底e=2.71828⋯⋯Degree1度,π/180弧度I虚数单位iInfinity无穷大∞-infinity负无穷大-∞GondenRatio黄金分割数0.61803数学常数可用在公式推导和数值计算中,在数值计算中表示精确值。如:In[1]:=Pi^2Out[1]=π2In[2]:=Pi^2//NOut[2]=9.86964.数的输出形式在数的输出中可以使用转换函数进行不同数据类型和精度的转换。另外对一些特殊要求的格式还可以使用如下的格式函数:NumberForm[expr,n]以n位精度的实数形式输出实数exprScientificFormat[expr]以科学记数法输出实数exprEngineergForm[expr]以工程记数法输出实数expr例如:In[1]:=N[Pi^30,30]Out[1]=8.21289330402749581586503585434×1014In[2]:=NumberForm[%,10]Out[2]//NumberForm=8.212893304×1014下面的函数输出按工程记数法表示的指数可被3整除的实数In[3]=EngineeringForm[%%]%%表示上两步的输出结果,即Out[1]Out[3]//EngineeringForm=821.289330402749581586503585434×10122.2变量1.变量的命名Mathematica中内部函数和命令都是以大写字母开始的标示符,为了不会与它们混淆,我们自定义的变量应该是以小写字母开始,后跟数字和字母的组合,长度不限。例如:a12,ast,aST都是合法的,而12a,z*a,ab(中间有空格)是非法的。另外在Mathematica中的变量是区分大小写的。在Mathematica中,变量不仅可以存放一个数值,还可以存放表达式或复杂的算式。2.给变量赋值在Mathmatica中用等号=为变量赋值。同一个变量可以表示一个数值,一个数组,一个表达式,甚至一个图形。如:In[1]:=x=3Out[1]=3In[2]:=x^2+2*xOut[2]=15In[3]:=x=%+1Out[3]=16对不同的变量可同时赋不同的值,例如:In[4]:={u,v,w}={1,2,3}Out[4]={1,2,3}In[5]:=2u+3v+wOut[5]=11对于已定义的变量,当你不再使用它是,为防止变量值的混淆,可以随时用=.清除它的值,如果变量本身也要清除用函数Clear[var],例如:In[6]:=u=.In[7]:=2u+v(上面已定义了u,v的值)Out[7]=2+2u3.变量的替换在给定一个表达式时其中的变量可能取不同的值,这是可用变量替换来计算表达式的不同值。方法为用expr/.x->xval,例如:In[1]:=f=x/2+1Out[1]=1+In[2]:=f/.x->1Out[2]=In[3]:=f/.x->2Out[3]=3如果表达式中有多个变量,也可同时替换,方法为:expr/.{x->xval,y->yval,...}In[4]:=(x+y)(x-y)^2/.{x->3,y->1-a}Out[4]=(4-a)(2+a)22.3函数1.系统函数在Mathmatic中定义了大量的数学函数可以直接调用,这些函数其名称一般表达了一定的意义,可以帮助我们理解。下面是几个常用的函数: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之一)Exp[x]指数函数exLog[x]自然对数函数lnxLog[b,x]以b为底的对数函数Sin[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的双阶程Mathematica中的函数与数学上的函数有些不同的地方,Mathematica中函数是一个具有独立功能的程序模块,可以直接被调用。同时每一函数也可以包括一个或多个参数,也可以没有参数。参数的的数据类型也比较复杂。更加详细的可以参看系统的帮助,了解各个函数的功能和使用方法是学习Mathematica软件的基础。2.函数的定义(1)函数的立即定义立即定义函数的语法如下f[x_]=expr函数名为f,自变量为x,expr是表达式。在执行时会把expr中的x都换为f的自变量x(不是x_)。函数的自变量具有局部性,只对所在的函数起作用。函数执行结束后也就没有了,不会改变其它全局定义的同名变量的值。请看下面的例子,定义函数f(x)=xsinx+x2,对定义的函数我们可以求函数值,也可绘制它的图形。In[1]:=f[x_]=x*Sin[x]+x^2Out[1]=x2+xSin[x]In[2]:=f[1]Out[2]=1+Sin[1]In[3]:=Plot[f[x],{x,-3,3}]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其他操作基本相同。那么延迟定义和即时定义的主要区别是什么?即时定义函数在输入函数后立即定义函数并存放在内存中并可直接调用。延时定义只是在调用函数时才真正定义函数。(4)使用条件运算符定义和If命令定义函数如果要定义如:这样的分段函数应该如何定义,显然要根据x的不同值给出不同的表达式。一种办法是使用条件运算符,基本格式为:f[x_]:=expr/;condition,当condition条件满足时才把expr赋给f(x)。下面定义方法,通过图形可以验证所定义函数的正确性。In[1]:=f[x_]:=x-1/;x>=0f[x_]:=x^2/;(x>-1)&&(x<0)f[x_]:=x-1/;x<=-1In[4]:=Plot[f[x],{x,-2,2}]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}]Out[6]=-Graphics-可以看出用If定义的函数g(x)和前面函数f(x)相同,这里使用了两个If嵌套,逻辑性比较强。关于其他的条件命令的进一步讨论请看后面的章节。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^%Out[2]={1+2x,1+2x+x2,1+3x+x3}下面是把Out[2]列表中的表达式对x求导:In[3]:=D[%,x]Out[3]={2,2+2x,3+3x2}In[4]:=%/.x->1Out[4]={2,4,6}如果表中的元素较多时,可以用建表函数进行建表:Table[f,{i,min,max,step}]以step为步长给出f的数值表,i由min变到maxTable[f,{min,max}]给出f的数值表,i由min变到max步长为1Table[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}]Out[2]={x2,x2,x2,x2}用Range函数生成一个序列数:In[3]:=Range[10]Out[3]={1,2,3,4,5,6,7,8,9,10}下面这个序列是以步长为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]:=%//TableFormOut[6]//TableForm=567789910112.表的元素的操作当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}对于表的操作Mathematica提供了丰富的函数,详细的可以查阅后面的附录或者系统帮助。2.5表达式1.表达式的含义Mathematica能处理数学公式,表以及图形等多种数据形式。尽管他们从形式上看起来不一样,但在Mathematica内部都被看成同种类型,即都把他们当作表达式的形式。Mathematica中的表达式是由常量、变量、函数、命令、运算符和括号等组成,它最典型的形式是f[x,y]。2.表达式的表示形式在显示表达式时,由于需要的不同,有时我们需要表达式的展开形式,有时又需要其因子乘积的形式。在我们计算过程中可能得到很复杂的表达式,这时我们又需要对它们进行化简。常用的处理这种情况的函数就是变换表达式表示形式函数。Expand[expr]按幂次升高的顺序展开表达式Factor[expr]以因子乘积的形式表示表达式Simplify[expr]进行最佳的代数运算,并给出表达式的最少项形式表达式(x+y)4(x+y2)展开:In[1]:=Expand[(x+y)^4*(x+y^2)]Out[1]=x5+4x4y+6x3y2+x4y2+4x2y3+4x3y3+xy4+6x2y4+4xy5+y6还原上面的表达式为因子乘积的形式:In[2]:=Factor[%]Out[2]=(x+y)4(x+y2)多项式表达式的项数较多,比较复杂,在显示时显得比较杂乱,而且在计算过程中没有必要知道全部的内容;或表达式的项很有规律,没有必要打印全部的表达式的结果,Mathematica提供了一些命令,可将它缩短输出或不输出。expr//Short或Short[expr]显示表达式的一行形式Short[expr,n]显示表达式的n行形式,命令后加一分号“;”不输出结果将表达式(1+x)30展开,并仅显示一行有代表项的式子:In[3]:=Expand[(1+x)^30]//ShortOut[3]=1+30x+435x2+4060x3+<<23>>+4060x27+435x28+30x29+x30将上式分成三行的形式展开:In[4]:=Short[Expand[(1+x)^30],3]Out[4]=1+30x+435x2+4060x3+27405x4+142506x5+<<19>>+142506x25+27405x26+4060x27+435x28+30x29+x30把代数表达式变换到你所需要的形式没有一种固定的模式,一般情况下,最好的办法是进行多次实验,尝试不同的变换并观察其结果,再挑出你满意的表示形式。3.关系表达式与逻辑表达式我们已经知道“=”表示给变量赋值。现在我们来学习一些其它的逻辑与关系算子。关系表达式是最简单的逻辑表达式,我们常用关系表达式表示一个判别条件。例如:x>0,y=0。关系表达式的一般形式是:表达式+关系算子+表达式。其中表达式可为数字表达式、字符表达式或意义更广泛的表达式,如一个图形表达式等。在我们实际运用中,这里的表达式常常是数字表达式或字符表达式。下面出Mathematica中的各种关系算子:x==y相等x!=y不相等x>y大于x>=y大于等于x<y小于x<=y小于等于x==y==z都相等x!=y!=z都不相等x>y>z严格递减x<y<z严格递增给变量x,y赋值,输出后一变量的值,如:In[1]:=x=2;y=9Out[1]=9In[2]:=x>yOut[2]=False下面是比较两个表达式的大小:In[3]:=3^2>y+1上面已设y=9Out[3]=False用一个关系式只能表示一个判定条件,要表示几个判定条件胡组合,必须用逻辑运算符将关系表达式组织在一起,我们称表示判定条件的表达式为逻辑表达式。下面是常用的逻辑运算和它们的意义:!非&&并||或Xor异或If条件LogicalExpand[expr]展开逻辑表达式例如下面的例子说明它们的应用:In[4]:=3*x^2<y+1&&3^2==y(前面已给x,y赋值,x=2,y=9)Out[4]=FalseIn[5]:=3*x^2<y+1||3^2==yOut[5]=True2.6常用的符号(term)圆括号用于组合运算f[x]方括号用于函数{}花括号用于列表[[i]]双括号用于排序%代表最后产生的结果%%倒数第二次的算结果%%%(k)倒数第k次的计算结果%n例出行Out[n]的结果(用时要小心)第3章Mathematica的基本运算3.1多项式的表示形式可认为多项式是表达式的一种特殊的形式,所以多项式的运算与表达式的运算基本一样,表达式中的各种输出形式也可用于多项式的输出。Mathematica提供一组按不同形式表示代数式的函数。Expand[ploy]按幂次展开多项式ployExpandAll[ploy]全部展开多项式ployFactor[ploy]对多项式poly进行因式分解FactorTerms[ploy,{x,y,⋯}]按变量x,y,⋯进行分解Simplify[poly]把多项式化为最简形式FullSimplify[ploy]把多项式化简Collect[poly,x]把多项式poly按x幂展开Collect[poly,{x,y…}]把多项式poly按x,y⋯.的幂次展开1.下面是一些例子(1)对x8-1进行分解In[1]:=Factor[x^8-1]Out[1]=(-1+x)(1+x)(1+x2)(1+x4)(2)展开多项式(1+x)5In[2]:=Expand[(1+x)^5]Out[2]=1+5x+10x2+10x3+5x4+x5(3)展开多项式(1+x+3y)4In[3]:=Expand[(1+x+3y)^4]Out[3]=1+4x+6x2+4x3+x4+12y+36xy+36x2y+12x3y+54y2+108xy2+54x2y2+108y3+108xy3+81y4(4)展开并化简(2+x)4(1+x)4(3+x)3In[4]:=Simplify[Expand[(2+x)^4(1+x)^4(3+x)^3]]Out[4]=(3+x)3(2+3x+x2)42.多项式的代数运算多项式的运算有加、减、乘、除运算:+,-,*,/下面通过例子说明。(1)多项式的加运算a2+3a+2与a+1相加(后面例子中也使用这两个多项式运算)In[5]:=(a^2+3*a+2)+(a+1)括号可以不要Out[5]=3+4a+a2或者In[5]:=p1=a^2+3*a+2;p2=a+1;p1+p2Out[5]=3+4a+a2(2)多项式相减In[6]:=(a^2+3*a+2)-(a+1)Out[6]=1+2a+a2或者In[6]:=p1-p2Out[6]=1+2a+a2(3)多项式相乘In[7]:=(a^2+3*a+2)*(a+1)Out[7]=(1+a)(2+3a+a2)或者In[7]:=p1*p2Out[7]=(1+a)(2+3a+a2)In[8]:=Expand[p1*p2]Out[8]=2+5a+4a2+a3(4)多项式相除In[9]:=(a^2+3*a+2)/(a+1)Out[9]=或者In[9]:=p1/p2Out[9]=(5)另外使用Cancel函数可以约去公因式In[10]:=Cancel[p1/p2]Out[10]=2+a两个多项式相除,总能写成一个多项式和一个有理式相加Mathematic中提供两个函数PolynomialQuotient和PolynomialRemainder分别返商式和余式。例如:In[11]:=PolynomialQuotient[x^2,1+2x,x]Out[11]=商的整式部分In[12]:=PolynomialRemainder[x^2,1+2x,x]Out[12]=商的余式部分3.2方程及其根的表示因为Mathematica把方程看作逻辑语句。在数学方程式表示为形如“x2-2x-3=0”的形式。在Mathematica中“=”用作赋值语句,这样在Mathematica中用“==”(两个等号中间没有空格)表示逻辑等号,则方程应表示为“x^2-2x-3==0”。方程的解同原方程一样被看作是逻辑语句。例如用Roots[lhs==rhs,vars]求方程x2-3x+2=0的根显示为:In[1]:=Roots[x^2-3x+3==0,x]Out[1]=x==1||x==2这种表示形式说明x取1或2均可而用Solve[lhs==rhs,vars]可得解集形式:In[2]:=Solve[x^2-3x+3==0,x]Out[2]={{x→1},{x→2}}1求解一元代数方程下面是常用的一些方程求解函数:Solve[lhs==rhs,vars]给出方程的解集NSolve[lhs==rhs,vars]直接给出方程的数值解集Roots[lhs==rhs,vars]求表达式的根FindRoot[lhs==rhs,{x,x0}]求x在x0附近的方程的数值解先看Solve函数例子:In[3]:=Solve[x^2-2x-3==0,x]Out[3]={{x→-1},{x→3}}Solve函数可处理的主要方程是多项式方程。Mathematica总能对不高于四次的方程进行精确求解,对于三次或四次方程,解的形式可能很复杂。例如求x3+5x+3=0In[4]:=Solve[x^3+5x+3==0,x]这时可用N函数近似数值解:In[5]:=N[%]Out[5]={{x→-0.5641},{x→0.28205-2.28881i},{x→0.28205+2.28881i}}当方程中有一些复杂的函数时,Mathematica可能无法直接给出解来。在这种情况下我们可用FindRoot[]来求解,但要给出起始条件。例如求3Cosx=lnx的解:In[6]:=FindRoot[3*Cos[x]==Log[x],{x,1}]Out[6]={x→1.44726}但只能求出x=1附近的解,如果方程有几个不同的解,当给定不同的条件时,将给出不同的解。如上例若求x=10附近的解命令为:In[7]:=FindRoot[3*Cos[x]==Log[x],{x,10}]Out[7]={x→13.1064}因此确定解的起始位置是比较关键,一种常用的方法是,先绘制图形观察后再解。In[8]:=Plot[{3*Cos[x],Log[x]},{x,1,15}]Out[8]=-Graphics-如上例通过图形可断定在x=5附近有另一根:In[9]:=FindRoot[3*Cos[x]==Log[x],{x,5}]Out[9]={x→5.30199}2.求方程组的根使用Solve,NSolve和FindRoot也可求方程组的解,只是使用时格式略有不同,下面给出一个Solve函数的例子:求解In[10]:=Slove[{2*x+3*y==9,x-2*y==1},{x,y}]Out[10]={{x→3,y→1}}3求方程的全解如果我们求ax2+bx+c=0的根,我们用Solve函数解的结果是:In[11]:=Solve[a*x^2+b*x+c==0,x]Out[11]={{x→},{x→}}这显然是不合理的,因为对不同的a,b,c方程的解有不同的情况,而上面只是给出部分解如果要解决这个问题可用Reduce命令,它可根据a,b,c的取值给出全部值。In[12]:=Reduce[a*x^2+b*x+c==0,x]Out[12]=a≠0&&(x==||x==||a==0&&b≠0&&x==||c==0&&b==0&&a==0因此Solve,Roots只给出方程的一般解,而Reduce函数数可以给出方程的全部可能解。4.解条件方程在作方程计算时,可以把一个方程看作你要处理的主要方程,而把其他方程作为必须满足的辅助条件,你将会发现这样处理很方便。譬如在求解像x4+bx2+c=0这样的方程时,通常我们采用x2=y的代换方法,使求解方程得到简化。在Mahematica中,我们通常是首先命名辅助条件组,然后用名字把辅助条件包含在你要用函数Solve[]求解的方程组中。用Sc定义方程:sin2x+cos2x=1,在这种条件下,求解方程cosx+2sinx=1。In[1]:=Sc=Sin[x]^2+Cos[x]^2==1Out[1]=Cos[x]2+Sin[x]2==1In[2]:=Solve[{Cos[x]+2Sin[x]==1,Sc},{Sin[x],Cos[x]}]Out[2]={{Sin[x]→0,Cos[x]→1},{Sin[x]→,Cos[x]→}}3.3求和与求积在Mathematica中,数学上的和式符号Σ用Sum表示,连乘符号Π用Product表示。下面列出求和与求积函数的形式和意义:Sum[f,{i,imin,imax}]求和Sum[f,{i,imin,imax,di}]以步长di增加i求和Sum[f,{i,imin,imax},{j,jmin,jmax}]嵌套求和Product[f,{i,imain,imax}]求积Product[f,{i,imin,imax,di}]以步长di增加i求积Product[f,{I,imin,imax},{j,jmin,jmax}]嵌套求积Nsum[f,{i,imin,Infinity}]求近似值NProduct[f,{i,imin,Infinity}]求近似值一些例子:求1到9的奇数和:In[1]:=Sum[2i-1,{i,1,9}]Out[1]=81若下限是1,可以省略:In[2]:=Sum[2i-1,{i,9}]Out[2]=81下式构造一个多项式:In[3]:=Sum[i*x^i,{i,1,9,2}]Out[3]=x+3x3+5x5+7x7+9x9Mathematic可以给出和的精确结果:In[4]:=Sum[1/n!,{n,1,11}]Out[4]=In[5]:=N[%]Out[5]=1.71828第4章函数作图4.1基本的二维图形Mathematica在直角坐标系中作一元函数图形用下列基本命令:Plot[f,{x,xmin,xmax},option->value]在指定区间上按选项定义值画出函数在直角坐标系中的图形Plot[{f1,f2,f3,⋯},{x,xmin,xmax},option->value]在指定区间上按选项定义值同时画出多个函数在直角坐标系中的图形Mathematica绘图时允许用户设置选项值对绘制图形的细节提出各种要求。例如,要设置图形的高宽比,给图形加标题等。每个选项都有一个确定的名字,以“选项名->选项值”的形式放在Plot中的最右边位置,一次可设置多个选项,选项依次排列,用逗号隔开,也可以不设置选项,采用系统的默认值。选项说明默认值AspectRatio图形的高、宽比1/0.618AxesLabel给坐标轴加上名字不加PlotLabel给图形加上标题不加PlotRange指定函数因变量的区间计算的结果PlotStyle用什么样方式作图(颜色,粗细等)值是一个表PlotPoint画图时计算的点数251.举例(1)例如绘制的图形:In[1]:=f[x_]=Sin[x^2]/(x+1)Plot[f[x],{x,0,2Pi}]Out[1]=Out[2]=-Graphics-限制长宽比例:In[3]:=Plot[f[x],{x,0,2Pi},AspectRatio->1/2]长宽比例为1:2Out[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”}]Out[5]=-Graphics-(4)将坐标原点移到点(3,0),并标注图形名称为Decaywaves:In[6]:=Plot[f[x],{x,0,2Pi},AxesOrigin->{3,0},PlotLabel->“Decaywaves”]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}]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]Show[g1,g2,DisplayFunction->$DisplayFunction]Out[9]=-Graphics-Out[10]=-Graphics-Out[11]=-Graphics-2.数据集合的图形Mathematica用于绘数字集合的图形的命令与前而介绍的绘函数图形的命令是相似的。如下:ListPlot[{y1,y2,…..}]绘出在x的值为1,2⋯时y1,y2,⋯的图形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]Out[2]=-Graphics-3.二维参数作图前面我们使用Plot命令可以绘出直角坐标系下的函数图形,使用ParametrecPlot可以绘制参数曲线下面给出ParametricPlot的常用形式:ParametricPlot[{fx,fy},{t,tmin,tmax}]绘出参数图ParametricPlot[{fx,fy},{gx,gy},….{t,tmin,tmax}]绘出一组参数图ParametricPlot[{fx,fy},{t,tmin,tmax},AspectRatio->Automatic]设法保持曲线的形(1)绘制参数方程的图形In[1]:=ParametricPlot[{Sin[3t]Cos[t],Sin[3t]Sin[t]},{t,0,2Pi}]Out[1]=-Graphics-(2)下面将一个园与上面参数方程的图象绘在同一个坐标下,并保证图形的形状正确:In[2]:=ParametricPlot[{{Sin[3t]Cos[t],Sin[3t]Sin[t]},{Sin[t],Cos[t]}},{t,0,2Pi},AspectRatio->Automatic]Out[2]=-Graphics-4.2二维图形元素用图形元素绘图适合于绘制结构复杂的图形。Mathematica中还提供了各种如绘制点、线段、圆弧等函数。同样我们可先用Graphics作出平面图形的表达式,再用Show显示守成的图形。下面给出在Mathematica中常用的二维图形元素:Point[[x,y]]点Line[{{x1,y1},{x2,y2},…}]线段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[“Below”,{0,-1},{0,-1}],{PointSize[0.3],Point[{0,0}]}},PlotRange->All]Show[g1]Out[1]=-Graphics-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-当然也可以添加坐标轴,下面的例子说明了这一点:In[5]:=Show[Graphics[sawline],Axes->True]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]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,(以绝对单位量取)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]}]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];下面的点的控制是用绝对单位:In[4]:=ListPlot[Table[Prime[n],{n,10}],Prolog->AbsolutePointSize[5]]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]重绘图形Show[plot,option->value]改变 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 重绘图形Show[plot1,plot2,plot3…]多个图形的绘制Show[GraphcisArray[{{plot1,plot2,…}…}]]绘制图形矩阵InputForm[plot]给出所有的图形信息1.使用Show显示图形下面绘制函数sinx2的图形。In[1]:=Plot[Sin[x^2],{x,-Pi,Pi}]Out[1]=-Graphics-In[2]:=Show[%]Out[2]=-Graphics-重绘图形时,可以改变命令的设置,下面改变y的比例同时给图加边框:In[3]:=Show[%,PlotRange->{-1,2},Frame->True]]Out[3]=-Graphics-2.使用Show命令进行组合也可使用Show进行图形组合。图形组合与图形是否有相同的比例无关,这是Mathematica会自动选择新的比例来绘制图形。下面绘制函数xsin(2x+π)的图形和xcos2x然后绘制在一张图时。In[4]:=f1=Plot[x*Sin[2x+Pi],{x,0,4Pi}]Out[4]=-Graphics-In[5]:=f2=Plot[x*Cos[2x],{x,0,4Pi}]Out[5]=-Graphics-In[6]:=Show[f1,f2]Out[6]=-Graphics-3.将多个图形组合为一个图形我们也可把图形组合为一个图形,我们还可以用GraphicsArray把多个图形绘制在一个图形矩阵中如下图。In[7]:=Show[GraphicsArray[{{%6,f1},{%6,f2}}]]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同平面图形一样,也有许多输出选项,你可通过多次试验找出你所需的最佳图形样式。选项取值意义AxesTrue是否包括坐标轴AxesLabelNone在轴上加上标志:zlabel规定z轴的标志,{xlabel,ylabel,zlabel}规定所有轴的标志BoxedTrue是否在曲面周围加上立方体ColorFunctionAutomatic使用什么颜色的明暗度;Hue表示使用一系列颜色TextStyleSTextStyle用于图形文本的缺省类型ormatTypeStandardForm用于图形文本的缺省格式类型DisplayFunctionSdlisplayFunction如何绘制图形,Indentity表示不显示FaceGridsNone如何在立体界面上绘上网格;All表示在每个界面上绘上网格HiddenSurfaceTrue是否以立体的形式绘出曲面LighdngTrue是否用明暗分布米给表面加色MeshTrue是否在表面上绘出xy网格PlotRangeAutomatic图中坐标的范围;可以规定为All,{zmin,zmax}或{xminn,xmax},{ymin,ymax},{zmin,zmax}ShadingTrue表面是用阴影还是留空白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}]Out[1]=-SurfaceGraphics-(2)对于三维图形中Axes、Axeslabel、Boxed等操作同二维图形的一些操作很相似。用PlotRange设定曲线的表面的变化范围。In[2]:=Show[t1,PlotRange->{0.2,0.2}]Out[2]=-SurfaceGraphics-(3)图形轴上加上标记,且在每个平面上画上网格。In[3]:=Show[t1,AxesLabel->{“Time”,”Depth”,”Value”},FaceGrids->All]Out[3]=-SurfaceGraphics-(4)视图的改变学习过画法几何或工程制图的都知道,制图时通常用三视图来表示一个物体的具体形状特性。我们在生活中也知道从不同观察点观察物体,其效果是很不一样的。Mathematica在绘制立体图形时,在系统默认的情况下,观察点在(1.3,-2.4,2)处。这个参考点选择是具有一般性的,因此偶尔把图形的不同部分重在一起也不会发生视觉混乱。下面例子改变观察视点。In[4]:=Show[t1,ViewPoint->{2,-2,0}]Out[4]=-SurfaceGraphics-从上面我们可以看出,观察点位于曲面的上方有利于看清对于图形全貌。对于较复杂的图形,我们在所绘的图形上包括尽可能多的曲线对于我们观察很有帮助。同时,在曲面的周围直接绘出立方体盒子也有利于我们认清曲面的方位。(5)下面是没有网格和立体盒子的曲面图,它看起来就不如前面的图形清晰明了。In[5]:=Show[t1,Mesh->False,Boxed->False]Out[5]=-SurfaceGraphics-(6)下图给出没有阴影的曲面In[6]:=Show[t1,Shading->False]Out[6]=-SurfaceGraphics-带有阴影和网格的图形对于理解曲面的形状是很有好处的。在有些矢量图形的输出装置中,你可能得不到阴影,但是当有阴影时,输出装置可能要花很长时间来输出它。(7)给空间立体曲面着色通常情况下,Mathematica为了使图形更加逼真而用明暗分布的形式给空间立体曲面着色。在这种情况下,Mathematica假定在图形的右上方有三种光源照在物体上。但有时这种方法会造成混乱,此时你可用Lighting->False来采取根据高度在表面上涂以不同灰度的阴影的方法。In[7]:=Show[t1,Lighting->False]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]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}}]]结果为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}]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}]Out[16]=-Graphics3D-第5章微积分的基本操作5.1极限Mathematica计算极限的命令是Limit它的使用方法主要有:Limit[expr,x->x0]当x趋向于x0时求expr的极限Limit[expr,x->x0,Direction->1]当x趋向于x0时求expr的左极限Limit[expr,x->x0,Direction->-1]当x趋向于x0时求expr的右极限趋向的点可以是常数,也可以是+∞,-∞例如:1.求In[1]:=Limit[Sqrt[x^2+2]/(3x-6),x->Infinity]Out[1]=2.求In[2]:=Limit[Sin[x]^2/x^2,x->0]Out[2]=13.求In[3]:=Limit[Log[x]/x,x->0,Direction->-1]Out[3]=-∞5.2微分1.函数的微分在Mathematica中,计算函数的微分或导数是非常方便的,命令为D[f,x],表示对x求函数f的导数或偏导数。该函数的常用格式有以下几种D[f,x]计算导数或D[f,x1,x2,…]计算多重偏导数D[f,{x,n}]计算n阶导数D[f,x,NonConstants->{v1,v2,…}]计算导数,其中v1,v2⋯依赖于x例如:(1)求函数sinx的导数In[1]:=D[Sin[x],x]Out[1]=Cos[x](2)求函数exsinx的2阶导数In[2]:=D[Exp[x]*Sin[x],{x,2}]Out[2]=2exCos[x](3)假设a是常数,对sinax求导In[3]:=D[Sin[a*x],x]Out[3]=aCos[ax](4)二元函数f(x,y)=x2y+y2求f对x,y的一阶和二阶偏导In[4]:=f[x_,y_]=x^2*y+y^2Out[4]=x2y+y2In[5]:=D[f[x,y],x]Out[5]=2xyIn[6]:=D[f[x,y],y]Out[6]=x2+2yIn[7]:=D[f[x,y],x,y]Out[7]=2xIn[8]:=D[f[x,y],{x,2}]Out[8]=2yIn[9]:=D[f[x,y],{y,2}]Out[9]=2Mathematica可以求函数式未知的函数微分,通常结果使用数学上的表示法。例如:In[10]:=D[x*g[x],x]Out[10]=g[x]+xg′[x]In[11]:=D[x*g[x],{x,4}]Out[11]=4g(3)[x]+xg(4)[x]对复合函数求导法则同样可用:In[12]:=D[g[h[x]],x]Out[12]=g′[h[x]]h′[x]如果要得到函数在某一点的导数值,可以把这点代入导数如:In[13]:=D[Exp[x]*Sin[x],x]/.x->2Out[13]=e2Cos[2]+e2Sin[2]In[14]:=N[%]Out[14]=3.643922.全微分在Mathematica中,D[f,x]给出f的偏导数,其中假定f中的其他变量与x无关。当f为单变量时,D[f,x]计算f对x的导数。函数Dt[f,x]给出f的全微分形式,并假定f中所有变量依赖于x.下面是Dt命令的常用形及意义Dt[f]求全微分dfDt[f,x]求f对x的微分Dt[f,x1,x2,…]求f对xi多重全微分Dt[f,x,Constants->{c1,c2,⋯.}]求全微分df,其中c1,c2..是常数下面我们求x2+y2的偏微分和全微分In[1]:=D[x^2+y^2,x]Out[1]=2xIn[2]:=Dt[x^2+y^2,x]Out[2]=2x+2yDt[y,x]可以看出第一种情况y与x没有关系,第二种情况y是x的函数。再看下列求多项式x2+xy3+yz的全微分并假定z保持不变是常数。In[3]:=Dt[x^2+x*y^3+y*z,Constants->{z}]Out[3]=2Dt[x,Constants→{z}]+y3Dt[x,Constants→{z}]+3xy2Dt[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],当然也可使用工具栏直接输入不定积分式。来求函数的不定积分。当然并不是所有的不定积分都能求出来。例如若求Mathematica就无能为力:In[1]:=Integrate[Sin[Sin[x]],x]Out[1]=但对于一些手工计算相当复杂的不定积分,MatheMatica还是能轻易求得,例如求In[2]:=Out[2]=积分变量的形式也可以是一函数,例如:In[3]:=Out[3]=-Cos[Sin[x]]输入命令也可求得正确结果:In[4]:=Integrate[Sin[Sin[x]],Sin[x]]Out[4]=-Cos[Sin[x]]对于在函数中出现的除积分变量外的函数,统统当作常数处理,请看下面例子:In[5]:=Out[5]=2.定积分定积分的求解主要命令是Integrate[f,{x,min,max}],或者使用工具栏输入也可以。例如求In[6]:=Integrate[x^2Exp[ax],{x,-4,4}]Out[6]=显然这条命令也可以求广义积分,例如求:In[7]:=Integrate[1/(x-2)^2,{x,0,4}]Out[7]=∞求无穷积也可以,例如:In[8]:=Integrate[1/x^4,{x,1,Infinity}]Out[8]=如果广义积分发散也能给出结果,例如:In[9]:=Integrate[1/x^2,{x,-1,1}]Out[9]=∞如果无法判定敛散性,就用给出一个提示,例如:In[10]:=Integrate[1/x,{x,0,2}]Integrate::idiv:Integralofdoesnotconvergeon{0,2}.Out[10]=如果广义积分敛散性与某个符号的取值有关,它也能给出在不同情况下的积分结果。例如:In[11]:=Integrate[1/x^p,{x,1,Infinity}]Out[11]=If[Re[p]>1,,Integrate[x–p,{x,1,∞},Assumptions→Re[p]≤1]]结果的意义是当p>1时,积分值为,否则不收敛。在Integrate中可加两个参数Assumptions和GenerateConditions例如上例中,只要用Assumptions->{Re[p]>1}就可以得到收敛情况的解:In[12]:=Integrate[1/x^p,{x,1,Infinity},Assumptions->{Re[p]>1}]Out[12]=3.数值积分数值积分是解决求定积分的另一种有效的方法,它可以给出一个近似解。特别是对于用Integrate命令无法求出的定积分,数值积分更是可以发挥巨大作用。它的命令格式为:Nintegrate[f,{x,a,b}]在[a,b]上求f数值积分Nintegrate[f,{x,a,x1,x2,…,b}]以x1,x2⋯.为分割求[a,b]上的数值积分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]上,显然x=0点是一个无穷间断点。因此若要求其数值积分,必须在其中插入点0。In[14]:=NIntegrate[1/Sqrt[Abs[x]],{x,-1,1}]Nintegrate::inum:Integrandisnotnumericalat{x}={0.}.Out[14]=Nintegrate[,{x,-1,1}]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.8862275.4多变量函数的微分下面是计算多变量函数的偏导数及全微分的命令与单变量基本相同,通过分析下面的例子我们可以我们可以轻松掌握。(1)D[f,x1,x2,…,xn]计算偏导数下面是实际的例子:求函数sin(xy2)对x的偏导数:In[1]:=D[Sin[x*y^2],x]Out[1]=y2Cos[xy2]求函数sin(xy2)对x的二阶偏导数:In[2]:=D[Sin[x*y^2],x,x]Out[2]=-y4Sin[xy2]上述命令也可写成如下形式:In[3]:=D[Sin[x*y^2],{x,2}]Out[3]=-y4Sin[xy2]求函数sin(xy2)对x的二阶对y的一阶混合偏导数:In[4]:=D[Sin[x*y^2],x,x,y]Out[4]=-2xy5Cos[xy2]-4y3Sin[xy2]上述命令也可写成如下形式:In[5]:=D[Sin[x*y^2],{x,2},y]Out[5]=-2xy5Cos[xy2]-4y3Sin[xy2](2)D[f,x,NonConstants->{c1,c2,…}],中ci依赖于x下面是实际的例子:In[6]:=D[x^2+y^2,x,NonConstants->{y}]Out[6]=2x+2yD[y,x,NonConstants→{y}]注意:D[y,x,NonConstants→{y}]表示,其中y是x的函数。(3)Dt[f]计算全微分df下面是实际的例子:计算d(x2y3)In[7]:=Dt[x^2*y^3]Out[7]=2xy3Dt[x]+3x2y2Dt[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]}]Out[8]=(3x2y-3y2+2xy2)Dt[x]+(x3–6xy+2x2y)Dt[y]将上式表示成的标准形式:In[9]:=%/.{Dt[x]->dx,Dt[y]->dy}Out[9]=dy(x3–6xy+2x2y)+dx(3x2y-3y2+2xy2)求z对x的导数:In[10]:=Dt[z,x]Out[10]=3x2y-3y2+2xy2+x3Dt[y,x]-6xyDt[y,x]+2x2yDt[y,x]因为Mathematica不知道y是否为x的函数,所以保留Dt[y,x]。用置换运算将Dt[y,x]置换成0即可求得z对x的导数:In[11]:=Dt[z,x]/.Dt[y,x]->0Out[11]=3x2y-3y2+2xy2(4)求隐函数的导数下面是实际的例子:求隐函数5y2+siny=x2的导数:In[12]:=Dt[5*y^2+Sin[y]==x^2,x]Out[12]=10yDt[y,x]+Cos[y]Dt[y,x]==2xIn[13]:=Solve[%,Dt[y,x]]Out[13]={{Dt[y,x]→}}(5)Dt[f,x,Constants->{c1,c2,…}]计算全微分df,其中ci是常数下面是实际的例子:In[14]:=Dt[x^2+y^2+z^2,x,Constants->{z}]Out[14]=2x+2yDt[y,x,Constants→{z}](6)Dt[f,x1,x2,…,xn]计算f对xi的多重全微分下面是实际的例子:In[15]:=z=x^3*y+x^2*y^2-3x*y^2;In[16]:=Dt[z,x,y]Out[16]=3x2–6y+4xy+6xyDt[x,y]+2y2Dt[x,y]–6xDt[y,x]+2x2Dt[y,x]+3x2Dt[x,y]Dt[y,x]–6yDt[x,y]Dt[y,x]+4xyDt[x,y]Dt[y,x]5.5多变量函数的积分(重积分)多变量函数的积分类似于一元函数的积分,可以利用Integrate函数来完成。命令如下:Integrate[f,{x,a,b},{y,c,d},…{z,m,n}]计算重积分Nintegrate[f,{x,a,b},{y,c,d},…{z,m,n}]数值积分或重积分的数值解下面是具体的例子:计算重积分In[1]:=Out[1]=我们也可以直接输入Integrate命令进行积分,但要注意x与y的顺序:In[2]:=Integrate[1/(x^2+y+1),y,x]Out[2]=计算二重积分:In[3]:=Integrate[x,{x,0,a},{y,0,b}]Out[3]=y的积分限也可以是x的函数:In[4]:=Integrate[x^2+y^2,{x,0,a},{y,0,x^2}]Out[4]=以下是数值积分的例子:在重积分中,无法求出某个变量的积分值,会求出可积的部分,再输出运算结果。In[5]:=Integrate[Sqrt[x+y],{x,0,2},{y,0,Sqrt[x+2]}]Out[5]=(7692–46221/4–1024-46023/4–2430Log[3]+1215Log[1+221/4+2])将上式转换成数值解: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以下是一个三重积分: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]的作用是不显示提示信息。第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]求解微分方程函数yDSolve[{eqn1,eqn2,…},{y1,y2,….},x]求解微分方程组1.用Dsolve求解微分方程y[x]In[1]:=DSolve[y’[x]==2y[x],y[x],x]Out[1]={{y[x]→e2xC[1]}}In[2]:=DSolve[y’[x]+2y[x]+1==0,y[x],x]Out[2]={{y[x]→+e-2xC[1]}}In[3]:=DSolve[y’’[x]+2y’[x]+y[x]==0,y[x],x]Out[3]={{y[x]→e-xC[1]+e-xxC[2]}}解y[x]仅适合其本身,并不适合于y[x]的其它形式,如y’[x],y[0]等,也就是说y[x]不是函数,例如我们如果有如下操作,y’[x],y[0]并没有发生变化:In[4]:=y[x]+y[0]+y’[x]/.%Out[4]={e-xC[1]+e-xxC[2]+y[0]+y’[x]}2.解的纯函数形式使用DSolve命令可以给出解的纯函数形式,即y,请分析下面的例子:In[5]:=DSolve[y’[x]==2y[x],y,x]Out[5]={{y→Function[{x},e2xC[1]]}}In[6]:=DSolve[y’[x]+2y[x]+1==0,y,x]Out[6]={{y→Function[{x},+e-2xC[1]]}}In[7]:=DSolve[y’’[x]+2y’[x]+y[x]==0,y,x]Out[7]={{y→Function[{x},e-xC[1]+e-xxC[2]]}}这里y适合y的所有情况下面的例子可以说明这一点In[8]:=y[x]+y’[x]+y[0]/.%Out[8]={C[1]+e-xC[2]}在标准数学表达式中,直接引入亚变量表示函数自变量,用此方法可以生成微分方程的解。如果需要的只是解的符号形式,引入这样来变量很方便。然而,如果想在其他的的计算中使用该结果,那么最好使用不带亚变量的纯函数形式的结果。3.求微分方程组请分析下面的例子In[9]:=DSolve[{y[x]==-z’[x],z[x]==-y’[x]},{y[x],z[x]},x]Out[9]={{z[x]→e-x(1+e2x)C[1]-e-x(-1+e2x)C[2],y[x]→e-x(-1+e2x)C[1]+e-x(1+e2x)C[2]}}当然微分方程组也有纯函数形式:In[10]:=DSolve[{y[x]==-z’[x],z[x]==-y’[x]},{y,z},x]Out[10]={{z→Function[{x},e-x(1+e2x)C[1]-e-x(-1+e2x)C[2]],y→Function[{x},e-x(-1+e2x)C[1]+e-x(1+e2x)C[2]]}}4.带初始条件的微分方程的解当给定一个微分方程的初始条件可以确定一个待定系数。请看下面的例子In[11]:=DSolve[{y’[x]==y[x],y[0]==5},y[x],x]Out[11]={{y[x]→5ex}}In[12]:=DSolve[{y’’[x]==y[x],y’[0]==0},y[x],x]Out[12]={{y[x]→e-x(1+e2x)C[2]}}由于给出一个初始条件所以只能确定C[1]5.进一步讨论对于简单的微分方程的解比较简单,对一些微分方程它的解就复杂的多。特别是对一些微分方程组或高阶微分方程,不一定能得具体的解,其解中可能含有一些特殊函数。并且很多特殊函数的提出,就是为了解这些方程的,如:In[13]:=DSolve[y’[x]-2x*y[x]==1,y[x],x]Out[13]={{y[x]→C[1]+Erfi[x]}}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]Out[15]={{y[x]→BesselI[0,2]C[1]+2BesselK[0,2]C[2]}}上面三个方程中分别使用了三种类型的函数,可以查看系统帮助了解他们的性质和含义。对于非线性微分方程,仅有一些特殊的情况可用标准数学函数得到解。Dsolve能够处理所有在标准数学手册有解的非线性微分方程。例如:In[16]:=DSolve[y’[x]-y[x]^2==0,y[x],x]Out[16]={{y[x]→}}In[17]:=DSolve[y’[x]-y[x]^2==x,y[x],x]Out[17]={{y[x]→-((-1)1/3(AiryBiPrime[(-1)1/3x]+AiryAiPrime[(-1)1/3x]C[1]))/(AiryBi[(-1)1/3x]+AiryAi[(-1)1/3x]C[1])}}可以看出第二个方程的解已经非常复杂。6.2微分方程的数值解在Mathematica中用函数DSolve[]得到微分方程的准确解,用函数NDSolve得到微分方程的数值解,当然在此处要给出求解区间(x,xmin,xmax)。NDSolve也是既能计算单个的微分方程,也能计算联立微分方程组。它能对大多数的常微分方程和部分偏微分方程求解。在常微分可能有一些未知函数yi,但这些未知函数都依赖于一个单变量x。NDSolve[{eqn1,eqn2,⋯},y,{x,xmin,xmax}]求函数y的数值解,x属于[xmin,xmax]NDSolve[{eqnl,eqn2,⋯},{y1,y2,⋯}{x,xmin,xmax}]求多个函数yi的数值解NDSolve以InterpolatingFunction目标生成函数yi的解,InterpolatingFunction目标提供在独立变量x的xmin到xmax范围内求解的近似值。NDSolve用迭代法求解,它以某一个x值开始,尽可能覆盖从xmin到xmax的全区间。为使迭代开始,NDSolve指定yi及其导数为初始条件。初始条件给定某定点x处的yi[x]及尽可能的导数y’i[x],一般情况下,初始条件可在任意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:Atx==0.49999975898557525`,stepsizeiseffectivelyzero;singularityorstiffsystemsuspected.Out[3]={{y→InterpolatingFunction[{{0.,0.5}},<>]}}使用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}]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,⋯计算bodyBlock[{x=x0,y=y0,…},bddy]给x,y,..赋初始值Mathematica中的模块工作很简单,每当使用模块时,就产生一个新的符号来表示它的每一个局部变量。产生的新符号具有唯一的名字,互不冲突,有效的保护了模块内外的每个变量的作用范围。首先我们来看Module函数,这个函数的第一部分参数,里说明的变量只在Module内起作用,body执行体,包含合法的Mathematica语句,多个语句之间可用“;”分割下面定义有初值的变量t,Mathematica默认它为全局变量:In[1]:=t=l0Out[1]=10模块中的t为局部变量,因此它独立于全局变量tIn[2]:=Module[{t},t=8;Print[t]]8全局变量t的值仍为10In[3]=t=l0Out[3]=10下面定义函数中的中间变量t为局部变量并调用fIn[4]:=f[v_]:=Module[{t},t=(1+v)^2;Expand[t]]In[5]:=f[a]Out[5]=1+2a+a2全局变量t的值仍为10ln[6]:=t=10Out[6]=10我们可以对模块中的任意局部变量进行初始化,这些初始值总是在模块执行前就被计算出来。下面给局部变量t赋初值u调用函数g:In[7]:=g[u_]:=Module[{t=u},t=t+t/(1+u)]In[8]:=g[a+b]Out[8]=a+b+Mathematica中的模块允许你把某变量名看作局部变量名。然而又存在有时你又希望它们为全局变量时但变量值为局部的矛盾,这时我们可以用Block[]函数。下面是一个含有全局变量x表达式,使用x的局部值计算上面的表达式:In[9]:=x^2+1Out[9]=1+x2In[10]:=Block[{x=a+1},%]Out[10]=1+(1+a)2In[11]:=xOut[11]=x在Mathematica中编制程序时,必须使程序中的各个部分尽可能的独立,这样程序才便于读懂、维护和修改。确保程序各部分不相干的主要方法是设置具有一定作用域的变量。在Mathematica中有两种限制变量作用域的基本方法:模块(Module)和块(Block)。我们在书写实际程序中,模块比块更具普遍性。然而在交互式计算中需要定义作用域时,块更实用。Module[vars,body]所要做的是把执行模块时表达式body的形式看成Mathematica程序的“代码”。然而当“代码”中直接出现变量vars时,这些vars都将被看作局部的。Block[vars,body]并不查看表达式body的形式,而在整个计算Body的过程中,实用vars的局部值。下例中我们根据i定义m:In[12]:=m=i^2Out[12]=i2在计算i+m的整个过程中使用块中i的局部值:In[13]:=Block[{i=a},i+m]Out[13]=a+a2而对于下面的例子,只有直接出现在i+m中的i,才被看作局部变量:In[14]:=Module[{i=a},i+m]Out[14]=a+i27.2条件结构我们在用计算机语言进行编程时,常用到条件语句。在Mathematica中也提供了多种设置条件的方法,并规定只有在该条件满足时才计算表达式。下面条件结构的常用形式:lhs:=rhsl/;test当test为真时使用定义If[test,then,else]如test为真计算then,反之计算elsewhich[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形式分别定义阶跃函数的正数和负数部分:In[3]:=g[x_]:=1/;x>0In[4]:=g[x_]:=-1/;x<0用“?”显示用/;condition定义的函数g的完整信息:In[5]:=?gGlobal`gg[x_]:=1/;x>0g[x_]:=-1/;x<0求函数g(x)在-2和5的值:In[6]:=g[-2]Out[6]=-1In[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加上第三个条件结果,这允许你测试的结果既不是真也不是假的情况下使用它:ln[2]:=If[x==y,a,b,c]Out[2]=c下面给出处理符号条件的函数。因x=x,故Mathematica给出结果为真。但Mathematica在下面情况下以符号等式输出:ln[4]:=x==yOut[4]:=x==y除非表达式能得出真,否则都被假设为假:ln[5]:=TrueQ[x==x]Out[5]=Trueln[6]:=TrueQ[x==y]Out[6]=False我们用“===”可直接测试两个表达式的等同性:In[7]:x===yOut[7]:=False一般情况下,“===”返回值为真(True)或假(False),而“==”为符号形式输出,表示一个符号等式。在特殊情况下可用“===”测试一个表达式的结构,而用“==”测试数学上的等同性。下例用“===”来测试表达式的结构:In[8]:=(1+x)^2===(1+x)(x+1)Out[8]=TrueIn[9]:=(1+x)^2===1+2*x+x^2Out[9]=FalseIn[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]}Out[12]={False,True,True,False}Mathematica处理逻辑表达式的方法允许你组合一系列的测试条件,且只有当前面条件满足时才处理后面的条件。7.3循环结构Mathematica程序的执行包括对一系列Mathematica表达式的计算。对简单程序,表达式的计算可用分号“;”来隔开,然后一个接一个地进行计算。然而,有时你需要对同一表达式进行多次计算,即循环计算。1.Do循环结构简单地Do循环结构形式:Do[expr,{i,imax}]循环计算expr,以步长1,i从1增加到imaxDo[expr,{i,imin,imax,di}]循环计算expr,以步长di,i从imin增加到imaxDo[expr,{n}]循环计算exprn次计算Print[i+i^2],i从1增加到3:In[1]:=Do[Print[i+i^2],{i,1,3}]2612Do中的定义的循环方式与函数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}]6733162.While与For结构在Mathematica程序中,Do是以结构方式进行循环的,然而有时你需要生成非结构循环。此时,运用函数While和For是合适的。下面是While和For函数的循环结构形式:While[test,body]只要test为真,就重复计算bodyFor[start,test,incr,body]以start为起始值,重复计算body和incr,直到test为假为止当条件满足时,While循环一直进行,因此,为了防止死循环,在While中应包括命令能改变test的值。In[4]:=n=25;While[(n=Floor[n/3])!=0,Print[n]]82下面给出For循环的例子,i++表示i的值加1(在本节的最后我们给出在编程时常会用到的赋值方法):In[5]:=For[i=1,i<4,i++,Print[i]]123下面再给出一个较复杂的For循环的例子,一旦i^2<l0不成立,就中止循环:In[6]:=For[i=1;t=x,i^2<10,i++,t=t^2+i;Print[t]]1+x22+(1+x2)23+(2+(1+x2)2)2Mathematica中的函数While和For循环总是在执行循环体前对循环条件进行测试,一旦测试结果为假,就中止While和For循环,因此,循环体的计算总是在测试结果为真的情况下进行的。3.一些特殊的赋值方式一些赋值方式在循环结构中有时能带来一些方便。i++变量i加1i--变量i减1++i,变量i先加1--i变量i先减1i+=dii加dii-=dii减dix*=Cx乘以Cx/=cx除以c{x,y}={y,x}交换x和y值4重复运用函数我们除了可用Do、While、For等进行循环计算外,我们还可以运用函数进行编程,运用函数编程结构你能得出非常有效的程序,例如Nest[f,x,n]允许你对某一表达式重复运用函数f。给出重复运用函数的方式:Nest[f,expr,n]对表达式expr重复调用函数fn次FixedPoint[f,expr,n]对表达式expr重复调用函数fn次,直到结果不变为止NestWhile[f,expr,test]对表达式expr重复调用函数f,直到产生的结果为假时为止下面对函数f迭代5次:In[1]:=Nest[f,x,5]Out[1]=f[f[f[f[f[x]]]]]对纯函数进行迭代,你能得出与运用Do函数得出的结果一样:In[2]:=Nest[Function[t,1/Sqrt[1+t]],x,2]Out[2]=Nest函数允许你重复运用某函数,然而,有时你想在结果不再发生变化的情况下就中止对函数的使用,此时立刻使用函数FixedPoint[f,x]。FixedPoint函数重复运用某一函数直到结果不再发生变化:In[3]:=FixedPoint[Function[t,Print[t];Floor[t/3]],67]6722720Out[3]=07.4流程控制函数程序结构的流程控制一般来说比较简单,但是在应用While或For等循环时就比较复杂了,这是因为他们的流程控制依赖于表达式的值。而且在这样的循环中,流程的控制并不依赖于循环体中表达式的值。有时你在编制Mathematica程序时,在该程序中,流程控制受某一过程或循环体执行结果的影响。这时,我们可用Mathematica提供的流程控制函数来控制流程。这些函数的工作过程与C语言中的很相似。常用的流程控制函数:Break[]退出本层的循环Continue[]转入当前循环的下一步Return[expr]退出函数中的所有过程及循环,并返回expr值Goto[name]转入当前过程中的元素Label[name]Throw[value]返回expr值当t>20时,Break[]就引起循环体的中断:In[1]:=t=1;Do[t*=k;Print[t];If[t>20,Break[]],{k,10}]12624当k<3时,Continue[]继续执行循环:In[2]:=t=1;Do[t*=k;Print[t];If[t<3,Continue[]],t+=2,{k,5}]12632170下面给出Return的一个例子:In[3]:=f[x_]:=(If[x>5,Return[big]];t=x^3;Return[t-7])In[4]:=f[10]Out[4]=bigIn[5]:=f[4]Out[5]=57Return[]允许你退出一函数,并返回一个值。Mathematica可以进行局部返回,这可允许你退出一列迭代函数。非局部返回在错误处理时是很有用的。下面给出的例子中如函数变量小于0则输出error。In[6]:=h[x_]:=If[x<0,Throw[error],Sqrt[x]]In[7]:=Catch[h[6]]Out[7]=In[8]:=Catch[h[-6]]Out[8]=errorX=6时不产生error,且出示Catch的结果,当变量小于0时输出error。第8章Mathematica中的常用函数8.1运算符及特殊符号Linel执行Line,不显示结果Linel,line2顺次执行Line1,Line2,并显示结果?name关于系统变量name的信息??name关于系统变量name的全部信息!command执行Dos命令N!N的阶乘!!filename显示文件内容<<filename读入文件并执行Expr:>>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系统常量Pi3.1415的无限精度数值E2.17828的无限精度数值Catalan0.915966Catalan常数EulerGamma0.5772Euler常数Khinchin2.68545KhinchinGlaisher0.915966GlaisherGoldenRatio1.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无关的数字因子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中解出VatsSolve[eqns,vats,elims]从方程组eqns中削去变量elims,解出vatsDSolve[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/dxDt(f)求f[x]的全微分dfDt[f,{x,n}]n阶全微分d^nf/dx^nDt[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]的二重积分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]^nn阶小量x^n8.6多项式函数Variables[poly]给出多项式poly中独立变量的列表CoefficientList[poly,var]给出多项式poly中变量var的系数CoefficientList[poly,{varl,var2…}]给出多项式poly中变量var(i)的系数列PolynomialMod[poly,m]poly中各系数modm同余后得到的多项式,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=polyResultant[polyl,poly2,var]约去polyl,poly2中的varFactor[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(⋯))=polyInterpolafinSPolynomial[data,Var]在数据data上的插值多项式RootSum[f,form]得到f[x]=0的所有根,并求得Sum[form[xi]]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},..}]在特定网格上进行插值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⋯的阵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的元素的位置列表Cases[{e1,e2⋯},pattem]匹配模式pattem的所有元素ei的表(3)表的操作Append[exp[elem]返回在表expr的最后追加elem元素后的表Prepend[expr,elem]返回在表expr的最前添加elem元素后的表Insert[1ist,elem,n]在第n元素前插入elemlnsert[expr,elem,{i,j,...}]在元素expr[[{i,j,..}]]前插入elemDelete[expr,{i,j,..}]删除元素expr[[{i,j,..}]]后剩下的表DeleteCases[expr,pattem]删除匹配pattern的所有元素后剩下的表ReplacePart[expr,new,n]将expr的第n元素替换为newSort[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}]由参数方程在参数变化范围内产生的曲线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},..}等高线线性颜色等属性(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间的实数CMYKColor[cyan,magenta,yellow,block]CMYK颜色Thicknessr[r]设置线宽为rPointSize[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对应的blockiSwitch[expr,forml,blockl,form2,block2...]重复执行exprimax次Do[expr,{imax}]重复执行exprimax次Do[expr,{i,imin,imax},{j,jmin,jmax}]多重循环While[test,body]循环执行body直到test为FalseFor[start,test,incr,body]循环执行body直到test为FalseThrow[value]停止计算,把value返回给最近一个Catch处理Throw[value,tag]停止计算,把value返回给最近一个Catch处理Catch[expr]计算expr,遇到Throw返回的值则停止Catch[expr,form]当Throw[value,tag]中Tag匹配form时停止Return[expr]从函数返回,返回值为exprReturn[]返回值NullBreakl[]结束最近的一重循环Continuel[]停止本次循环,进行下一次循环Goto[tag]无条件转向Label[Tag]处Label[tag]设置一个断点Check[expr,fmlexpr]计算expr,如果有出错信息产生,则返回failexpr的值Check[expr,failexpr,s1::t1,s2::t2,...]当特定信息产生时则返回failexprCheckAbort[expr,failexpr]当产生abort信息时返回failexprInterrupt[]中断运行Abort[]中断运行TimeConstrained[expr,t]计算expr,当耗时超过t秒时终止MemoryConstrained[expr,b]计算expr,当耗用内存超过b字节时终止运算Print[exprl,expr2,...]顺次输出expri的值Input[]产生一个输入对话框,返回所输入的任意表达式Input["prompt"]同上,prompt为对话框的提示Pause[n]运行暂停n秒欢迎您的下载,资料仅供参考!致力为企业和个人提供 合同 劳动合同范本免费下载装修合同范本免费下载租赁合同免费下载房屋买卖合同下载劳务合同范本下载 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 ,策划案计划书,学习资料等等打造全网一站式需求。
本文档为【Mathematica使用教程11547】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥14.0 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
金水文库
鑫淼网络科技有限公司主要经营:PPT设计 、课件制作,软文策划、合同简历设计、计划书策划案、各类模板等。公司秉着用户至上的原则服务好每一位客户
格式:doc
大小:2MB
软件:Word
页数:0
分类:
上传时间:2020-04-27
浏览量:11