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的二项式分布 2 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@8 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<8 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 ?2??0??1???????1???0??2???0??也可以采用线性代数教材中所介绍的另外一种方法。先输入此方程 组的增广矩阵B,然后对此增广矩阵进行行变换。 AppendTransposeA,0,1,1 RowReduc由线性代数理论,这相当于将原方程组化为 1?x?x?x?124??2 ? ?x?2x?134??2@@D8 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 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
正在阅读:
Mathematica实例分析03-23
古代汉语常用词10-04
熟悉的人作文600字06-29
气瓶使用登记表108-19
江苏省宿迁市宿豫区教师招聘考试历年真题汇编详细解析版11-05
TK6113使用说明书05-26
Bp-pgvtd保险精算学讲义205-22
大学思修第一学期期末考试题附答案09-15
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 实例分析
- Mathematica
- 《七律 长征》习题2
- 51单片机功能接口说明 - 图文
- 防震减灾安全课教案
- 企业专利工作总结
- 告别陋习主题班会
- 合并同类项教学设计
- 植物学实验教学大纲
- 给快乐找个理由
- 十月校刊成稿 - 图文
- 上交所上市公司2011年年度报告工作备忘录第3号-上市公司非经营性
- 产前筛查管理制度
- 34.2014高考领航(文)6-2
- 初中生语文学习计划
- 新编湖南省娄底市双峰一中等五校高三上学期期中联考数学(文)试
- 磁场的测量
- 炎热天气施工方案
- 问题在于改变世界(马克思《关于费尔巴哈的提纲》的读书笔记)
- 江苏省泰兴市洋思中学2014-2015学年八年级政治下学期期中试题 新
- triz描述一个问题,并找出其中的技术冲突 需找出改进的参数和恶
- 房屋安全鉴定报告 - 图文