搜索
您的当前位置:首页正文

Mathematica_8__简明教程

2021-03-05 来源:易榕旅网
Mathematica 8 简明教程

【Mathematica 简介】

Mathematica 软件是由沃尔夫勒姆研究公司(Wolfram Research Inc.)研发的。Mathematica 1.0 版发布于1988年6月23日。发布之后,在科学、技术、媒体等领域引起了一片轰动,被认为是一个革命性的进步。几个月后,Mathematica 就在世界各地拥有了成千上万的用户。今天,Mathematica 已经在世界各地拥有了数以百万计的忠实用户。

Mathematica 已经被工业和教育领域被广泛地采用。实际上,Mathematica 负责将高级的数学和计算引入了传统上非技术的领域,极大的增加了科技软件的市场。一个包含应用、咨询、书籍、和课程软件的行业支持着国际化的 Mathematica 用户群,这个行业还在不断地膨胀。随着沃尔夫勒姆研究公司不断地扩大和 Mathematica 的使用被不断地扩展到不同的领域,将会看到 Mathematica 在全世界范围内对未来产品、重要研究发现、和教学的巨大影响。

数学软件是现在科研工作者的必备的工具,个人比较喜欢用Mathematica,因为它是最接近数学语言的。Mathematica 在15日发布,其最显著的变化是允许自由形式的英文输入,而不再需要严格按照Mathematica语法,这类似于Wolfram|Alpha搜索引擎。Mathematica 8允许用户按照自己习惯的思考过程输入方程式或问题,最令人激动的部分是软件不是逐行执行命令,而是能理解上下文背景。

1. Enter your queries in plain English using new free-form linguistic input

2. Access more than 10 trillion sets of curated, up-to-date, and ready-to-use data 3. Import all your data using a wider array of import/export formats

4. Use the broadest statistics and data visualization capabilities on the market

5. Choose from a full suite of engineering tools, such as wavelets and control systems 6. Use more powerful image processing and analysis capabilities 7. Create interactive tools for rapid exploration of your ideas 8. Develop faster and more powerful applications

Wolfram Research 的 CEO 和创立者斯蒂芬·沃尔夫勒姆表示:“传统上,让计算机执行任务必须使用计算机语言或者使用点击式界面:前者要求用户掌握它的语法;而后者则限制了可访问函 数的范围。”“自由格式语言学能够理解人类的语言,并将其转化为具有特定语法结构的语言。这是产品适用性上的一个突破。 Mathematica 8 是这种创新思想下的第一个产品,但是它已经能够大幅度提高用户的工作效率。”

Mathematica 8 可立即用于 Windows XP/Vista/7、Mac OS X、Linux x86 以及其它兼容系统。

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.1 Mathematica的启动和运行

Mathematica是美国Wolfram研究公司生产的一种数学分析型的软件,以符号计算见长,也具有高精度的数值计算功能和强大的图形功能。 假设在Windows环境下已安装好Mathematica5.0,启动Windows后,在“开始”菜单的“程序”

中单击

,就启动

图1

了Mathematica5.0,在屏幕上显示如图1的Notebook窗口,系统暂时取名

Untitled-1,直到用户保存时重新命名为止。

输入1+1,然后按下Shif+Enter键,这时系统开始计算并输出计算结果,并给输入和输出附上次序标识In[1]和Out[1],注意In[1]是计算后才出现的;再输入第二个表达式,要求系统按Shift+Enter输出计算结果后,系统分别将其标识为In[2]和Out[2],将一个二项式x + y展开,

5

5

如图2。

图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中,函数名和自变量之间的分隔符是用方括号“[ ]”,而不是一般数学书上用的圆括号“( )”,初学者很容易犯这类错误。 如果输入了不合语法规则的表达式,系统会显示出错信息,并且不给出计算结果,例如:要画正弦函数在区间[-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)的称为一维格式,形如

的称为

二维格式。

你可以使用快捷方式输入二维格式,也可用基本输入工具栏输入二维格式。下面列出了用快捷方式输入二维格式的方法: 数学运算 数学表达式 按键 分式 n

方 x x Ctrl+^ n

n

开 2次方 x Ctrl+/ 2

下标 x2 x Ctrl+_ 2 例如输入数学表达式

(,x,+,1,),Ctrl+ ^,+,4,→,

Ctrl+/,Ctrl+2,2,x,+,y 另外也可从“文件”菜,可以按单中激活“控制面板”“Basic Input”工具栏,也可输入,并且使用工具栏如下顺序输入按键: 可输入更复杂的数学表达式,如下图4。

图4 图5

Ctrl +2 x

2.特殊字符的输入

MathemMatica 还提供了用以输入各种特殊符号的工具栏。基本输入工具栏包含了常用的特殊字符(上图),只要单击这些字符按钮即可输入。若要输入其它的特殊字符或运算符号,必须使用从“文件”菜单中激活“控制面板”“Complete Characters”工具栏,如上图5,单击符号后即可输入。

1.3 Mathematica的联机帮助系统

用Mathematica的过程中,常常需要了解一个命令的详细用法,或者想知系统中是否有完成某一计算的命令,联机帮助系统永远是最详细、最方便的资料库。

1.获取函数和命令的帮助

在Notebook界面下,用 ?或 ?? 可向系统查询运算符、函数和命令的定义和用法,获取简单而直接的帮助信息。 例如,向系统查询作图函数Plot命令的用法 ?Plot 系统将给出调用 Plot 的格式以及 Plot 命令的功能(如果用两个问号 “??”, 则信息会更详细一些)。? Plot* 给出所有以Plot这四个字母开头的命令。

2.Help菜单

任何时候都可以通过按shift+F1键或点击“帮助”菜单项“帮助浏览”,调出帮助菜单,如图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

如果已经确知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 Out[2]=

实数是用浮点数表示的,Mathematica实数的有效位可取任意位数,

是一种具有任意精确度的近似实数,当然在计算的时候也可以控制实

数的精度。实数有两种表示方法:一种是小数,另外一种是用指数方法表示的。如: 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转换成实数

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[%] Out[3]=

3.数学常数

Mathematica 中定义了一些常见的数学常数,这些数学常数都是精确数。 Pi 表示π=3.14159⋯⋯

E 自然对数的底e=2.71828⋯⋯ Degree 1度,π/180弧度 I 虚数单位i Infinity 无穷大∞

-infinity 负无穷大 -∞

GondenRatio 黄金分割数0.61803

数学常数可用在公式推导和数值计算中,在数值计算中表示精确值。如: In[1]:=Pi^2 Out[1]=π In[2]:=Pi^2//N Out[2]=9.8696

2

4.数的输出形式

在数的输出中可以使用转换函数进行不同数据类型和精度的转换。另外对一些特殊要求的格式还可以使用如下的格式函数:

NumberForm[expr,n] 以n位精度的实数形式输出实数expr ScientificFormat[expr] 以科学记数法输出实数expr EngineergForm[expr] 以工程记数法输出实数expr 例如:

In[1]:=N[Pi^30,30]

Out[1]=8.21289330402749581586503585434×10 In[2]:=NumberForm[%,10]

Out[2]//NumberForm=8.212893304×10

下面的函数输出按工程记数法表示的指数可被3整除的实数

In[3]=EngineeringForm[%%] %%表示上两步的输出结果,即Out[1] Out[3]//EngineeringForm=821.289330402749581586503585434×10

12

14

14

2.2变量

1.变量的命名

Mathematica中内部函数和命令都是以大写字母开始的标示符,为了不会与它们混淆,我们自定义的变量应该是以小写字母开始,后跟数字和字母的组合,长度不限。例如:a12,ast,aST都是合法的,而12a,z*a,a b(中间有空格)是非法的。另外在Mathematica中的变量是区分大小写的。在Mathematica中,变量不仅可以存放一个数值,还可以存放表达式或复杂的算式。

2.给变量赋值

在Mathmatica中用等号=为变量赋值。同一个变量可以表示一个数值,一个数组,一个表达式,甚至一个图形。如: 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 Out[1]= 1+

In[2]:=f/.x->1 Out[2]=

In[3]:=f/.x->2

Out[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)

2

2.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] 指数函数e

x

Log[x] 自然对数函数lnx Log[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+x,对定义的函数我们可以求函数值,也可绘制它的图形。

In[1]:=f[x_]=x*Sin[x]+x^2 Out[1]=x +xSin[x] In[2]:=f[1]

Out[2]=1+Sin[1]

In[3]:=Plot[f[x],{x,-3,3}]

2

2

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>=0

f[x_]:=x^2/;(x>-1)&&(x<0) f[x_]:=x-1/;x<= -1

In[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+x,1+3x+x}

下面是把Out[2]列表中的表达式对x求导:

2

3

In[3]:=D[%,x] Out[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}] Out[2]={x,x,x,x}

用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]:=%//TableForm

Out[6]//TableForm=5 6 7 7 8 9 9 10 11

2

2

2

2

2

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}

对于表的操作Mathematica提供了丰富的函数,详细的可以查阅后面的附录或者系统帮助。

2.5 表达式

1.表达式的含义

Mathematica 能处理数学公式,表以及图形等多种数据形式。尽管他们从形式上看起来不一样,但在Mathematica内部都被看成同种类型,即都把他们当作表达式的形式。Mathematica 中的表达式是由常量、变量、函数、命令、运算符和括号等组成,它最典型的形式是f[x,y]。

2.表达式的表示形式

在显示表达式时,由于需要的不同,有时我们需要表达式的展开形式,有时又需要其因子乘积的形式。在我们计算过程中可能得到很复杂的表达式,这时我们又需要对它们进行化简。常用的处理这种情况的函数就是变换表达式表示形式函数。 Expand[expr] 按幂次升高的顺序展开表达式 Factor[expr] 以因子乘积的形式表示表达式

Simplify[expr] 进行最佳的代数运算,并给出表达式的最少项形式 表达式(x+y) (x+y) 展开: In[1]:=Expand[(x+y)^4*(x+y^2)]

Out[1]=x +4xy+6x y +x y+4xy+4x y+xy+6x y+4xy+y 还原上面的表达式为因子乘积的形式: In[2]:=Factor[%] Out[2]=(x+y) (x+y)

多项式表达式的项数较多,比较复杂,在显示时显得比较杂乱,而且在计算过程中没有必要知道全部的内容;或表达式的项很有规律,没有必要打印全部的表达式的结果,Mathematica提供了一些命令,可将它缩短输出或不输出。

expr//Short 或 Short[expr] 显示表达式的一行形式

Short[expr,n] 显示表达式的n行形式,命令后加一分号“;” 不输出结果 将表达式(1+x) 展开,并仅显示一行有代表项的式子: In[3]:=Expand[(1+ x)^30]//Short

Out[3]=1+30x+435x +4060x +<<23>>+4060x +435x将上式分成三行的形式展开: In[4]:=Short[Expand[(1+ x)^30],3] Out[4]=1+30x+435x +4060x +27405x+ 142506x+<<19>>+142506x27405x

2 6 5

2 5

2

3

4

2

3

2 7

2 8

304

2

5

4

3

2

4 2

2 3

3 3

4

2 4

5

6

4

2

+30x

2 9

+x

3 0

+

2 9

+4060x +435x

2 7 2 8

+30x+x

3 0

把代数表达式变换到你所需要的形式没有一种固定的模式,一般情况下,最好的办法是进行多次实验,尝试不同的变换并观察其结果,再挑出你满意的表示形式。

3.关系表达式与逻辑表达式

我们已经知道“=”表示给变量赋值。现在我们来学习一些其它的逻辑与关系算子。关系表达式是最简单的逻辑表达式,我们常用关系表达式表示一个判别条件。例如:x>0,y=0。关系表达式的一般形式是:表达式+关系算子+表达式。其中表达式可为数字表达式、字符表达式或意义更广泛的表达式,如一个图形表达式等。在我们实际运用中,这里的表达式常常是数字表达式或字符表达式。下面出Mathematica中的各种关系算子: x==y 相等 x!=y 不相等 x>y 大于

x>=y 大于等于 xx<=y 小于等于 x==y==z 都相等 x!=y!=z 都不相等 x>y>z 严格递减 x给变量x,y赋值,输出后一变量的值,如: In[1]:=x=2;y=9 Out[1]=9 In[2]:=x>y Out[2]=False

下面是比较两个表达式的大小:

In[3]:=3^2>y+1 上面已设y=9 Out[3]= False

用一个关系式只能表示一个判定条件,要表示几个判定条件胡组合,必须用逻辑运算符将关系表达式组织在一起,我们称表示判定条件的表达式为逻辑表达式。 下面是常用的逻辑运算和它们的意义: ! 非 && 并 || 或 Xor 异或 If 条件

LogicalExpand[expr] 展开逻辑表达式 例如下面的例子说明它们的应用:

In[4]:=3*x^2In[5]:=3*x^22.6 常用的符号

(term) 圆括号用于组合运算 f[x] 方括号用于函数 { } 花括号用于列表 [[i]] 双括号用于排序

% 代表最后产生的结果 %% 倒数第二次的算结果 %%%(k) 倒数第k次的计算结果

%n 例出行Out[n]的结果(用时要小心)

第3章Mathematica的基本运算

3.1 多项式的表示形式

可认为多项式是表达式的一种特殊的形式,所以多项式的运算与表达式的运算基本一样,表达式中的各种输出形式也可用于多项式的输出。Mathematica提供一组按不同形式表示代数式的函数。

Expand[ploy] 按幂次展开多项式ploy ExpandAll[ploy] 全部展开多项式ploy

Factor[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) 对x -1 进行分解 In[1]:=Factor[x^8-1]

Out[1]=(-1+x)(1+x)(1+x )(1+x) (2) 展开多项式 (1+x) In[2]:= Expand[(1+x)^5] Out[2]=1+5x+10x +10x +5x +x (3) 展开多项式 (1+x+3y) In[3]:= Expand[(1+x+3y)^4]

Out[3]=1+4x+6x+4x+x+12y+36xy+36xy+12xy+54y +108xy+54xy+108y+108xy+81y (4) 展开并化简(2+x) (1+x) (3+x)

In[4]:= Simplify[Expand[(2+x)^4(1+x)^4(3+x)^3]] Out[4]=(3+x) (2+3x+x )

3

2 4 4

4

3

2

2 2

3

3

4

2

3

4

2

3

2

4

2

3

4

5

5 2

4

8

2.多项式的代数运算

多项式的运算有加、减、乘、除运算:+,-,*,/ 下面通过例子说明。 (1) 多项式的加

运算a +3a+2与a+1相加(后面例子中也使用这两个多项式运算) In[5]:=(a^2+3*a+2)+(a+1) 括号可以不要 Out[5]= 3+4a+ a

2

2

或者In[5]:=p1= a^2+3*a+2;p2= a+1;p1+p2 Out[5]= 3+4a+ a (2) 多项式相减

In[6]:=(a^2+3*a+2)-(a+1) Out[6]= 1+2a+ a 或者In[6]:=p1-p2 Out[6]= 1+2a+ a (3) 多项式相乘

In[7]:=(a^2+3*a+2)*(a+1) Out[7]= (1+ a) (2+3a+ a) 或者In[7]:=p1*p2

2

222

Out[7]= (1+ a) (2+3a+ a) In[8]:=Expand[p1*p2] Out[8]=2+5a+4a+a

(4) 多项式相除

In[9]:=(a^2+3*a+2)/(a+1) Out[9]=

或者In[9]:=p1/p2 Out[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]=

因为Mathematica把方程看作逻辑语句。在数学方程式表示为形

商的整式部分

如“x -2x -3=0”的形式。在Mathematica中“=”用作赋值语句,这

2

2

3

2

3.2方程及其根的表示

样在Mathematica中用“==”(两个等号中间没有空格)表示逻辑等号,则方

商的余式

程应表示为“x^2 -2x -3==0” 。方程的解同原方程一样被看作是逻辑语句。

部分

例如用Roots[lhs==rhs,vars]求方程x -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}}

2

1 求解一元代数方程

下面是常用的一些方程求解函数:

Solve[lhs==rhs,vars] 给出方程的解集

NSolve[lhs==rhs,vars] 直接给出方程的数值解集 Roots[lhs==rhs,vars] 求表达式的根

FindRoot[lhs==rhs,{x,x 0}] 求x在x 0附近的方程的数值解

先看Solve函数例子: In[3]:=Solve[x^2-2x-3==0,x] Out[3]= {{x→-1},{x→3}}

Solve函数可处理的主要方程是多项式方程。Mathematica总能对不高于四次的方程进行精确求解,对于三次或四次方程,解的形式可能很复杂。

例如求x +5x+3=0

In[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}

3

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求方程的全解

如果我们求ax +bx+c=0的根,我们用Solve函数解的结果是: In[11]:=Solve[a*x^2+b*x+c==0,x]

Out[11]={{ x→

这显然是不合理的,因为对不同的a,b,c方程的解有不同的情况,而上},{ x→ }}

面只是给出部分解如果

要解决这个问题可用Reduce命令,它可根据a,b,c的取值给出全部值。 In[12]:=Reduce[a*x^2+b*x+c==0,x] Out[12]= a≠0 && (x== a==0 && b≠0 && x== 因此Solve,Roots只给出方程的一般解,|| || x== 而Reduce函数数可以给出方程的全部可能解。

||c==0

2

4.解条件方程

&& b==0 &&

在作方程计算时,可以a==0 把一个方程看作你要处理的主要方程,而把其他方程作为必须满足的辅助条件,你将会发现这样处理很方便。譬如在求解像x + bx +c = 0这样的方程时,通常我们采用x = y的代换方法,使求解方程得到简化。

在Mahematica中,我们通常是首先命名辅助条件组,然后用名字把辅助条件包含在你要用函数Solve[] 求解的方程组中。

用Sc定义方程:sin x + cos x = 1,在这种条件下,求解方程cosx + 2sinx = 1。 In[1]:=Sc=Sin[x]^2+Cos[x]^2==1 Out[1]=Cos[x] +Sin[x] ==1

,Cos[x]→

In[2]:=Solve[{Cos[x]+2Sin[x]==1,Sc},{Sin[x],Cos[x]}] Out[2]={{Sin[x]→0,Cos[x]→1},{Sin[x]→

}}

2

2 2

2 2

4

2

3.3求和与求积

在Mathematica中,数学上的和式符号Σ用Sum表示,连乘符号Π用Product表示。下面列出求和与求积函数的形式和意义:

Sum[f,{i,imin,imax}] 求和 Sum[f,{i,imin,imax,di}] 以步Sum[f,{i,imin,imax},{j,jmin,jmax}] 嵌套 Product[f,{i,imain,imax}] 求积 Product [f,{i,imin,imax,di}] 以步长diProduct[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 +3x +5x +7x +9x Mathematic可以给出和的精确结果: In[4]:=Sum[1/n!,{n,1,11}] Out[4]=

In[5]:=N[%] Out[5]=1.71828

近似值

3

5

7

9

长di增加i求和 求和

增加i求积 积

近似值

第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.618 AxesLabel 给坐标轴加上名字 不加 PlotLabel 给图形加上标题 不加

PlotRange 指定函数因变量的区间 计算的结果 PlotStyle 用什么样方式作图(颜色,粗细等) 值是一个表 PlotPoint 画图时计算的点数 25

1.举例

(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:

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”}]

Out[5]= -Graphics-

(4) 将坐标原点移到点(3,0),并标注图形名称为Decay waves: In[6]:=

Plot[f[x],{x,0,2Pi},AxesOrigin->{3,0},PlotLabel->“Decay waves”]

Out[6]= -Graphics-

(5) 修改x方向的刻度,y轴方向的刻度则用默认值:

In[7]:= Plot[f[x],{x,0,2Pi},Ticks->{{0,Pi/2,Pi,3Pi/2,2Pi},Automatic}]

用Show命令显示:

In[9]:=g1=Plot[f[x],{x,0,2Pi},DisplayFunction->Identity]

Out[11]= -Graphics-

Out[7]= -Graphics- (6) 定义y轴的绘图范围: In[8]:=

Plot[f[x],{x,0,2Pi},PlotRange->{-0.6,0.6}]

Out[8]= -Graphics- (7) 另外我们也可以将图形结果定义给变量,但不显示图形,后

g2=Plot[x*Cos[x]/12,{x,0,2Pi},

DisplayFunction->Identity]

Show[g1,g2,

DisplayFunction->$ DisplayFunction]

Out[9]= -Graphics- Out[10]= -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,t

min,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-

当然也可以添加坐标轴,下面的例子说明了这一点:In[5]:=Show[Graphics[sawline],Axes->True]

Out[5]= -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-

下面的例子是说明了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->Abs

olutePointSize[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] 改变方案重绘图形 Show[plot1,plot2,plot3…] 多个图形的绘制 Show[GraphcisArray[{{plot1,plot2,…}…}]] 绘制图形矩阵

InputForm[plot] 给出所有的图形信息

1.使用Show显示图形

下面绘制函数sinx 的图形。 In[1]:=Plot[Sin[x^2],{x,-Pi,Pi}]

Out[1]= -Graphics- In[2]:=Show[%]

2

In[5]:=f2=Plot[x*Cos[2x],{x,0,4Pi}]

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-

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同平面图形一样,也有许多输出选项,你可通过多次试验找出你所需的最佳图形样式。

选项 取值 意义

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网格

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}]

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]=1 3.求

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,…}] 计算例如:

(1) 求函数sinx的导数 In[1]:=D[Sin[x],x]

,其中v1,v2⋯依赖于x

Out[1]=Cos[x]

(2) 求函数e sinx的2阶导数 In[2]:=D[Exp[x]*Sin[x],{x,2}] Out[2]=2eCos[x]

(3) 假设a是常数,对sinax求导 In[3]:=D[Sin[a*x],x] Out[3]=aCos[ax]

(4) 二元函数f(x,y)=x y+y 求f对x,y 的一阶和二阶偏导 In[4]:=f[x_,y_]=x^2*y+y^2 Out[4]= x y+y In[5]:=D[f[x,y],x] Out[5]=2xy

In[6]:=D[f[x,y],y] 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

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}] 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 Out[13]=e Cos[2]+e Sin[2] In[14]:=N[%] Out[14]=3.64392

2

2

(3)

(4)

2 2

2

2

2

x

x

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,x1,x2,…] 求f对xi多重全微分 Dt[f,x,Constants->{c1,c2,⋯.}] 求全微分df,其中c1,c2..是常数 下面我们求x +y 的偏微分和全微分

2

2

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]

可以看出第一种情况y与x没有关系,第二种情况y是x的函数。再看下列求多项式 x +xy +yz的全微分并假定z保持不变是常数。 In[3]:=Dt[x^2+x*y^3+y*z,Constants->{z}]

Out[3]=2Dt[x,Constants→{z}]+y Dt[x, Constants→{z}] +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]

2

3

2

3

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: Integral of

Out[10]=

如果广义积分敛散性与某个符号的取值有关,它也能给出在不同情况下的

积分结果。例如

In[11]:=Integrate[1/x^p,{x,1,Infinity}]

Out[11]=If[Re[p]>1,

结果的意义是当p >1时,积分值为

In[12]:=Integrate[1/x^p,{x,1,Infinity},Assumptions->{Re[p]>1}]

does

not

converge on {0,2}.

,否则不

,Integrate[x

– p

,{x,1,

∞},Assumptions→Re[p]≤1]]

收敛。在Integrate中可加两个参数Assumptions 和

GenerateConditions例如上例中,只要用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

如果积分函数存在不连续点,或存在奇点我们可对积分进行分段求解。例如函数 In[14]:=NIntegrate[1/Sqrt[Abs[x]],{x,-1,1}] Nintegrate::inum:Integrand Out[14]=Nintegrate[ 在[-1,In[15]:=NIntegrate[1/Sqrt[Abs[x]],{x,-1,0,1}] 1]上,显然x=0点Out[15]=4. 是一个无穷间断对无穷积分,也可求数值积分,例如: 点。因此若要求

is not

numerical at {x} =

{0.}. ,{x,-1,1}

In[16]:=Nintegrate[Exp[-x^2],{x,0,Infinity}]

其数值积分,必须在其中插入点0。

Out[16]=0.886227

]

5.4多变量函数的微分

下面是计算多变量函数的偏导数及全微分的命令与单变量基本相同,通过分析下面的例子我们可以我们可以轻松掌握。 ( 1 ) D[f,x1, x2 ,…, x n ]计算偏导数 下面是实际的例子:

求函数sin(xy)对x的偏导数: In[1]:=D[Sin[x*y^2],x] Out[1]=y Cos[xy ]

求函数sin(xy)对x的二阶偏导数:

22

2 2

In[2]:=D[Sin[x*y^2],x,x] Out[2]= -y Sin[xy ]

上述命令也可写成如下形式: In[3]:=D[Sin[x*y^2],{x,2}] Out[3]= -y Sin[xy ]

求函数sin(xy)对x的二阶对y的一阶混合偏导数: In[4]:=D[Sin[x*y^2],x,x,y]

Out[4]= -2xy Cos[xy ] - 4y Sin[xy ] 上述命令也可写成如下形式: In[5]:=D[Sin[x*y^2],{x,2},y]

5

2

3

2

5

2

3

2

24

2

4

2

中ci依赖于x

Out[5]= -2xy Cos[xy ] - 4y Sin[xy ] ( 2) D[f,x,NonConstants->{c1 ,c

,其中y2 ,…}],

是x的函数。 下面是实际的例子:

In[6]:=D[x^2+y^2,x,NonConstants->{y}] Out[6]=2x+2yD[y,x,NonConstants→{y}] 注意:D[y,x,NonConstants→{y}]表示 ( 3 ) Dt[f] 计算全微分df 下面是实际的例子: 计算d(x y ) In[7]:=Dt[x^2*y^3]

Out[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]}] Out[8]=(3x y -3y +2xy )Dt[x]+(x – 6xy+2x y)Dt[y] 将上式表示成的标准形式: In[9]:=%/.{Dt[x]->dx,Dt[y]->dy}

Out[9]= dy(x – 6xy+2x y)+ dx(3x y -3y +2xy ) 求z对x的导数: In[10]:=Dt[z,x]

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的导数:

2

2

2

3

2

3

2

2

2

2

2

2

2

3

2

3

2

2

2

3

In[11]:=Dt[z,x]/.Dt[y,x]->0 Out[11]=3x y -3y +2xy ( 4) 求隐函数的导数 下面是实际的例子:

求隐函数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]] Out[13]={{Dt[y,x]→

2

2

2

2

2

}}

( 5 ) Dt[f,x,Constants->{c1 ,c 2 ,…}]计算全微分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 ,…, x n ]计算f对xi的多重全微分 下面是实际的例子:

In[15]:= z=x^3*y+x^2*y^2-3x*y^2; In[16]:=Dt[z,x,y]

Out[16]=3x– 6y + 4xy + 6xyDt[x,y] + 2y Dt[x,y] – 6xDt[y,x] + 2x + 3x Dt[x,y]Dt[y,x] – 6yDt[x,y]Dt[y,x] + 4xyDt[x,y]Dt[y,x]

2

2

2

2

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^2+y^2,{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]= 3/

-4602将上式转换成数值解: ])

(7692–In[6]:=N[%]

4

Out[6]=4.65557 1/ 4–

4622 –1024

直接利用NIntegrate命令求解,也可以得到相

2430Log[3]

同的答案:

+1215Log[1

In[7]:= NIntegrate[Sqrt[x+y],{x,0,2},{y,0,Sqrt[x+2]}]

1/ 4

Out[7]=4.65557 +22 +2 以下是一个三重积分

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] 求解微分方程函数y DSolve[{eqn1,eqn2,…},{y1,y2,….},x] 求解微分方程组

1.用Dsolve求解微分方程y[x]

In[1]:=DSolve[y ’[x]==2y[x],y[x],x] Out[1]={{y[x]→Out[2]={{y[x]→

e C[1]}}

In[2]:=DSolve[y’[x]+ 2y[x]+1==0,y[x],x]

+e

-

2 x

2

In[3]:=DSolve[y’’[x]+ 2y ’[x]+ y[x]==0,y[x],x]

- x

- x

Out[3]={{y[x]→x e C[1]+ e xC[2]}}

C[1]}}

解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 C[1]+ e xC[2]+y[0]+y’[x]}

- x

- x

2.解的纯函数形式

使用DSolve命令可以给出解的纯函数形式,即y,请分析下面的例子: In[5]:= DSolve[y ’[x]==2y[x],y,x] Out[5]={{y→Function[{x},e C[1]]}}

In[6]:=DSolve[y’[x]+ 2y[x]+1==0,y,x] Out[6]={{y→Function[{x}, In[7]:=DSolve[y’’[x]+ 2y ’[x]+ y[x]==0,y,x]

-2 Out[7]={{y→Function[{x},e C[1]+ e xC[2]]}}

+e

这里y适合y的所有情况下面的例子可以说明这一点 In[8]:=y[x]+y’[x]+y[0]/.% x

C[1]]}} - x

Out[8]= {C[1]+ e C[2]}

在标准数学表达式中,直接引入亚变量表示函数自变量,用此方法可以生成微分方程的解。如果需要的只是解的符号形式,引入这样来变量很方便。然而,如果想在其他的的计算中使用该结果,那么最好使用不带亚变量的纯函数形式的结果。

2 x

- x - x

3.求微分方程组

请分析下面的例子

e (1+ )C[1] - e (e -1+ e )C[1]+

式:

2 x

- x

2 x

- x

- x

e e (-1+e

x

2

- x

(1+e

2

)C[2],

- x

In[9]:=DSolve[{y[x]==-z ’[x],z[x]==-y’[x]},{y

[x],z[x]},x] Out[9]={{z[x]→ y[x] →

当然微分方程组也有纯函数形e

- x

e (1+

- x

2 x

x

)C[2]}} - x

e )C[1] - e (-1+ e )C[1]+

2 x

e (-1+e

x

2

(1+e

x

2

)C[2]],

)C[2]]}}

In[10]:=DSolve[{y[x]==-z ’[x],z[x]==-y’[x]},{y,z},x]

Out[10]={{z→Function[{x}, y→Function[{x},

4.带初始条件的微分方程的解

当给定一个微分方程的初始条件可以确定一个待定系数。请看下面的例子 In[11]:=DSolve[{y’[x]== y[x],y[0]==5},y[x],x] Out[11]={{y[x]→5e}} In[12]:=DSolve[{y’’[x]== Out[12]={{y[x]→条件所以只能确

y[x],y’[0]==0},y[x],x]

e (1+ e

Erfi[x]}}

定C[1]

- x

2 x

x

)C[2]}} 由于给出一个初始

5.进一步讨论

对于简单的微分方程的解比较简单,对一些微分方程它的解就复杂的多。特别是]C[2]}} 对一些微分方程组或高阶]C[1]+ 微分方程,不一定能得具体的解,其解中可能含有一

2BesselK[0,2

些特殊函数。并且很多特殊函数的提出,就是为了解这些方程的,如: In[13]:=DSolve[y’[x]-2x* y[x]==1,y[x],x] Out[13]={{y[x]→C[1]+

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

上面三个方程中分别使用了三种类型的函数,可以查看系统帮助了解他们的性质和含义。对

于非线性微分方程,仅有一些特殊的情况可用标准数学函数得到解。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/ 3

x]+AiryAiPrime[(-1)

1/ 3

x]C[1]))

}}

/ ( AiryBi [(-1)

1/ 3

x]+AiryAi [(-1)

1/ 3

x]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: At x==0.49999975898557525`,step size is effectively zero;singularity or stiff system suspected .

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, ⋯计算body Block[{x=x0,y=y0,…},bddy] 给x,y,..赋初始值

Mathematica中的模块工作很简单,每当使用模块时,就产生一个新的符号来表示它的每一个局部变量。产生的新符号具有唯一的名字,互不冲突,有效的保护了模块内外的每个变量的作用范围。首先我们来看Module函数,这个函数的第一部分参数,里说明的变量只在Module内起作用,body执行体,包含合法的Mathematica语句,多个语句之间可用“;”分割下面定义有初值的变量t,Mathematica默认它为全局变量: In[1]:=t=l0 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] Out[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] Out[8]=a+b+

Mathematica中的模块允许你把某变量名看作局部变量名。然而

又存在有时你又希望它们为全局变量时但变量值为局部的矛盾,这时我们可以用Block[]函

2

数。下面是一个含有全局变量x表达式,使用x的局部值计算上面的表达式:

In[9]:=x^2+1 Out[9]=1+x

In[10]:=Block[{x=a+1},%] Out[10]=1+(1+a)

In[11]:=x Out[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^2 Out[12]= i

在计算i+m的整个过程中使用块中i的局部值: In[13]:=Block[{i = a},i+m] Out[13]=a+a

而对于下面的例子,只有直接出现在i+m中的i,才被看作局部变量: In[14]:=Module[{i=a},i+m] Out[14]=a+i

222

2

2

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形式分别定义阶跃函数的正数和负数部分: 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加上第三个条件结果,这允许你测试的结果既不是真也不是假的情况下使用它: 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]} 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

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^2Mathematica中的函数While和For循环总是在执行循环体前对循环条件进行测试,一旦测试结果为假,就中止While和For循环,因此,循环体的计算总是在测试结果为真的情况下进行的。

222222

3.一些特殊的赋值方式

一些赋值方式在循环结构中有时能带来一些方便。 i++ 变量i加1 i-- 变量i减1 ++i, 变量i先加1 --i 变量i先减1 i+=di i加di i-=di i减di x*=C x乘以C x/=c x除以c

{x,y}={y,x} 交换x和y值

4 重复运用函数

我们除了可用Do、While、For等进行循环计算外,我们还可以运用函数进行编程,运用函数编程结构你能得出非常有效的程序,例如Nest[f,x,n]允许你对某一表达式重复运用函数f 。 给出重复运用函数的方式:

Nest[f,expr,n] 对表达式expr重复调用函数f n次

FixedPoint[f,expr,n] 对表达式expr重复调用函数f n次,直到结果不变为止 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] 67 22 7 2 0

Out[3]=0

7.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}] 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]] Out[7]=

In[8]:=Catch[h[-6]] Out[8]=error

X=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 打开文件从文件末写 ( ) 结合率 [ ] 函数 { } 一个表

<*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的无限精度数值 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无关的数字因子 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]的二重积分

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]]

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元素前插入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}] 由参数方程在参数变化范围内产生的曲线

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] 设置线宽为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秒时终止

MemoryConstrained[expr,b] 计算expr,当耗用内存超过b字节时终止运算 Print[exprl,expr2,...] 顺次输出expri的值

Input[] 产生一个输入对话框,返回所输入的任意表达式 Input[\"prompt\"] 同上,prompt为对话框的提示 Pause[n] 运行暂停n秒

因篇幅问题不能全部显示,请点此查看更多更全内容

Top