Mathematica使用教程

更新时间:2023-10-18 12:53: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一样输入数学算式,比如上面计算的积分,完全可以通过数学工具面板,在Mathematica中写成?x2Sin[2x]dx的形式,但这种输入方法有两个问

0?2-1

题:首先,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中键入类似下面的字符串来获得帮助:

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

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

?Integrate 列出此命令的帮助

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

??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”用来设置选定内容的文本风格;“Screen Style Environment”指定Notebook的窗口风格;“Printing Style Environment”指定当前Notebook的打印风格;“Show Expression”选中一个或多个细胞,选择此菜单,你会看到Mathematica在磁盘上保存此细胞的完整形式;“Option Inspector”与菜单Edit→

2-3

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

2-4

忘记了此命令的格式,可以调用此菜单或者按快捷键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.2 Mathematica表达式及其运算规则

2-5

在本节中,我们将主要介绍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,

FullForm[]可显示出表达式在系统内部存贮的标准格式,而Head[]

可得到某个表达式的头部,这对我们确定表达式的类型很有用处。

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

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

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

2-6

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=8s1=PartitionSqrt ss1

s2=Flatten1,2,s3=Inserts2, 17@8

s4=\s

1,2,5,10,17,26,37,5 3,5,10,17,26,37, 51,2,5,17,10,17,26,37, 52-7

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(复数)。不带有小数点的数,系统都认为是整数,而带有小数点的数,系统则认为是实数。对两个整数的比,如12/13,系统认为是有理数,而a+b*I形式的数,系统认为是复数。Mathematica可表示任意大的数和任意小的数,其它计算机语言比如C、Basic是做不到这一点的,例如

@D8< 1, !5001.220136825991110 ′1A:=Table1??@??HL8<8

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

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

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

Rationalize3.1415926,10^1 -Rationalize3.1415926,10^173HLHL??HL@@DD@D@D@D2+I 1+2 I^22 -1-3 5- 55Mathematica中的变量以字母开头,变量中不能含有空格及下划线,因此,上面的2I表示2*I(I为虚数),乘号可用空格代替,在很多情况下,乘号可以省略,如(1+I)(1+2I)中的两个乘号。如果某个表达式的结果为复数,Mathematica就会给出复数的结果。对下面的3次方程

0Solvex^3-2 x^2+3 x-6??x?2,x?-?上面的行列式|A|的计算结果,系统给出的是一个分数值,在Mathematica中,不同类型的数进行运算,其结果是高一级的数,如有理数与实数运算的结果是实数,复数与实数的运算结果是复数,依此类推。由于整数与有理数的运算级别最低,因此,在进行数学计算中,如果可能的话,就尽量用精确数,即整数或有理数。另外,“==”称为逻辑等号,定义一个等式要用逻辑等号。

@D98<9??=9??=3,x?? A:=5,1,2,1,2,6,1,2,7其中Inverse[]是求逆矩阵命令。在Mathematica中,一行中可以输入

多个命令,各命令间用分号分隔。另外,分号还有一个作用是通知Mathematica,只在内存中计算以分号结尾的命令,但不输出此命令的计算结果。如果表达式太长,一行写不下,可以分2行写,系统会自动判断一个表达式是否输入完毕。对于需要多行输入的表达式,建议每行用

8<8<8<@D:8>:>8<><8<8<@D8<8<8< ;Invers 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.,2-9

运算符结尾。下面我们简要说明一下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下面的变量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[]命令的功能是打印表达式或者字符串,其格式为

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,x8<8<8<8<8<8<8<@D@8

2-10

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,\@@DReal@@D@??D@8

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] 关于复数的基本运算 ●随机函数

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的余数及商

2-11

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] 贝赛尔函数

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

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

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

<

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

<

将\\AddOnes\\StandardPackages\\Statistics中的所有扩展名为.m文件中的函数都读入内存,此时,下面的函数就都能使用了。

BernoulliDistribution[p] 均值为p的离散贝努利分布 BinomialDistribution[n,p] 概率密度为p的二项式分布 ChiSquareDistribution[n] 具有n个自由度的χ2分布 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中定义一个新函数后,其用法与内部函数是一样的,其定义形式为

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,\@D@@@D@D8

30!=265252859812191058636308480000000a10.0= a由于限制k为整数,所以对a[10.0],Mathematica是不会计算的。系

统中的许多内部函数都是利用递归调用实现的,$RecursionLimit是系统进行递归调用的最大次数,默认值为256,你可以将它修改为一个合适的值,这只需对$RecursionLimit重新赋值即可。

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

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

其中变量x,y称为局部变量,它只在此函数定义的内部起作用(实际上,Module[]就是其它计算机语言中的函数子程序,更进一步解释见第5节)。另外,对于复杂的函数定义,一般要应用条件判断及循环结构,第5节我们将要详细介绍这方面的内容。例如,上面计算阶乘的例子可用模块形式书写为

fn_:=Modulea,k,a0=1;ak_:=kak-1;an@D@D 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 L@D@8<@D@D@D@D@D f;Logab LMathematica中的函数定义还有以下形式:

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

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

NestFunctionw,1@D@@D@D@D@D@D@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

1+ 1+#^2& 1@@??HLDD@D1+w x,12-14

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

●expr/.rules 变换法则rules只对expr中的每项使用一次

Integratex^2Sinnx,x,0,-2n3

其中“→”是键入“->”的结果。另外,如果变换条件只有一个,可以不用集合定界符{},例如

x+y+z .x●expr//.rules 反复对expr使用rules,直到结果不变为

Sin4 a.Sinn_x_?Sin2

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

HL@8

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

1+ xNestListf,@D8@D@@D@@@DD@@@@DD@@@@@DDD

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

ComposeList●FixedPoint[f,x] 对x重复f运用,直到结果不变为止 ●FixedPointList[f,x] 同上,但列出所有中间计算结果

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

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

sqrt5x_:=12x+5x@D@@@DD@D@D@D@@@DD@8

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,Foldf,x,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,●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:=a,b,c,d;Mapf,A,Mapf, A,@D??H??L??@H@DHLLD@D8<@8

●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

●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<@D8<8<@D8@D@D@D@D@D@D<@8d1=3,5,12,9,4,7,1;Selectd1,# 95,12, fOperatep, fp Operatep,fgxpf gpf Operatep,fgx

g Operatep,fgx gf2.3 符号数学运算

Mathematica的最大优点就是能够进行各种复杂的数学符号计算,

2-17

下面我们分类介绍它的符号计算功能。 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] 列出多项式所含的项数

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@HHLLDH@LHHLLD@DHLExpand1+1+x^2^2^2,1 +x22+2x +Expand 1+1+x^2^2 x4+8x2+8x4+422+2x +

@HLHLD@DHLHLH@DLHL@D@D8<@D128a3x2+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 tFactorTerms2-18

●多项式的四则运算

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为变量的拉格朗日插值多项式

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

H8a3+36a2x3+54ax6+27x9LH 2 16x2+40xy+LPolynomialQuotientPolynomialRemainderp1, p2

●有理多项式运算

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进行因式分解 下面是有关有理多项式运算的例子。

t=x-1^22+x8@D@D<8HLHLHLHL<8@D@D<8HLHL<@HLD@D8<8<8<8<8<@DH@LHLDp1:=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- 8x-8 x-d=-2,4,-1,1,0,0,1,1,2,InterpolatingPolynomiald,x

4+-2+x

2 SimplifHLHL??HLHLL@D 1+x x-3^2;Expan2-19

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

FullSimplify[expr] 同上,但将结果表达式中的所有函数展开 对于化简表达式,上面的两个命令差不多,但大部分情况下,我们更愿意用FulSimplify[],通过下面的例子,你可以看出它确实比Simplify[]好一点。

-3+xHLHLHLHLHLHL@D@D@DHLHLHL@DHLHLHLHL@DHLHL2-3+x21+x-3x2-3+x1+x+x32-3+x 129+3x-5x2+x3-3x9+3x-5x2+x3+9+3x-5 xx32-3x+x9+3x-5 x25-3+x222+194-3+x+14 1-1+x-3+x2 1

SimplifyCosx^2-Sin x@@D@DD@D8@@D??D@@D??D<:@D@D> CosSimplifyGamma1+n n,FullSimplifyGamma1+nGamma1+nn,Gamma 2、三角函数运算

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

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

TrigReduce[expr] 用倍角化简expr,使其结果的表达式最短 TrigToExp[expr] 使用欧拉公式将三角表达式化成复指数形式 ExpToTrig[expr] 将复指数形式的表达式化成三角函数形式表达式 下面是三角函数运算的例子。

t=Sin3 y Cos2 x+y-Cos3 x;t1=TrigExpan@D@D@D@D2-20

下面的例子是利用四阶龙格-库塔法求一阶微分方程

y??f(x,y),y(x0)?y0的数值解,其中:x1为终止计算时的x值,h为计

算步长,函数y[x]将返回满足方程y??f(x,y),y(x0)?y0的积分曲线上在区间[x0,x]上间隔为h的每一点上的值,并将这些数据存入data之中,我们最后用ListPlot[]画出了方程解的函数曲线。

Clearf,\*\\*\h,data;fx_,y_=Input\fx,y=\x0=Input\initx0=\x1=Input\endyx_:=Blocky=\N;y0=Input\inity0=\;N;N;h=Input\steplength=\N;h=Absh;Ifx1

Mathematica提供了一系列基本输入与输出函数用于文件的读写,在Mathematica中,你可以将运算结果存入文件供其它应用程序调用,也可以从磁盘上读入其它应用程序生成的数据供Mathematica使用。下面是两个常用的数据读取语句。

●WriteString[“file”,expr1,expr2,…]向文件file中写入表达式。如果file不存在,则WriteString[]就先在磁盘上创建文件file,然后打开它;如果文件存在,则WriteString[]以向file尾部追加方式打开它。如果要向file中输出字符串,可用双引号括起来。另外,WriteString[]是不会自动输出回车换行符的,你可用向file中写入”\\n”的方式在file中加上回车换行符。下面的例子将1到15这15个数分三行写入文件abc.dat,数据中间以逗号分隔。

f=\IfLengthFileNamesfj=1;Fori=1,i£15,i++,j=1;;;@@DD@D@@DD????@D??@D??@D??@D@D8<@D@8<@@8Absx,hh=x-nowx;nowx=x;end=\k1=hh*fnowx,nowy;k2=hh*fnowx+h2,nowy+k12;nowy=nowy+k1+2*k2+2*k3+k46N;;;k3=hh*fnowx+h2,nowy+k22;k4=hh*fnowx+hh,nowy+k3;

Ifj<5,WriteStringf,i,\;j=j+1,WriteStringf,i,\; Closef;程序第一行的意思是,如果文件abc.dat存在,就先删除此文件,

然后再向文件中写入数据,最后用Close[“file”]语句关闭文件。

@@@D@D@@D@D@DD@D??0,DeleteFilef;n=5;

2-41

!!abc.dat 1,2,3,4,5 6,7,8,9,10

11,12,13,14,15

在Mathematica中,通过“!!”命令,可以列出文本文件中的的内容,其它命令还有:“<<”读入一个Mathematica程序并运行此程序。 ●ReadList[“file”,type]以指定类型type读入文件中的所有数据并将它赋给一个一维表;ReadList[“file”,{type1,type2,…}]读入所有数据,并将它赋给一个二维表,如果文件file中的数据不够则用文件结束符EndOfFile补齐;ReadList[“file”,type,n]只读入文件file中的前n个数据,形成一个一维表。其中type的类型为:String(字符串)、Integer(整数)、Real(近似实数)、Number(精确数或者近似数)。另外,文件中的数据与数据间要用空格或者回车换行符分隔开。假设C盘根目录下文件file.dat中存有16个数据,用记事本所看到的数据如下:

1 2 3 4 5 7 8

9 10 11 12 13 14 15 16

下面是用ReadList[]读取文件file的几个例子,请注意,如果文件名中带有路径,则应该用双反斜杠,如:c:\\\\dir\\\\dir1\\\\abc.dat。

Cleara,b,c,d;f=\a=ReadListf,Number 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 b=ReadListf,Number,Number

c=ReadListf,Number,Number,Number,Number

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 d=ReadListf,Number,9 1,2,3,4,5,6,7,8,9

@D@D8@<8

2-42

2Cosy1 t2=TrigFactort1 2 t3=TrigReducet1,t4=TrigReducet1-t212 t5=TrigToExpt

-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@DH@D@D@DL8@D@D<:H@D@D@DL>@D-Cosx33Cosx2Cosx2Cosy6Cosx-CosxCosy2Sinx+CosxCosy4Sinx+Sinx2+Cosx2CosySiny+2Cosy3Siny-CosySinx2Siny-3Sinx2Siny+CosxSinxSiny2-Cosy2SinxSiny2-2Cosx2CosySiny3+Sinx2Siny3+CosxSinxSiny4

-2Cos3x-Sin2x-2y+Sin2x+4y

-2Cos3x-Sin2x-2y+Sin2x+4y,0 ?-3?x-12?3?x+414??2?x-2?y-4 11??-2?x+2?y+??-2?x-4?y-??2?x+4?y Simplify%

1 4?-3?x-2-2?6?x+???x-4y+??5?x-2?y-??5?x+4?y-???x+2y FullSimplify%

-Cos3x+Cos2x+ySin3y

由此可见,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的大部分内部函数,都是基于复数的,比如三角函数、指数与对数函数、贝塞尔函数等。

I z=3+6 7-I^2,Absz,Rez,Imz,Conjugatez,Argz@DHLI@D@D@D@D HLM x+I*3 y ComplexExpandTan2 Expx,z z=.;ComplexExpandSinz 8HL??HL@D@D@D@D@D<:@BF>??@D@D@D@D@D@D@D@@D@DD3125+33?250,3,3105125,33250,3125-33?250

,ArcTan112 Sin4xCos4x+Cosh6y+?Sinh6yCos4x+Cosh6y 2-21

?xCoshImz4、方程求解

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[]是求解方程或方程组的非平凡解的一个最简单的公式,下面是几个这方面的例子。

x^3+24 x^2-32 x+15??0,x x=.;Solvex^4-8 x?1,x?2-?,x?2+?,x?3

x+3 y??8,3 x+2 y??7,x,y Solve2 @@D@@D@@D@@DSinRez+??xCosRezSinhImz

但是,Solve[]只能求出方程或方程组的理论解,下面的两例子中,

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

x^3+x+1??0,x x=.;Solvex^4+2 @D8@<8<8<8<8<8

Absx0.858004,0.858004,2.11769,0.641445

Solvex^2+y^2==4,Expx+y??6,x,ySolve::tdep :

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

Solveax+b??c,x x?-b-ca Reduceax+b??c,x

a==0&&b==cx==@D??8<8<8<8<@D??8@<8@D<8DèN

x?0.379567-0.76948?,x?0.379567+0.76948?,x?-2.11769,x?-0.641445.%

Theequationsappeartoinvolvethevariablestobesolvedforinanessentiallynon-algebraicway.

Solvex2+y2==4,?x+y==6,x,y

-b+ca&&a10 Eliminate[]的作用是:从方程组中消去若干个变量以简化方程组。

2-22

x+1-a y??1,y Eliminateax^3+y??0,2 -ax3+a2x3==1-2x

N Solve%,x.a?25、线性代数运算

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

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

Dota,b,Crossa,b 26,-2,4,-2

DiagonalMatrix1,2,3 A=2

@8HL

DetA,a.A,A.a,a.A.b

34,-3,4,15,-3,4,15,82

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

A-2*MatrixPowerA,3;MatrixFormB B=3 InverseB.b,LinearSolveB,b535933120609 EigenvaluesA-16 0.899568+4.44089′10? Chop%

6.43931,4.66112,0.899568 EigensystemAN

Chop%

@D8<8<8@D@D<88<@8:>D??8<@D8@

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

2,-2,-1,-1,4,-1,-1,-1,6

-5637859861-178133109-468

,218480120609,146935120609,535933120609,218480120609,146935120609 6.43931+0.?,4.66112-4.44089′10-16?,N

6.43931+0.?,4.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.,3.61268-4.96914′10-16?,1.48775+5.28252′10-17?,1.

2-23

88A=6.43931,4.66112,0.899568, 下面是线性代数中有关方程组理论的各种运算。对方程组

?x1?x2?x3?x4?0? ?x1?x2?x3?3x4?1

?2x?2x?2x?124?1-5.56292,6.9018,1.,3.61268,1.48775,1.<8<<8<<-0.0497586,-0.389553,1.,;其对应齐次方程的通解为

NullSpaceA8@<8<8

1,0,2,1,1,1,0,0

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

?1?

?0?

c1???c2

?2????1?

?1??1??? ?0????0?

下面再求出非齐次方程的一个特解,这可使用LinearSolve[]命令,注意,如果方程组有多个解,它也只能求出一个解。

LinearSolveA,0,1,112 @8

,0,12,0 因此,此方程的通解为

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

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

AppendTransposeA,0,1,1;B=Transpose%

RowReduceB @@D8:>8<>

1,-1,-1,1,0,1,-1,1,-3,1,2,-2,0,-2,1

1,-1,0,-1,12,0,0,1,-2,12,0,0,0,0,0 由线性代数理论,这相当于将原方程组化为

2-24

1?x?x?x?24??12 ?

?x?2x?134??2由此,我们不难写出方程组的通解。

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[]进行了各种扩展,使适用计算的函数更广。在计算极限前,最好先装入此软件包。

<

Tanx,x?Pi2,Direction?1 LimitPi-x ¥

@@HL??HLDD@H@@DL??D@HL@D??D1+x,x?+Infinity

ExpSinx-1x,x?0

在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)的二阶导数,更一般情况是下面的函数

2-25

的初值可能得到不同的根。

FindRootfx,x,-1.7,FindRootfx,x,1 x?-1.81626,x?1.00417

FindRootx^2+y^2??4,Expx+Expy+Sinx+Siny??1, x,-2,y,0 x?-1.96757,y?0.358696

4、数值积分

NIntegrate[f,{x,a,b}] 函数f的数值积分

NIntegrate[f,{x,a,b},{y,y1[x],y2[x]] 函数f的二重数值积分 由于大部分函数使用Integrate[]命令不能够求出其理论积分,因此,我们只能求它的数值积分。

IntegrateSinSinx,x,0,11@D@DH@DL8@@D8

NIntegrateSinSinx,x,0,10.430606

在Mathematica中,可以利用Options[command_name]查看每个内部命令的默认选项,例如

OptionsNIntegrate

AccuracyGoal?¥,Compiled?True,GaussPoints?Automatic,MaxPoints?Automatic,MaxRecursion?6,Method?Automatic,MinRecursion?0,PrecisionGoal?Automatic,SingularityDepth?4,WorkingPrecision?16@@@D8

SinSinx ax0

上面的每一个选项都代表此命令的某种当前计算状态,比如

WorkingPrecision选项表示当前积分计算的精度是16位,修改为

NIntegrateSinSinx,x,0,1,WorkingPrecision?20

0.4306061031

@@@D8<

5、数据的插值逼近

Interpolation[{{x1,y1},{x2,y2},…}] 给出通过数据点(x1,y1), (x2,y2),…的一个单变量近似函数

Interpolation[{{x1,y1,z1},{x2,y2,z2},…}] 给出通过数据点 (x1,y1,z1),(x2,y2,z2),…的一个双变量近似函数

Interpolation[{{x1,y1,…},{x2,y2,…},…}] 多个变量近似函数 在Mathematica中,近似函数是由InterpolatingFunction[]生成的,其具体用法参见如下的例子。

Cleard,data,x,y,f,sinxy; data=Tablex,Expx,x,0,1,0.1@@D8@D<8

2-31

f=Interpolationdata

InterpolatingFunction0.,1.,<> f0.15,f0.35,f0.751.16183,1.41906,2.117

d=Tablex,y,Sinxy,x,0,Pi,0.5,y,0,Pi,0.5 data=Flattend,1;sinxy=Interpolationdata

InterpolatingFunction Sin0.40.6,sinxy0.4,0.60.237703,0.237718

6、曲线拟合

Fit[data,funs,vars] 用变量vars,函数集合funs拟合一组数据 线性拟合的意思是:给定一列数据及拟合函数集{f1 ,f2 ,…,fn },Fit[]命令给出该函数集的拟合函数k1f1+k2f2+…knfn ,参见下面的例子。

d=8<8<8<8<8<8<8<8<8<8<8<@D@8

;

0.,3.,0.,3.,<>

x=.;fx_=Fitd,1,x,Logx,x -13.0035+23.7089x-65.4063Logx

d=1,2,3,4,5,6,5,6,7,6,7,8,7,8,9;y=.; Fitd,1,x,y,xy,x^2,y^2,x,y20.9-0.2x-0.1x+0.7y-0.3xy+0.4y

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

2

利用软件包nonlinearfit.m,可以进行非线性拟合,装入此软件后,

系统会提供以下函数。

NonlinearFit[data,model,vars,params] 利用数据data拟合函数 模型model,其中vars是函数变量集合,params是要拟合的参数集合。

<

x+Exp2 x,x,0,1,0.1 clearx,d,a,b;d=Tablex,3 0.,1.,0.1,1.5214,0.2,2.09182,0.3,2.72212,0.4,3.42554,0.5,4.21828,0.6,5.12012,

NonlinearFitd,bx+Expax,x,a,b?2.x@D@8@D<8

0.7,6.1552,0.8,7.35303,0.9,8.74965,1.,10.3891

+3.x

7、线性规划与非线性规划

对于线性规划,Mathematica提供了三个函数,分别是:

ConstrainedMax[f,{inequalities},{x,y,…}] 求目标函数f在不 等式约束条件下的极大值。

ConstrainedMin[f,{inequalities},{x,y,…}] 同上,但求极小值 LinearProgramming[c,m,b] 求目标函数cx在约束mx≥b和x≥0下取得的最小值向量x,即求线性规划问题

2-32

min cT x s.t. mx≥b x≥0 的最小值。

ConstrainedMax3 x1+x2+3 x3, 下面说明LinearProgramming[]的使用方法,请看例子。求 min x1 + 6x2 – 7x3 + x4 + 5x5 s.t. 5x1 – 4x2 +13x3 – 2x4 + x5 = 20 x1 – x2 + 5x3 – x4 + x5 = 8

555Clearc,b,A;c=1,6,-7,1,5;b=20,-20,8,-8;A= LinearProgrammingc,A,b 0,47,127,0,0 8、微分方程的数值解

NDSolve[{eqn1,eqn2,…},y[x],{x,xmin,xmax}] 求微分方程的数值解,x的范围从xmin到xmax,其它与Dsolve[]命令相同。

NDSolve[{eqn1,eqn2,…},{y1[t],y2[t],…},{t,tmin,tmax}]求微分方程组的数值解,其中t由tmin到tmax。

s=NDSolvey''x+2 y'x+10 yx??Sin2 x,y0??1,y'0??0,;@8<8@D8<8<8<8<8<8@2 x1+x2+x3£2,x1+2 x2+3 x3£5,2 x1+2 x2+x3£6,x1,x2,x3

27,x1?1,x2?0,x3?85,-4,13,-2,1,-5,4,-13,2,-1,1,-1,5,-1,1,-1,1,-5,1,-1;

fx_=s1,1,2 InterpolatingFunction Plotfx,x,0,10@8@D@D@D@D@D@D<@D8

yx?InterpolatingFunction0.,10.,<>,<>x

0.,10.x

0.40.2246810

-0.2

2.5 图形绘制

2-33

Mathematica能够绘制各种类型的函数图形,下面分类介绍它的函数绘图命令。

1、平面图形绘制

Plot[f,{x,xmin,xmax}] 画出f在区间(xmain,xmax)上有曲线图 Plot[{f1,f2,…},{x,xmin,xmax}] 同上,但在一张图中同时画出 f1,f2,…的图形

ListPlot[{{x1,y1},{x2,y2},…}] 由给定的数据绘图

ParametricPlot[{x[t],y[t]},{t,tmin,tmax}] 画出参数方程图形

Pi PlotSinx,Cosx,x,0,4 1@8@D@D<8

Show[plot1,plot2,…] 将多个图形画到一张图上

Show[GraphicsArray[{{plot1,plot2,…},…}]] 绘制图形阵列

p1:=Plotp2:=ParametricPlot Showp1,p2@8@<8

3、空间图形绘制

Plot3D[f,{x,xmin,xmax},{y,ymin,ymax}] 画三维曲面图

2-34

ListPlot3D[{{z11,z12,…},{z21,z22,…},…}] 由高度数据画图 ParametricPlot3D[{x[t],y[t],z[t]},{t,tmin,tmax}]空间曲线图 ParametricPlot3D[{x[t,u],y[t,u],z[t,u]},{t,tmin,tmax}, {u,umin,umax}] 画出参数方程所表示的空间曲面图

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

10.5200

ContourPlotx^2-y^2,x,-1,1,y,-1,1,ContourShading?False

1@8<8<0-22-2 D0.50-0.5

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

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

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

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

●AxesOrigin(坐标轴交叉点的位置),默认为系统自动选择,对平

2-35

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

Top