Mathematica实例分析

更新时间:2024-03-23 22:41:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第二章 Mathematica简介

Mathematica是一个符号计算与数值计算的通用数学软件包,是由美国的物理学家Stephen Wolfram所领导的一个小组开发成功并推向市场的。Mathematica由最初的1.0、1.2、2.0、2.2、2.4、3.0版,到现在的4.0版,目前国内常用的版本是Windows下的3.0及4.0版。与Mathcad和MATLAB相比,Mathematica才称得上是一个真正的数学符号计算软件包,因为只有它的内核是以符号计算为基础的,比如你可以定义一些数学规则,让它为你进行符号推导演算工作。在Mathematica中,你可以像Mathcad那样进行草稿式的数学计算,你也可以像MATLAB一样进行命令式的数学计算。本章以4.0版为基础,介绍Mathematica的使用方法。

2.1 Mathematica的集成环境及基本操作

当Mathematica运行时,会出现如图所示的窗口。

右边的小窗口,我们称为数学工具面板,它包含多种数学符号,更多的符号可从命令菜单File/Palettes中得到,利用它,可以像Mathcad一样输入数学算式,比如上面计算的积分,完全可以通过数学工具面板,

2-1

在Mathematica中写成?x2Sin[2x]dx的形式,但这种输入方法有两个问

0?题:首先,Mathematica的输入操作不如Mathcad方便,其次,由于Mathematica的函数及符号太多,导致这种输入方法效率太低。因此,我们对这种直观的命令输入方法将不做过多的介绍。有兴趣的读者可以查阅相关的帮助主题。笔者认为,使用Mathematica计算数学问题最有效的方法是,直接通过键盘输入每个函数所代表的英文字符串。

左边的大窗口,Mathematica称之为Notebook,Mathematica可以将在Notebook中输入的命令存入一个扩展名为“.nb”的文件中,首次进入时默认的文件名为Untitled-1.nb。Notebook与Mathcad中的工作表一样,你可以的其中输入数学算式并让Mathematica为你计算。Notebook窗口中右面最小的“]”,Mathematica称为cell(细胞),每个cell可以输入多个命令,每个命令间用分号分隔,并且一个cell也可能占用多个行,若干个cell组成更大的cell。如果想删除某个cell,只要用鼠标单击此cell右边的“]”,然后按删除键即可。

每次进入Notebook,并且重新建立一个文件,Mathematica总是将你所输入的命令与它计算的相应结果进行编号。输入按顺序用In[1]、In[2]、In[3]...,相应的输出结果用Out[1]、Out[2]、Out[3]...(注:非计算信息不显示输出编号),你可以在运算过程中,使用Out[n]来调用以前的结果,也可以使用%(上一次计算的结果)、%%(上两次计算的结果)、%%%(上三计算的结果),依此类推。你可以将Mathematica看成是一个超级的计算器,如果你在In[n]下输入一个或多个命令,然后按“Shift+Enter”,Mathematica就会执行这些命令并以Out[n]的形式给出其计算结果。本章的所有例子都是直接从Notebook中拷贝过来的,我们去掉了In[n]及Out[n]的标号,但将输入用五号黑体显示,输出用五号字显示。

%

A:=5,1,2,1,6,2,1,2,7; De

B:=InverseA;W=2 A+如果输入的命令以分号结束,则Mathematica不会给出此命令的输

出结果(绘图命令及非计算信息除外)。你可以调用Help菜单随时获得系统详细的帮助,此外,你也可直接在Notebook中键入类似下面的字符串来获得帮助:

8<8<8<@D@D:>:>:>8<8<8<8<8<8<62859,11559,22659,11359,74159,22859,11459,22759,8 5.1,0,0,0,1,0,0, 0,1,0,0,0,1,0,0, 0,2-2

?I* 列出以字母I开头的所有命令清单

?Intege* 列出以Intege开头的所有命令清单

?Integrate 列出此命令的帮助

??Integrate 列出此命令的更详细的帮助

下面简要介绍一下Mathematica的部分菜单命令。

1、File菜单

“New”建立一个新的Notebook;“Open”打开已有的Notebook,即以扩展名为nb形式存在的文件;“Close”关闭当前Notebook;“Save”保存当前Notebook,其默认名为Untitled-1.nb、Untitled-2.nb,??的形式;“Save As”将当前Notebook换名存盘;“Save As Special”将当前Notebook以某种特殊文件格式保存,包括:3.0以前版本的文件格式、文本格式、Mathematica软件包格式、多细胞格式、Tex格式、超文本格式;“Open Special”打开特殊格式的文件,它主要用于各平台间的转换,比如将UNIX系统用Mathematica写的程序读入Windows下的Mathematica中。 2、Edit菜单

这些选项中有些与Mathcad中的Edit菜单的选项用法相同,我们只介绍一部分。“Clear”删除选定内容(直接删除,不放入剪裁板);“Copy As”将选定的内容按指定的格式拷贝至剪裁板;“Save Selection As”将选定的内容按指定的格式保存到文件中;“Selecet All”选定Notebook中的全部内容;“Insert Object”插入一个OLE对象;“Motion”主要用于控制光标的移动;“Expression Input”使用此菜单(主要是用快捷键)可以像Mathcad一样,在Notebook中输入形象化的数学公式;“Preference”通过这个选项,可以修改Mathematica的所有系统运行参数。

3、Cell菜单

“Convert To”将细胞从一种形式转换为另一种形式,例如输入Integrate[x,x]并将光标定位在此细胞内,然后选择“Convert To Traditional Form”,会将此行转换为?xdx的形式;“Display As”改变细胞的显示形式;“Cell Properties”用于设定细胞的各种属性;“Cell Grouping”合并或拆散所选定的细胞;“Divide Cell”将一个细胞拆成若干个细胞;“Merge Cells”将选定的多个细胞合并成一个细胞;“Animate Selected Graphics”此命令可以将用户选定的一系列图形细胞以动画方式连续播放;“Make Standard Size”此命令可以将图形恢复到默认的尺寸。

4、Format菜单

在Notebook中,我们可以编排和打印与Word效果相似的文稿,Format菜单就是用于此目地的。“Style”用来设置选定内容的文本风格;

2-3

“Screen Style Environment”指定Notebook的窗口风格;“Printing Style Environment”指定当前Notebook的打印风格;“Show Expression”选中一个或多个细胞,选择此菜单,你会看到Mathematica在磁盘上保存此细胞的完整形式;“Option Inspector”与菜单Edit→Preference基本相同;“Style Sheet”用来设置整个Notebook的显示风格;“Edit Style Sheet”个性当前Notebook的显示风格;“Font”选择字体;“Face”此选项设置字体的样式,其中Plain为普通格式、Bold为粗体字、Italic为斜体、Underline为下划线;“Size”以磅为单位设置字体的大小;“Text Color”设置前景颜色;“BackGround Color”设置背景颜色;“Chose Font”类似于Word中字体的对话框,可以选择字体、字号及字体样式等;“Text Alignment”按某种形式,对齐选定的内容;“Word Wrapping”若当前细胞内某行的长度超过当前Notebook窗口所能显示的长度时,通知Mathematica作怎样的调整,一般选择是Wrap at Window Width,即按当前窗口宽度进行折行;“Cell Dingbat”在选定的细胞前面加上特殊的标志;“Horizontal Line”对选定的细胞添加不同风格的水平线;“Show Ruler”打开或关闭类似于Word中的标尺;“Show Toolbar”打开或关闭Notebook窗口中的常用工具栏;“Show Page Breaks”显示及隐藏分页线及页码;“Magnification”用于改变Notebook中各细胞在屏幕上的显示比例.

5、Input菜单

“Get Graphics Coordinates”获得二维图形中点的坐标,此菜单只含有提示信息,其用法是:将鼠标指向图形,然后按住Ctrl键,就可看到图形中的坐标;“3D ViewPoint Selector”指定三维图形的视角(它实际上是生成一个字符串,用于Plot3D等命令),例如键入 Plot3D[x^2-y^2,{x,-1,1},{y,-1,1}]

画出马鞍面的图形后,我们想改变此图形的观察角度,将上行变为 Plot3D[x^2-y^2,{x,-1,1},{y,-1,1},]

并将光标停留在最后一个逗号的后面,调用此菜单,拖动鼠标旋转立方体,找到一个合适的角度后,单击Paste按钮,上一行将变成类似于 Plot3D[x^2-y^2,{x,-1,1},{y,-1,1},ViewPoints->{-1,5,-2}] 的形式,重新执行此行就改变了图形的观察角度;“Color Selector”用法同上,但改变图形的颜色;“Record Sound”调用Windows中的录音机程序进行录音;“Get File Path”得到文件的详细路径;“Create Table/Matrix/Palette”创建表格、矩阵或模板,但它们的本质都是二维表;“Copy Input From Above”复制上一次输入的内容;“Copy Output From Above”复制上一次输出的内容;“Start New Cell Below”在当前细胞的后面,插入一个新细胞,其快捷键是Alt+Enter,另外,在Notebook 后面的空白处单击鼠标,然后输入内容,则系统将会将此内容分配给一个新细胞;“Complete Selection”此菜单对于输入Mathemtica命令,

2-4

是相当有用的,例如,对于Plot3D命令,你只记住了它的前3个字母,那么,在Notebook中键入Plo后,调用此菜单或按快捷键Ctrl+K,系统会弹出一个对话框,里面包含所有以Plo开头的命令,选择Plot3D命令,系统就会为你补齐此命令余下的字母;“Make Template” 此菜单对于输入Mathemtica命令,也是相当有用的,比如,你输入了Plot3D后,忘记了此命令的格式,可以调用此菜单或者按快捷键Shift+Ctrl+K,系统将会在Plot3D后,添加如下字符串

Plot3D[f, {x, xmin, xmax}, {y, ymin, ymax}] 将它修改成你需要的具体形式即可。

6、Kernel菜单

“Evaluation”选项含:“Evaluate Cells”计算选定的细胞(快捷键Shift+Enter),“Evaluate In Place”计算选定的内容,并在同一位置用其计算结果替换此内容,“Evaluate Notebook”计算当前整个Notebook;“Abort Evaluation”中止当前的计算,快捷键为Alt+.;“Start Kernel”Notebook只是负责对输入及输出进行格式化的工作,真正进行数学运算的程序称之为系统内核(Kernel),本菜单将Kernel装入内存,注意,Mathematica进行第一次计算时,就自动装入Kernel,除非系统出现问题,否则不用执行此菜单;“Quit Kernel”关闭已经打开的系统内核;“Delete All Output”删除Notebook中的所有输出结果。 7、Find菜单

“Find”查找或者替换Notebook中的内容;“Enter Selection”此菜单可将选定的内容直接送入Find菜单的Search For文本框中,省去了用户直接输入字符串的过程;“Add/Remove Cell Tags”在Notebook中,可以为每个细胞取一个名字,它称为细胞标签,此菜单可给某个细胞加上标签或去掉标签;“Cell Tags”此菜单可快速选定Notebook中具有标签的细胞;“Show Cell Tags”显示或者隐藏细胞标签。

8、Window菜单

“Stack Windows”在屏幕上层叠式排列已经打开的各个Notebook窗口;“Tile Window Wide”水平横向平辅各个窗口;“Tile Window Tall”纵向排列各个窗口;“Message”打开一标题为Message的窗口,它是Mathematica的信息提示窗口。

9、Help菜单

“Help Browser”这是Mathemetica提供的一个强大的文本帮助系统,其下面的菜单Find Selected Function、Master Index、Built-in Functions、Mathematica Book、Getting Started/Demos、Add-ones都是此菜单的一个子项;“Why the Beep?”Mathematica试图对你最近一次运算的错误信息做进一步解释。

2-5

2.2 Mathematica表达式及其运算规则

在本节中,我们将主要介绍Mathematica进行数学运算的基本工作原理及特殊符号的输入方式。

1、西腊字母及命令的直观输入

在Notebook中,有两种输入西腊字母的方法,一种是调用File→Palettes→BasicInput、BaiscTypesetting或CompleteCharacters→Letters→Greek菜单,此时会弹出一个含有西腊字母的数学工具面板,单击此面板的符号即可;另一种是直接通过键盘输入西腊字母所代表的标准名称,其格式为\\[Greek_name],例如,在Notebook中输入\\[Beta]后(注意大小写),将会显示β,下面是一些常用西腊字母的标准名称表。 α \\[Alpha] β \\[Beta] γ \\[Gamma] δ \\[Dalta] ε \\[Epsilon] δ \\[Zeta] ε \\[Eta] ζ \\[Theta] λ \\[Lambda] μ \\[Mu] ξ \\[Xi] π \\[Pi] ρ \\[Rho] ζ \\[Sigma] η \\[Tau] θ \\[Phi] ? \\[CurlyPhi] ω \\[Omega] Φ \\[CapitalPhi] Γ\\[CapitalGamma]

? \\[CapitalPi] ?\\[CapitalOmega]

\\[Psi] Σ

\\[CapitalSigma] Ω

另外,在刚开始使用Mathematica时,一般对有关数学运算命令及数学公式的输入都不是太熟悉,这时可以通过菜单File→Palettes的各个下级子菜单输入相关命令及公式,不过这种输入方法效率不高,建议还是少用为好。

2、表达式与表结构

Mathematica能够处理多种类型的数据形式:数学公式、集合、图形等等,Mathematica将它们都称为表达式。使用函数及运算符(+, -, *, /,^等)可组成各种表达式。

b FullForma*FullFormHeadS in@D@@DD@8

1,2, 3,

2-6

FullForm[]可显示出表达式在系统内部存贮的标准格式,而Head[]可得到某个表达式的头部,这对我们确定表达式的类型很有用处。

上面的{1,2,3,4}称为表(List),表是Mathematica中非常有用的结构。首先,表可以理解成数学意义下的集合,例如对集合

{1,{2,3},4,{5,6,7},8,9}

它是含有6个元素的子集合,其中{2,3}及{5,6,7}此集合的子集合。作为集合,有下面的各种集合运算。

Append[list,element]在集合list的末尾加入元素element Apply[Plus,list]将集合list中的所有元素加在一起 Apply[Times,list]将集合list中的所有元素乘在一起

Complement[list1,list2]求在list1中而不在list2中元素集合 Delete[list,{i,j}]删除集合第i,j处的元素 Delete[list,i]删除集合list的第i个元素

Flatten[list]展开集合list中的各个子集,形成一个一维表 FlattenAt[list,n]展开集合list中的第n级子集

Insert[list,element,{i,j}]插入第i个子集合的第j 个元素处 Insert[list,element,i]在list第i个元素的前面插入element Intersection[list1,list2,?]这是数学意义下的求交集命令 Join[list1,list2,?]将集合首尾相连,形成一个新的集合 Length[list]集合list中元素的个数

list[[i,j]]集合list中第i个子集合的第j个元素 list[[i]]集合list中第i个元素

Partition[list,n]将集合list分成n个元素一组

Prepend[list,element]在集合list的开头加入元素element

ReplacePart[list,element,{i,j}]替换list中的第i,j处的元素 ReplacePart[list,element,i]替换集合list中的第i个元素 Reverse[list]翻转集合list中的元素

Sort[list]将集合list中的元素按升序排序

Table[f,{i,imin,imax},{j,jmin,jmax}]建立二维表或矩阵 Table[f,{i,imin,imax}]建立一个一维表或向量

Take[list,{m,n}] 给出list中从m到n之间的所有元素 Take[list,n] 给出前n个,Take[list,-n] 给出后n个 Union[list]合并集合list中的重复元素

Union[list1,list2,?]这是数学意义下的求集合的并集命令

下面是有关集合方面的一些运算。

s=Tablei^2+1,i, 0,Print\lengths=\Lengths,\lengths=8s@8

2-7

s1=PartitionSqrt s1,2,5,s1

s2=Flatten1,2,s3=Inserts2, 171,2,5,17,Intersection s,其次,对于一维表,可以理解成数学意义下的向量,对于二维表,

可以理解成矩阵,因此,有如下的矩阵函数,其中a,b为向量,p,q为常量,M为方阵,A,B为同阶普通矩阵,具体例子参见下一节。

Dot[a,b]或a.b 向量a与b的数量积 Cross[a,b] 向量a与b的矢量积 P*A+q*B 矩阵与数的乘法运算 A*B A与B的对应元素相乘

M^2 将矩阵M中的每个元素平方

P.Q 矩阵乘法运算,其中P为m×k阶矩阵,Q为k×n阶矩阵 Det[M] 求方阵M的行列式

MatrixForm[A] 以矩阵的形式显示A MatrixPower[M,n] 矩阵M的n次幂 Transpose[A] 矩阵A的转置矩阵 Eigenvalues[M] 求矩阵M的特征值 Eigenvectors[M] 求矩阵M的特征向量

Eigensystem[M] 求矩阵M的特征值与特征向量 IdentityMatrix[n] 建立一个n×n的单位阵

DiagonalMatrix[list] 建立一个对角阵,其对角线元素为表list Inverse[M] 求方阵M的逆矩阵

LinearSolve[A,b] 求线性方程组AX=b的解

NullSpace[A] 求满足方程AX=0的基本向量组,即零解空间 RowReduce[A] 将矩阵A进行行变换 QRDecomposition[M] 矩阵M的QR分解

SchurDecomposition[M] 矩阵M的Schur分解 JordanDecomposition[M] 矩阵M的Jordan分解 LUDecomposition[M] 矩阵M的LU分解 3、Mathematica中数的类型与精度

在Mathematica中,进行数学运算的“数”有四种类型,它们分别是Integer(整数)、Rational(有理数)、Real(实数)、Complex(复数)。

@@DD??????????????9=9=9=9=@D@D??????????????9=@D????????????9@D??=8<

10,17,26,37,5 3,5,10,17,26,37, 510,17,26,37, 5 1,2-8

不带有小数点的数,系统都认为是整数,而带有小数点的数,系统则认为是实数。对两个整数的比,如12/13,系统认为是有理数,而a+b*I形式的数,系统认为是复数。Mathematica可表示任意大的数和任意小的数,其它计算机语言比如C、Basic是做不到这一点的,例如 !5001.220136825991110 ′1 A:=Table1i+j,i,1,8,j,1,8;De

其中//N表示取表达式的数值解,默认精度为16位,它等价于N[expr],一般形式为N[expr,n],即取表达式n位精度的数值解。如

,NDetAN p, ′2.12669006510607072000158763622 3.141592653589793238462643383279502884197169399使用Rationalize[expr,error]命令可将表达式转换为有理数,其中

error表示转换后误差的控制范围。例如

Rationalize3.1415926,10^11 -Rationalize3.1415926,10^173??@??HL8<8

0Solvex^3-2 x^2+3 x-6??x?2,x?-?上面的行列式|A|的计算结果,系统给出的是一个分数值,在

Mathematica中,不同类型的数进行运算,其结果是高一级的数,如有理数与实数运算的结果是实数,复数与实数的运算结果是复数,依此类推。由于整数与有理数的运算级别最低,因此,在进行数学计算中,如果可能的话,就尽量用精确数,即整数或有理数。另外,“==”称为逻辑等号,定义一个等式要用逻辑等号。 A:=5,1,2,1,2,6,1,2,7;Invers@D98<9??=9??=3,x?? 8<8<8<@D2-9

其中Inverse[]是求逆矩阵命令。在Mathematica中,一行中可以输入多个命令,各命令间用分号分隔。另外,分号还有一个作用是通知Mathematica,只在内存中计算以分号结尾的命令,但不输出此命令的计算结果。如果表达式太长,一行写不下,可以分2行写,系统会自动判断一个表达式是否输入完毕。对于需要多行输入的表达式,建议每行用运算符结尾。下面我们简要说明一下Mathematica的赋值符号及相关命令。在Mathematica中,对变量赋值,有两种方法。A:=expr的意思是将表达式expr的值赋给A,但Mathematica并不立即执行此项操作,一直到用到A的值时,Mathematica才真正的将expr的值赋给A,即所谓的延迟赋值。在大部分情况下,我们都采用延迟赋值的形式为表达式赋值。另一种赋值方法是我们所熟悉的赋值形式,即A=expr或A=B= expr的形式,一般称为立即赋值。只要一执行该命令,Mathematica将expr 的值赋给A。另外,对于变量,Mathematica不像C语言那样,需要申请后再使用,也不用事先确定变量的类型,这些问题都由Mathematica来自动处理。对于不需要的变量,可以使用Clear命令将变量从内存中清除出去,以节省内存空间,例如

Clear[A] 清除变量A,其简写形式是A=. Clear[A,B,W] 清除变量A、B、W

Clear[“A*”,”B*”] 清除以A、B开头的所有变量

可以使用Precision[expr]或Accuracy[expr]返回表达式的精度,

2:8>:>8<><8<8<@D8<8<8<

29,-13,29,-19,113,-289,0,-1, B:=5.0,1,2,1,2,6,1,2,7 ;Invers0.222222,-0.333333,0.222222, -0.111111,3.66667,-3.11111,0.,-1.,下面的变量a是计算?e?xdx的数值积分,b是计算其符号积分,c和d

12只是输入的形式不同,但精度却不一样。

c=16

a:=NIntegrateExp-x^2,x,1,2

b:=IntegrateExp-x^2,x,1,2c=1.23;d=123100;Print\c=\Accuracyc,\@@D8

的常数有:Pi(π)、E(实数e)、ComplexInfinity(复数的无穷大)、I(复数

i)、Degree(1=π/180)、C(不定积分的任意常数),另外,D(导数运算符),N(取精度运算符)、O(泰勒展开的高阶无穷小量)。上面Print[]命令

2-10

的功能是打印表达式或者字符串,其格式为

Print[expr1,expr2,??]

expr1,expr2,??可以为任意合法的Mathematica表达式,如果为字符串,则需要双引号将字符串括起来。

在实际计算过程中,可能得到的结果中含有很小的数,为了以后计算上的方便,我们如果想去掉这样的数,可以使用命令

Chop[expr,dx] 若expr中的某个数小于dx,则用0来代替该数 Chop[expr]若expr中的数小于10-10,则用0来代替该数 下面是一个多项式曲线拟合问题的实际例子

data=

fx_=Fitdata,1,x,x^2,x^3,x 1.33227′10-15-6.66134′10-16x+1.x2+1.38778′10Chop f

可以用下面的几个函数来判断表达式运算结果的类型,其中True和False是系统内部的布尔常量。

NumberQ[expr]判断表达式是否为一个数,返回True或False IntegerQ[expr]判断表达式是否为整数, 返回True或False EvenQ[expr]判断表达式是否为偶数,返回True或False OddQ[expr]判断表达式是否为奇数,返回True或False PrimeQ[expr]判断表达式是否为素数,返回True或False Head[expr]判断表达式的类型 PrintHead0.5,\\Head12,\\Head1,2,RealRational

4、常用数学函数

Mathematica的数学运算,主要是依靠其内部的大量数学函数完成的,下面我们依次列出常用的数学函数,其中x、y、a、b代表实数,z代表复数,m、n、k为整数。所有的函数或者是它的英文全名,或者是其它计算机语言约定俗成的名称,函数的参数表用方括号[]括起来,而不是用圆括号。另外,Mathematica对大小写敏感。

●数值函数

Round[x] 最接近x的整数

Floor[x] 不大于x的最大整数 Celing[x] 不小于x的最小整数 Sign[x] 符号函数

Abs[z] 若z为实数,则求绝对值,为复数,则取模 Max[x1,x2,?]或Max[{x1,x2, ?},?] 求最大值 Min[x1,x2,?]或Min[{x1,x2, ?},?] 求最小值

x+Iy,Re[z],Im[z],Conjugate[z],Arg[z] 关于复数的基本运算

8<8<8<8<8<8<8<@D@8

@@D@??D@8

●随机函数

Random[] 返回一个区间[0,1]内的一个随机数

Random [Real,{xmin,xmax}]返回一个区间[xmin,xmax]内的随机数 Random[Integer] 以1/2的概率返回0或1

Random[Integer,{imin,imax}]返回位于[imin,imax]间的一个整数 Random[Complex] 模为1的随机复数

Random[Complex,{zmin,zmax}] 复平面上的随机复数 SeedRandom[] 使用系统时间作为随机种子 SeedRandom[n] 使用整数n作为随机种子

●整数函数及组合函数

Mod[m,n],Quotient[m,n] m/n的余数及商

GCD[n1,n2,?],LCM[n1,n2, ?] 最大公约数及最小公倍数 FactorInteger[n] 返回整数n的所有质数因子表

PrimePi[x],Prime[k]返回小于x的质数个数及第k个质数 n!, n!! 整数n的阶乘及双阶乘 Binomial[n,m],Mutinomial[n,m,?]计算

n!m!?(n?m)!,

(n?m??)n!?m!??

Signature[{i1,i2,?}]排列的正负符号 ●初等超越函数

这些函数的名称一目了然,我们不多加解释。它们是:Sqrt[z]、z1^z2、Exp[z]、Log[z]、Log[b,z]、Sin[z]、Cos[z]、Tan[z]、Cot[z]、Csc[z]、Sec[z]、ArcSin[z]、ArcCos[z]、ArcCsc[z]、ArcSec[z]、ArcTan[z]、ArcCot[z]、Sinh[z]、Cosh[z]、Tanh[z]、Coth[z]、 Csch[z]、Sech[z]、ArcSinh[z]、ArcCosh[z]、ArcTanh[z]、ArcCoth[z]、ArcCsch[z]、ArcSech[z]。

●正交多项式

LegendreP[n,x], LegendreP[n,m,x] 勒让德多项式 ChebyshevT[n,x],ChebyshevU[n,x] 切比雪夫多项式 HermiteH[n,x] Hermite多项式

LaguerreL[n,x] Laguerrel[n,a,x] 拉盖尔多项式 JacobiP[n,a,b,x] 雅可比多项式 ●特殊函数

此处我们将不给出特殊函数的具体表达式,读者可查阅相关资料。 Beta[a,b],Beta[z,a,b] Bata函数及不完全Beta函数 Gamma[z],Gamma[a,z] Gamma函数及不完全Gamma函数 Erf[z],Erf[z0,z1] 误差函数及广义误差函数 BesselJ[n,z],BesselY[n,z] 贝赛尔函数

2-12

BesselI[n,z],BesselK[n,z] 修正的贝赛尔函数

ExpIntegralE[n,z],LogIntegral[z] 指数积分与对数积分 ●统计分布函数

启动Mathematica时,这些函数并没有装入内存,而是以软件包的形式(在磁盘上以name.m的形式存贮)存于Mathematica目录下的\\AddOnes\\StandardPackages\\Statistics子目录中,每个文件中都含有若干个统计函数,读者可进入此目录打开每个扩展名为.m的文件,观察文件中所列出的统计函数,并使用命令“<

<

Mathematica多占用点内存不介意的话,可以使用

<

中的函数都读入内存,此时,下面的函数就都能使用了。

BernoulliDistribution[p] 均值为p的离散贝努利分布 BinomialDistribution[n,p] 概率密度为p的二项式分布

ChiSquareDistribution[n] 具有n个自由度的χ分布 DiscreteUniformDistribution[n] 离散的均匀分布 ExponentialDistribution[λ] 指数分布

FratioDistribution[n1,n2] 分子为n1分母为n2的F比率分布 GammaDistribution[α,λ]形状参数α及尺度参数λ的Gamma分布 NegativeBinomialDistribution[r,p] 负二项分布 NormalDistribution[μ,ζ] 正态分布 PoissonDistribution[ζ] 泊松分布 RayleighDistribution[ζ] 瑞利分布

StudentDistribution[n] 具有n自由度的学生式分布 UniformDistribution[a,b] 区间(a,b)上的均匀分布 WeibullDistribution[α,β] 威布尔分布 PDF[Distribution,x] 关于x的概率密度函数 CDF[Distribution,x] 关于x的累积分布函数 Quantile[Distribution,q] 第q个分位数 Mean[Distribution] 均值

Variance[Distribution] 方差

StardardDeviation[Distribution] 标准差

CharacteristicFunction[Distribution,t] 特征函数 Random[Distribution] 具有特定分布的伪随机数 5、自定义函数

在Mathematica中定义一个新函数后,其用法与内部函数是一样的,

2-13

其定义形式为

fun[var1_,var2_,?]:=expr 或 fun[var1_,var2_,?]=expr

其中函数变量后面的下划线必不可少,以上面的var1_为例,其意思是让var1匹配所有表达式,但我们可以在下划线的后面限定变量的类型,如f[n_Integer]的意思是变量n是一个整数。例如

,fx_=SimplifyDExp2 xSinx,x ?2x11Cosx+2Sin 1gx_,y_:=x^2+fy;gMathematica中的函数调用是递归的,就是说,函数可以调用自身,

下面是计算阶乘的函数子程序。

Cleara,k;ak_Integer:=k*ak-1;a0

Print\30!=\a30,\30!=265252859812191058636308480000000由于限制k为整数,所以对a[10.0],Mathematica是不会计算的。系统中的许多内部函数都是利用递归调用实现的,$RecursionLimit是系统进行递归调用的最大次数,默认值为256,你可以将它修改为一个合适的值,这只需对$RecursionLimit重新赋值即可。

对于复杂的函数定义,可以用模块Module[]定义,其形式为

fun[var1_,var2_,?]:=Module[{x,y,?},statement1; statement2; ?; statementN]

其中变量x,y称为局部变量,它只在此函数定义的内部起作用(实际上,Module[]就是其它计算机语言中的函数子程序,更进一步解释见第5节)。另外,对于复杂的函数定义,一般要应用条件判断及循环结构,第5节我们将要详细介绍这方面的内容。例如,上面计算阶乘的例子可用模块形式书写为 ffn_:=Modulea,k,a0=1;ak_:=kak-1;an; 3041409320171337804361260816606476884437764156896051200000000如果没有Return[expr]命令,Module[]返回最后一次计算结果作为函数值。还有,在某些情况下,你可能需要更改Mathematica内部函数定义,以适合自己某种特殊要求。例如对Log[x^s]和Log[x y],系统并不直接化成s Log[x]和Log[x]+Log[y]的形式,这我们可以通过更改Mathematica对函数Log[]的定义来做到这一点,这要用到以下函数

Unprotect[command] 移去系统对命令command的保护状态 Protect[command] 加上系统对命令command的保护状态 请看下面的具体做法。 Cleara,b,s;PrintLogab,\\Loga^s;Unprotect LLogabLog

@D@@@D@D8

LMathematica中的函数定义还有以下形式:

Function[x,body] 定义以body为函数体的纯函数,其中x可以 用户提供的任何变量来代替

Function[{x1,x2,?},body] 同上,但定义多个变量的纯函数 Body& 若函数体body是单变量函数,此变量规定为#,若为多个 变量,则第一个变量为#1,第二个变量#2,依此类推

NestFunctionw,111+@D@D@D@D@D@D<8@D@D<8@D@D@D<

Loga_b_:=Loga+Logb;Loga_^s_:=sLoga;ProtectLogab,Log a Loga+Logb,sLog

#^2& 1

6、函数及表达式的变换规则

●expr/.rules 变换法则rules只对expr中的每项使用一次 Integratex^2Sinnx,x,0,

-2n3

其中“→”是键入“->”的结果。另外,如果变换条件只有一个,可以不用集合定界符{},例如 x+y+z .x +1●expr//.rules 反复对expr使用rules,直到结果不变为

Sin4 a.Sinn_x_?Sin2

@@??HLDD@DHL@8

●Nest[f,x,n] 函数f以x为变量,进行n次复合运算 实质上,f是函数的头,即Head[f],例如

+HeadSinx^2

zNestSin,SinSinSinSinSin z xgx_=11+x;Nestg,11+@@D@D@@@@@DDD@D??HL@D 1+x,fx,ffx,fffx

●NestList[f,x,n] 同上,但形成一个复合函数序列的集合

Compose[f,g,?,h,x] 函数复合,生成f[g[?h[x]]] Composition[f,g,?,h] 同上,但不带有自变量

ComposeList[{f,g,?,h},x]生成复合序列{x,f[x],g[f[x]],?}

xNestListf, hComposef,g,fg h gCompositionf,@@@DDfg h

ComposeList●FixedPoint[f,x] 对x重复f运用,直到结果不变为止

●FixedPointList[f,x] 同上,但列出所有中间计算结果

●FixedPointList[f,x,SameTest->Comp] 对两个连续的结果运用 比较关系comp,比较结果为真时停止运算

下面以利用牛顿迭代法求5开平方根为例,说明其用法。

sqrt5x_:=12x+5x@D8@D@@D@@@DD@@@@DD@@@@@DDD<@D@@@DD@D@D@D@@@DD@8

Compositionf ,gf,g, hx,fx,gfx,hgf x

FixedPointsqrt5,2,SameTest? 2.2 FixedPointListsqrt5●FoldList[f,x,{a,b,?}] 构成集合{x,f[x,a],f[f[x,a],b],?}

Fold[f,x,{a,b,?}] 给出函数FoldList的最后一个元素 FoldListf,x,a, b, ,x,fx,a,ffx,a,b,fffx,a,b Foldf,x,a, b,@D??H??L??@H@DHLLD@D8<@8

fffx,a, b●Apply[f,{a,b,c,?}] 对集合运用f,得到f[a,b,c,?] Apply[f,expr] 对表达式的最高层应用f

Apply[f,expr,level] 对表达式的指定层应用f

A:=a,b,c,d;Applyf,A,Applyf, A,

fa,b,c,d●Map[f,expr] 将函数f作用到表达式第一层的每个部件上

Map[f,expr,level] 将f作用到表达式第n层的每个部件上 MapAll[f,expr] 对表达式expr的所有部件应用f

MapThread[f,{expr1,expr2,?}] 对expr1及expr2的相应元素运用f

MapThread[f,{expr1,expr2,?},lev]对给定层的表达式运用f

A:=f@@@DDD8<8<8@D@D<8@8<8

,,fa,b,fc●Scan[f,expr] 依次计算对expr中的每个元素运用f的值

Scan[f,expr,level]同上,但在指定层上计算

A:=a,b,c,d a c●Array[f,n] 生成表{f[1],f[2],?,f[n]} Array[f,{n1,n2}] 同上,但生成一个二维表

Array w ww1,w2,w3,w4,w5, Arrayw, 3,

w1,1,w1,2,w2,1,w2,2●Seclect[expr,f] 在expr中挑选出函数f为True的元素

Seclect[expr,f,n] 同上,但只选出前n 个使f为True的元素

●Operate[p,f[x]] 算子函数,给出p[f][x]

Operate[p,f[x],n] 同上,但在函数的第n层应用p

8<8<8@D@D<8@8d1=3,5,12,9,4,7,1;Selectd1,# 95,12, fOperatep, fp Operatep,fgxpf g Operatep,fgx2-17

pf Operatep,fgx gf

@D@@D@@@DD@@D

g

2.3 符号数学运算

Mathematica的最大优点就是能够进行各种复杂的数学符号计算,下面我们分类介绍它的符号计算功能。 1、代数多项式运算

多项式是代数学中最基本的表达式,下面分类给出关于它的各种数学运算。

●基本运算

Expand[poly] 将多项式poly展开为乘积与乘幂

Expand[poly,expr] 只展开poly中与expr相匹配的项 Factor[poly] 对多项式poly进行因式分解

FactorTerms[poly] 提取多项式poly中的数字公因子

Collect[poly,x] 以x为变量,按相同的幂次排列多项式poly Collect[poly,{x,y,?}] 同上,但以x,y为变量

PowerExand[expr] 将expr中的(x y)p变为xpyp,(xp)q变为xpq 请见下面的例子。

Facto●多项式的结构

Length[poly] 列出多项式所含的项数

@HHLLDH@LHHLLD@DHLExpand1+1+x^2^2^2,1 +x22+2x +Expand 1+1+x^2^2 x4+8x2+8x4+422+2x +2-18

Exponent[expr,form] 给出expr中关于form的最高幂次 Coefficient[expr,form] 给出expr中关于form的系数 Coefficient[poly,form] 以form为变量,将poly前面的 系数按幂次由小到大顺序用集合形式列出 下面是计算实例。

t=Expand2 a+3 x^34 x+5 y ^2

●多项式的四则运算

PolynomialQuotient[poly1,poly2,x] 求poly1除以poly2的商, 其中poly1与poly2均以x为变量,其结果舍去余式 PolynomialRemainder[poly1,poly2,x] 求poly1/poly2的余式 PolynomialGCD[poly1,poly2] 求poly1与poly2的最大公因式 PolynomialLCM[poly1,poly2] 求poly1与poly2的最小公倍式 FactorTerms[poly] 提取poly中所有项的公因子 FactorTerms[poly,x] 以x为变量,提取公因子 FactorList[poly] 以集合形式给出poly的公因子

InterpolatingPolynomial[{{x1,y1},{x2,y2},?},x] 求通过数据

点(x1,y1),(x2,y2),?且以x为变量的拉格朗日插值多项式

下面是关于多项式四则运算的例子。

@HLHLD@DHLHLH@DLHL@D@D8<@DHLHL128a3x2+576a2x3+864ax4+432x5+320a3xy+1440a2x2y+ 2160ax3y+1080x4y+200a3y2+900a2xy2+1350ax2y2+675 tCollect432x5+200a3y2+x4864a+1080y+x3576a2+2160ay+675x2128a3+1440a2y+1350ay2+x320a3y+900a2y2

t ExponentCoefficientt , x 6576a2+2160ay+CoefficientListt

128a3x2+576a2x3+864ax4+432x5, 320a3x+1440a2x2+2160ax3+1080x4,200a3+900a2x+1350ax2+67 tFactorTerms8a3+36a2x3+54ax6+27x9 16x2+40xy+2

PolynomialQuotient8@D@D<8HLHLHLHL<8@D@D<8HLHL<@HLDp1:=4-3 x^2+x^3;p2:=4+8 x+5 x^2+xFactorp1,Factorp2

-2+x21+x,1+x +2 PolynomialGCDp1,p2,PolynomialLCMp1,1+x,4-4x+x2 +4+8x+5x2x^2+1p1, p233- 8x2-19

PolynomialRemainderp1, p2-8 x-d=

InterpolatingPolynomiald,x4+-2+x Simplif2

●有理多项式运算

Numerator[expr] 给出表达式expr的分子部分

ExpandNumerator[expr] 只将表达式expr中的分子部分展开 Denominator[expr] 给出表达式expr的分母部分

ExpandDenominator[expr] 只将表达式expr中的分母部分展开 Expand[expr] 只展开表达式expr的分子,并将分母分成单项 ExpandAll[expr] 同时展开表达式expr的分子与分母 Together[expr] 将多个有理分式进行通分运算

Apart[expr] 将有理分式expr分解为一系列最简分式的和 Cancel[expr] 约去有理分式expr分子与分母的公因子 Factor[expr] 对expr进行因式分解 下面是有关有理多项式运算的例子。

@D8<8<8<8<8<@DH@LHLD

-2,4,-1,1,0,0,1,1,2,

2

t=x-1^22+x2 ExpandAl Togethe Apar1+ Facto ExpandNumerato2-3x+x2 1●表达式的化简 Simplify[expr] 化简expr,使其结果的表达式最短

-3+xHLHL??HLHLL@DHLHLHLHLHLHL@D@D@DHLHLHL@DHLHLHLHL@DHLHL 1+x x-3^2;Expan3x2-3+x21+x--3+x1+x+x32-3+x 129+3x-5x2+x3-3x9+3x-5x2+x3+x39+3x-5 x2-3x+x9+3x-5 x25-3+x222+194-3+x+14 1-1+x-3+x2 12-20

FullSimplify[expr] 同上,但将结果表达式中的所有函数展开 对于化简表达式,上面的两个命令差不多,但大部分情况下,我们更愿意用FulSimplify[],通过下面的例子,你可以看出它确实比Simplify[]好一点。 SimplifyCosx^2-Sin x Cos SimplifyGamma1+nn,FullSimplifyGamma1+nGamma1+nn,Gamma@@D@DD@D8@@D??D@@D??D<:@D@D> 2、三角函数运算

虽然Simplify及FullSimplify命令也能对三角函数表达式进行化简,但功能有限,在大部分情况下,我们对三角函数就使用以下命令。

TrigExpand[expr] 展开倍角及和差形式的三角函数 TrigFactor[expr] 用倍角及和差形式表示三角函数 TrigFactorList[expr] 给出每个因式及其指数的列表

TrigReduce[expr] 用倍角化简expr,使其结果的表达式最短 TrigToExp[expr] 使用欧拉公式将三角表达式化成复指数形式

ExpToTrig[expr] 将复指数形式的表达式化成三角函数形式表达式 下面是三角函数运算的例子。

t2=TrigFactor12 t5=TrigToEx-1214

@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@DH@D@D@DL8@D@D<:H@D@D@DL>@D@D t=Sin3 y Cos2 x+y-Cos3 x;t1=TrigExpan-Cosx33Cosx2Cosx2Cosy6Cosx2Cosy-CosxCosy2Sinx+CosxCosy4SinxSinx2+Cosx2CosySiny+2Cosy3Siny-CosySinx2Siny-3Sinx2Siny+CosxSinxSiny2-Cosy2SinxSiny2-2Cosx2CosySin Sinx2Siny3+CosxSinxSiny4-2Cos3x-Sin2x-2y+Sin2x+ t3=TrigReducet1,t4=TrigReducet1 -12-2Cos3x-Sin2x-2y+Sin2x+4y ?-3?x-12?3?x+414??2?x-2?y-411??-2?x+2?y+??-2?x-4?y-??2? Simplif2-21

1

4?-3?x-2-2?6?x+???x-4y+??5?x-2?y-??5?x+4?y-??? FullSimplif -Cos3x+Cos2x+ySin由此可见,Simplify[]与FullSimplify[]是针对所有代数运算进行

化简的函数,而TrigReduce[]只对三角函数的化简有效。

3、复数运算

Mathematica中的复数运算与其它数学运算没有什么区别,下面是有关复数运算的数学函数,其中I为系统内部变量,表示复数虚部。

x+Iy,Re[z],Im[z],Abs[z],Conjugate[z],Arg[z]以上分别为复数, 实部,虚部,模,共轭复数,辐角主值

ComplexExpand[expr]展开expr,并假设expr中所有变量都是实数

ComplexExpand[expr,{x1,x2,?}]展开expr, 假设x1,x2为复数 Mathematica的大部分内部函数,都是基于复数的,比如三角函数、指数与对数函数、贝塞尔函数等。 z=3+6 I7-I^2,Absz,Rez,Imz,Conjugatez,Arg3125HLI@D@D@D@D

HLMx

ComplexExpandTan2 x+I *3Sin4xCos4x+Cosh6y

z=.;ComplexExpandSinz Exp x4、方程求解

Solve[lhs==rhs,x] 求出x的解

Solve[{lhs1==rhs1,lhs2==rhs2,?},{x,y,?}] 求联立方程组 x,y,?的解

Reduce[{lhs1==rhs1,lhs2==rhs2,?},{x,y,?}] 同上,但给出 方程组所有可能的解,包括平凡解

Eliminate[{lhs1==rhs1,lhs2==rhs2,?},{x,y,?}] 消去方程组 中的变量x,y,?

expr/.solution 将解solution应用于表达式expr

Solve[]是求解方程或方程组的非平凡解的一个最简单的公式,下面是几个这方面的例子。

8HL??HL@D@D@D@D@D<:@BF>??@D@D@D@D@D@D@D@@D@DD@@D@@D@@D@@D+33?250,3,3105125,33250,3125-33?250,ArcTan1 +?Sinh6y Cos4x+Cosh?xCoshImzSinRez+??xCosRezSinh Im 0x=.;Solvex^4-8 x^3+24 x^2-32 x+15?? ?x?1,x?2-?,x?2+?,xSolve2 x+3 y??8,3 x+2 y??7, x,但是,Solve[]只能求出方程或方程组的理论解,下面的两例子中,

@D8@<8<8<8<8<8

第一个例子是能够求出理论解的,但若Mathematica都显示出来,可能要占据整个屏幕,此时我们只有利用//N或N[]命令从理论解计算它的数值解;对于第二个例子,根本没有理论解,因此Solve[]命令也求不出来的理论解,只能用下节的FindRoot[]命令求它的数值解。

x=.;Solvex^4+2 x^3+x+1??0,xx?-2.11769,x?-0.641445

Abs xSolveSolve::tdep :

Reduce[]与Solve[]的区别是:Reduce[]还能给出平凡解,而Solve[]

则只能给出非平凡解。

cSolveax+b??x?-b- cReduceax+b??a==0&&b==cEliminate[]的作用是:从方程组中消去若干个变量以简化方程组。

EliminateSolve%,x5、线性代数运算

Mathematica能够进行各种线性代数运算,其具体命令见上一节的第8页,这里我们只给出一些实际的例子。

Mathematica中的向量,没有行向量与列向量之分,在处理有关向量运算时,你一定要注意此点,请见下面的例子。

Cleara,b,A,B;a=1,2,3;b=3,4,Dota,b,Crossa,b@D??8<8<8<8<@D??8@<8@D<8Dè@8HL

0.858004,0.858004,2.11769,0.641x^2+y^2==4,Expx+y??6, x,Theequationsappeartoinvolvethevariablesto solvedforinanessentiallynon-algebraicwayx2+y2==4,?x+y==6, x,Solve ax==-b+ca&& 1ax^3+y??0,2 x+1-a y??.a? 2 1-ax3+a2x3==x?0.423854,x?-0.211927+1.06524x?-0.211927-1.06524?

@D8<8<8@D@D<88<@8

26,-2,4,A=2 DiagonalMatrix1,2,3-0,2,1,1,0,1,1, 1, 1,2,-2,-1,-1,4,-1,-1,- DetA,a.A,A.a,a.2-23

Mathematica能够进行与矩阵有关的各种运算,求方阵的行列式、矩阵的四则运算、求逆矩阵、解线性方程组、求矩阵的特征值与特征向量等(下面的例子续接上面的计算)。 B=3 A-2*MatrixPowerA,3;MatrixForm-5637

Cho

Cho

下面是线性代数中有关方程组理论的各种运算。对方程组

-5.56292,6.9018,1.,3.61268,1.48775,1.88<8<<@D@Diyk{8@D@D<:@>:>D??8<@D8@

,34,-3,4,15,-3,4,1598-178 1 InverseB.b,LinearSolve B,535933120609,218480120609,146935120609,535933120609,218480120609,14693 12060 EigenvaluesA6.43931+0.?,4.66112-4.44089′10-0.899568+4.44089′10-16?

6.43931,4.66112,0.8996.43931+0.?, EigensystemA4.66112-4.44089′10-16?,0.899568+4.44089′10-16?,-0.0497586+0.?,-0.389553+0.?,1.,-5.56292+8.17818′10-15?,6.9018-7.73409′10-15?,1 13.61268-4.96914′10-16?,1.48775+5.28252′10-17?,6.43931,4.66112,0.899568,-0.0497586,-0.389553,?x1?x2?x3?x4?0? ?x1?x2?x3?3x4?1

?2x?2x?2x?124?1其对应齐次方程的通解为

A=

NullSpaceA这表示,Mathematica为你求出的解是

8<8<8<@D8<8<1,-1,-1,1,1,-1,1,-3,2,-2,0,-

1,0,2,1,1,1, 0,2-24

?1??1?????01 c1???c2??

?2??0??????1??0?下面再求出非齐次方程的一个特解,这可使用LinearSolve[]命令,

注意,如果方程组有多个解,它也只能求出一个解。 LinearSolveA,0, 1,12

因此,此方程的通解为

@8,0,1 2?1??1??1??2???????010 c1???c2?????

?2??0??1???????1???0??2???0??也可以采用线性代数教材中所介绍的另外一种方法。先输入此方程

组的增广矩阵B,然后对此增广矩阵进行行变换。

AppendTransposeA,0,1,1

RowReduc由线性代数理论,这相当于将原方程组化为

1?x?x?x?124??2 ?

?x?2x?134??2@@D8:>8<> ;B=Transpos 2,1,-1,-1,1,0,1,-1,1,-3,1,2,-2,0,-12,0,0,1,-2,12,0,0,0,0,1,-1,0,-1, 由此,我们不难写出方程组的通解。

6、微积分运算 ●极限运算

Limit[expr,x->x0] 求当x→x0时,表达式expr的极限 Limit[expr,x->x0,Direction->-1] 同上,但求左极限 Limit[expr,x->x0,Direction->1] 同上,但求右极限

在Mathematica安装目录的\\AndOnes\\StandardPackages\\Calculus子目录下,有一个软件包Limit.m,它对极限命令Limit[]进行了各种扩

2-25

展,使适用计算的函数更广。在计算极限前,最好先装入此软件包。

<

LimitLimit@@HL??HLDD@H@@DL??D@HL@D??D1+x

,x?+InfinExpSinx-1x, x Pi-x Tanx,x?Pi2,Direction在Mathematica安装目录的\\AndOnes\\StandardPackages\\下,附加

了许多在Mathematica启动时没有装入到系统内部的数学软件包,它们的磁盘上的扩展名为“.m”,对每个软件包,都可以通过任何一个文本编辑软件如Notebook、NotePad、Word等打开它,研究它的用法,并通过“<<软件包目录名该目录下的文件名”装入此软件包,下面是软件包的清单:Algebra(代数软件包)、LinearAlgebra(线性代数软件包)、Statistics(统计软件包)、Culculus(微积分软件包)、DiscreteMath(离散数学软件包)、NumberTheory(数论软件包)、Geometry(几何软件包)、Graphics(图形处理软件包)、NumericalMath(数值分析软件包)。另外,在每个软件包目录下,都有一个文件“Master.m”,如果将此软件包装入,就装入了该目录下的所有软件包。比如装入所有微积分运算方面的软件包,可使用

<

f’[x] 函数f(x)的导数

f’’[x] 函数f(x)的二阶导数,更一般情况是下面的函数

D[f,x] 求导数

dfdx或者偏导数

dfdxnn?f?x

?f?xnnD[f,{x,n}] 求高阶导数或者高阶偏导数

?f?x?y?n

D[f,x,y,?] 求高阶混合偏导数

D[f,x,Nonconstants->{y,z,?}] 求f对x的偏导数,其中假设 变量y,z,?为x的函数 Dt[f] 求函数f的全微分df

Dt[f,x] 只求函数f对变量x的微分

Dt[f,x,Constant->{c1,c2,?}] 同上,但假设c1,c2为常数

2-26

下面是有关导数方面的一些数学运算。

2FullSimplify1+x2ux_,y_:=x^3 y+x^2 y^2-3 xy^3;ux,y,x,2, y, x6-Dgx,xy,zx,x,NonConstants?

Dt5 y^2+Siny??x^2Solve%,Dt y,Dty,x?Dtux, yDtux, y@DIM@D@8@D@D@D@@DD@D@D@D@@DD@D@D@D

fx_:=x2+1 ArcTanx;FullSimplify1+x21+4xArcTanx1+4xArcTanx f'x,f'' ,6x+41+3x2ArcTan ,6x+41+3x2ArcTan 2Dfx,x,Dfx,x, y,zx2+Dz,x,NonConstants?xy,zg0,0,1x,xy,y+xDy,x,NonConstants?1,0,0y,zg0,1,0x,xy,zxgx,xy,zx 10yDty,x+CosyDty,x =2x y10y+Cos y3x2y+2xy2-3y3+x3Dty,x+2x2yDty,x-9xy2Dt xx3+2x2y-9xy2+3x2yDtx,y+2xy2Dtx,y-3y3Dt

●积分运算

Integrate[f,x] 求不定积分?fdx

b Integrate[f,{x,a,b}] 求定积分?fdx

a Integrate[f,{x,a,b},Assumptions->expr] 允许某些限定条件

by2(x) Integrate[f,{x,a,b},{y,y1[x],y2[x]}] 求?dxa下面是积分方面的运算。

,Clearx,y,a,b;FullSimplifyIntegrateExpax Cosbx?axaCosbx+bSinb a2+b2 Integratex^4Sinx^7,x,0,Pi@D@@@D@DDH@D@DL@@D8??

2-27

18567642368

1418090625Integratexy, 8注:这是二重积分?dy?1

Integratex^n,x, 0,IfRen>-1, >Integratex^n,x,0,1,Assumptions?n

1IntegrateSinaxIfIma==0,IntegrateSinax12 ●级数运算 @8<8

+216 73y,-1,2,x,y^2, y+y?2?xydx

y211+n,10 xx,x, 0,12pSigna,¥Sinax0x x,x,0,¥,Assumptions?Ima ??pSigimaxSum[f,{i,imin,imax}] 计算符号和

?i?iminf

Sum[f,{i,imin,imax,di}] 同上,但步长为di

Sum[f,{i,imin,imax,di},{j,jmin,jmax,di},?] 计算多重 符号和,若省略di,则默认按1递增

imaxProduct[f,{i,imin,imax}] 计算符号积

?i?iminf

Product[f,{i,imin,imax,di}] 同上,但步长为di

Product[f,{i,imin,imax,di},{j,jmin,jmax,di},?] 计算 多重符号积,若省略di,则默认按1递增

Series[f,{x,x0,n}] 求函数f在x=x0处的n阶泰勒展开式 Series[f,{x,x0,n},{y,y0,m},?] 求函数f在(x0,y0,?)点

泰勒展开式,其中x展开至多为n阶,y至多为m阶,?

Normal[expr] 去掉泰勒展开式expr中的高阶无穷小项 下面是计算实例。

Cleari,j,n,x,f;Sum1j^2,j,1,Infinity,

8@D@??8

Sum Lo

Sum4 0Productx+i,i,0,1,x0.2+x0.4+xSeriesSqrt1+x^2,x, 0,1+ fx_=Norma1+x2@HLHL??8

-1^n-1-1^n n,n,1,Infini 2 n+1,n,0,Infini0.6+x0.8+x 1.x22-x48+O 2●微分方程的理论解

DSolve[eqn,y[x],x] 求解微分方程eqn,其中y为x的函数 DSolve[{eqn,initial conditions},y[x],x] 求解含有初始 条件的微分方程

DSolve[{eqn1,eqn2,?},{y1[t],y2[t],?},t] 求解微分方程组 其中y1[t],y2[t],?为函数,t为自变量

在输入要求解的微分方程时,如果y为函数,x为自变量,则我们一般用y[x]表示函数本身,y’[x]表示函数的一阶导数,y’’[x]表示二阶导数,y’’’[x]表示三阶,依此类推。当然,你也可用D[y[x],{x,n}]的形式来输入函数的导数。在Mathematica所给出的微分方程的解中,用C[1],C[2],C[3],?表示任意常数。

Clearx,y,t;DSolvey'x??6 x3yxyx?-2

DSolvexy'x==yx?xDSolvesolution=DSolvex2 y''x+5 xy'x-2 yx??0,y xyx?x?2 sol=FullSimplifysolut@DA@D@D@DE:@D@>D@D@A@DD@DE:@D>@D@DA9@D@D@D@D=@DE:@DA>@D@D@D@DE\\N\J\\N:@D\J@D@D>@D2,y x 13x4-Cyxx2+yx,y x C1-Log6x2x3 y'x??x2 yx-2 yx2,y1??6,y xyx?-12+ 13?2-?3C1+x?2?2+?3 C2-29

fx_=solx-2-6sol=DSolvesolDSolve\i\y:@D@D@D>k{@D@D??8@D@D<\i\yk@{8@D@D@D@D<@DD:@D>@D@DH@DL@D??@D@D:@D>@D@D@DH@DLA9@D@D@D=8@D@D

yx?x-2-6x26C1+C2 1,1,2 .C1?1,C22+x y''x-y'x??4 xex,y0??0,y'0??0,y xyx?-4?x-1+Logxe4?x+4Logxe+4xex-1+Logxe4xexLog xe .Logxe?1+LoLogxyx?-+41+Logx+Logx1+Log x x''t-2 yt??t+2,3 y't??3 t2,xt,yt130t3330t+5t+t+30C1+30tC2+30tC2352xt?yt?+C2

2.4 数值分析

本节介绍数学运算中的数值求解方法,包括求极值、求根、曲线拟合、数值积分、和与积的数值计算、线性规划等。

1、数值求和与数值求积

imaxNSum[f,{i,imin,imax}] 求数值和

?i?iminf

NSum[f,{i,imin,imax,di}] 同上,但求步长以di增加时的和 NSum[f,{i,imin,imax},{j,jmin,jmax},?] 求多重数值和

NSum[f,{i,imin,imax,di},{j,jmin,jmax,di},?] 同上,步长为di

2-30

ContourPlot[f,{x,xmin,xmax},{y,ymin,ymax}] 函数的等高线图 ListContourPlot[{{z11,z12,?},?}] 由高度数组画等高线图 DensityPlot[f,{x,xmin,xmax},{y,ymin,ymax}] 函数的密度图 ListDensityPlot[{{z11,z12,?},?}] 由高度数组画密度图

Plot3DSinx^2+y^2

@@D??HL8<8

ContourPlotx^2-y^2,x,-1,1,y,-1,1,ContourShading?Fa@8<8<0-22-2 D0-0

4、绘图选项

Options[command] 列出command命令所使用的参数设置,例如使用Options[ListPlot]就可列出ListPlot[]命令的所有默认选项,与上面所画的2张图一样,你可以修改其中的一个或多个选项,以画出不同要求的图形。以下是常用的绘图平面图形绘图选项。

●AspectRatio(图形的高与宽的比),默认值为1/GoldenRatio,即黄金分割率的倒数。

●Axes(图形中是否包含坐标轴),默认值为True,你可以修改为False,即不画出坐标轴。

●AxesLabel(是否在每个坐标轴上打印一个字符串,以便标记坐标轴),默认为None,即不标记,例如对平面图形,你可以修改为如:AxesLabel->{“X“,”Y”}。

●AxesOrigin(坐标轴交叉点的位置),默认为系统自动选择,对平面图形,你可以使用AxesOrigin->{x0,y0}选择一个合适的坐标轴交叉点。

●DefaultFont(图形中所显示文本的字体与号),系统的默认值为

2-36

$DefaultFont,此变量对不同的计算机,可能会有所差别,我们可用如DefaultFont->{“Courier”,10}去修改它,它表示当前图形中文本的字体为Courier,字号为10磅。

●Frame(是否在图形周围加方框),默认为False,即不加框,可以修改为True,即将图形放在一个方框之内。

●FrameLabel(图形框名称),若图形框选项Frame为True情况下,使用FrameLabel->”string”可在图形框外打印一个字符串。 ●GridLines(是否画出网格线),默认为不画,改变此设置用GridLines->Automatic实现,也可用{{x1,x2?},{y1,y2,?}}的形式自己定义网格线。

●PlotLabel(给图形加上标题),用PlotLabel->”Title”可为图形加上一个合适的标题。

●PlotRange(指定绘图的范围),默认为系统自动选择,但你可修改它,例如对平面图形,直接用PlotRange->{{x1,x2},{y1,y2}}指定绘图的范围。

●PlotJoined是ListPlot命令的绘图选项,ListPlot命令默认的绘图方式是画出一个个的点,用PlotJoined->True可将图形中的所有邻近的点用直线连接起来。

对于空间图形,对不同的绘图命令,都有不同的绘图选项,但大部分与上面关于平面图形的绘图选项名称一致,只不过某些选项的用法可能与平面图形的用法略有不同。以下的三维图形常用的绘图选项。

●Boxed(是否加上一个方形盒子将图形框住),默认为True。

●BoxRatios(三维图形绘图比例),默认为BoxRations->{1,1,.4}。 ●Mesh(是否画出图形中的网格线),默认为Mesh->True。 ●Shading(是否对图形进行阴影填充),默认为填充。 ●PlotPoints(绘图时系统所取的点数),默认为15个点,即画图时,将图形区域分成15?15的小方快,在每个小方快内,用小平面快来近似代替曲面。对于剧烈变化的三维图形,这种近似图形与实际相差太多,因此要用PlotPoints->n来增加小方快数,一般n取50左右即可。

●ViewPoint(三维视点选项),你可以将一个三维图形想像成某个物体,某个绘图命令如Plot3D就是照像机,像机所处的位置即视点不同,则照出的像也还会相同,默认为{1.3,-2.4,2},可以根据三维图形的实际情况修改成其它值。

●Contours(用ContourPlot画等高线时的等高线的条数),默认为画10条。

●ContourShading(用ContorPlot绘图时是否使用明暗度),默认为True,即使用明暗度,可以修改为False。

下面我们只给出一个实际应用例子,画出一个随机图形。

2-37

data=TableListPlotdata,PlotJoined?True,Frame?True,FrameLabel?\PlotLabel?\

DefaultFont?@8@D<8

x,Random,x,-1,1,0.05; \Arial\16,GridLines?Automa1Random0.8Graph0.60.40.20

-1-0.500.5

5、特殊图形

LogPlot[f,{x,xmin,xmax}] X为对数轴,其它与Plot命令相同 LogLogPlot[f,{x,xmin,xmax}] 同上,但Y轴也为对数轴

LogListPlot[{{x1,y1},{x2,y2},?}] X轴为对数轴,其它与命令 ListPlot[]相同

LogLogListPlot[{{x1,y1},{x2,y2},?}]同上,但Y轴也为对数轴 PolarPlot[r[t],{t,tmin,tmax}] 极坐标图形 PieChart[list] 饼形图 BarChart[list] 直方图

使用上面这些绘图函数前,需要先装入\\StandardPackages\\ Graphics\\目录下的附加绘图软件包Graphics.m。

<

2.6 Mathematica程序设计

2-38

如果要让Mathematica为你完成复杂的数学计算问题,那就需要利用Mathematica编写程序或者函数。本节将简要介绍Mathematica程序设计的基本功能。

1、全局变量与局部变量

如果不使用Clear[]等命令删除的话,全局变量在整个程序中都存在,而使用Module[]或者Block[]定义的变量称为局部变量(称为模块),它只在所定义的模块内是可见的。实际上,模块就是其它计算机语言中的函数或者子程序。

Module[{x,y,?},body] 建立模块,并且申请局部变量x,y,? Module[{x=x0,y=y0,?},body] 同上,但已经给局部变量赋初值 Block[{x,y,?},body] 建立模块,并且申请局部变量x,y,? Block[{x=x0,y=y0,?},body] 同上,但已经给局部变量赋初值 其中body中可含有多个语句,除最后一个语句外,各语句间以分号结尾,可以多个语句占用一行,也可一个语句占用多行。但这两个命令略有差别,当Module[]申请的局部变量与全局变量重名时,它会在内存中重新建立一个新的变量,Module[]运行完毕,这个新的局部变量也会从内存中消失,而Block[]此时不会建立新的变量,它将重名的全局变量的值存起来,然后使用全局变量作为局部变量,当Block[]运行完毕后,再恢复全局变量的值。

另外,如果在Module[]或Block[]中有Return[expr]命令,则程序执行到Return[expr]后,将会跳出模块,并返回expr的值;则模块中无Return[]命令,则返回模块中最后一个语句的计算结果(注:最后一个语句不能心分号结束,否则将返回Null,即空信息)。

2、输入与输出

Mathematica中,有两个在Notebook中不常用到的函数,对于程序设计来说很方便。

Print[expr1,expr2,?] 打印表达式

Input[“string”] 通过键盘输入表达式,其中string为提示字串 3、条件语句

Mathematica提供了多种设置条件的方法,对于编程来说很方便。 lhs=rhs/;test 当test为True时,执行lhs=rhs

If[test,then,else] 若test为True,执行then,否则执行else Which[test1,value1,test2,value2,?] 返回首个testi为True 时的valuei值

Switch[expr,form1,value1,form2,value2,?] 先计算expr的值, 然后依次与formi比较,返回首个与formi匹配的valuei 的值,如果没有匹配项则返回Null

Switch[expr,form1,value1,form2,value2,?,def] 同上,但如果 没有匹配则返回def

2-39

下面以一个分段函数的定义为例来说明条件语句的使用方法。

此外,利用Which[]也可写成

Absx<1,x^2fx_:=IfAbsx>=2,2,If还可以写成如下形式

在Mathematica中,用于条件判断的逻辑运算符与C语言是一致的,它们是>、>=、<、<=、==、!=、&&、||。

4、循环语句

Mathematica提供了多种循环方式,例如Nest[]、FixedPoint[]等等,而我们下面所介绍的是与其它计算机语言相似的三种循环结构,即Do循环、For循环和While循环。

Do[expr,{n}] 将表达式重复计算n次

Do[expr,{i,imax}] 计算expr,i从1到imax,步长为1

Do[expr,{i,imin,imax}] 计算expr,i从imin到imax,步长为1 Do[expr,{i,imin,imax,di}] 同上,但步长为di

For[start,test,incr,body] 以start为初值,重复计算body, 当test为False时,循环终止。其中incr一般为循环计数器 While[test,body] 只要test为True时就重复执行body

Do循环是三种循环结构中用法最简单的一个,下面是两个例子。

fx_:=x^2;Absx<1@D@@D@H@DLH@DL@DD@D@@DH@DLH@DL@DH@DLD@D??@D@D@D??H@DLH@DL@D??@D

Absx>=1&&Absx<2,Absx,x^fx_:=WhichAbsx>=2,2,Absx>=1&&Absx<2,Abs

fx_:=2;Absx>=2fx_:=Absx;Absx>=1&&Absx

For循环与C语言中的for(;;)语句用法一样,只不过现在变成了For[,,,]的形式,下面是有关For循环的例子。

Fori=1,i£10,i++,a=i^2;Print\a=\

@??8

S= ,x,-1,1,0.2-1,1,-0.8,0.64,-0.6,0.36,-0.4,0.16,-0.2,0.04, 0.,0.,0.2,0.04,0.4,0.16,0.6,0.36,0.8,0.64,1.,

== ??

= =其中i++的用法与C语言一样,你也可以用i=i+1代替。再如

2-40

本文来源:https://www.bwwdw.com/article/lig8.html

Top