Mathematica5教程第1章Mathematica概述
1.1 运⾏和启动:介绍如何启动Mathematica软件,如何输⼊并运⾏命令1.2 表达式的输⼊:介绍如何使⽤表达式1.3 帮助的使⽤:如何在mathematica中寻求帮助第2章Mathematica的基本量
2.1 数据类型和常量:mathematica中的数据类型和基本常量2.2 变量:变量的定义,变量的替换,变量的清除等2.3 函数:函数的概念,系统函数,⾃定义函数的⽅法2.4 表:表的创建,表元素的操作,表的应⽤2.5 表达式:表达式的操作
2.6 常⽤符号:经常使⽤的⼀些符号的意义第3章Mathematica的基本运算
3.1 多项式运算:多项的四则运算,多项式的化简等
3.2 ⽅程求解:求解⼀般⽅程,条件⽅程,⽅程数值解以及⽅程组的求解3.3 求积求和:求积与求和第4章函数作图
4.1 ⼆维函数作图:⼀般函数的作图,参数⽅程的绘图4.2 ⼆维图形元素:点,线等图形元素的使⽤4.3 图形样式:图形的样式,对图形进⾏设置
4.4 图形的重绘和组合:重新显⽰所绘图形,将多个图形组合在⼀起4.5 三维图形的绘制:三维图形的绘制,三维参数⽅程的图形,三维图形的设置
第5章微积分的基本操作
5.1 函数的极限:如何求函数的极限5.2 导数与微分:如何求函数的导数,微分
5.3 定积分与不定积分:如何求函数的不定积分和定积分,以及数值积分5.4 多变量函数的微分:如何求多元函数的偏导数,微分
5.5 多变量函数的积分:如何计算重积分5.6 ⽆穷级数:⽆穷级数的计算,敛散性的判断第6章微分⽅程的求解
6.1 微分⽅程的解:微分⽅程的求解
6.2 微分⽅程的数值解:如何求微分⽅程的数值解第7章Mathematica程序设计7.1 模块:模块的概念和定义⽅法
7.2 条件结构:条件结构的使⽤和定义⽅法
7.3 循环结构:循环结构的使⽤7.4 流程控制
第8章Mathematica中的常⽤函数
8.1 运算符和⼀些特殊符号:常⽤的和不常⽤⼀些运算符号8.2 系统常数:系统定义的⼀些常量及其意义8.3 代数运算:表达式相关的⼀些运算函数8.4 解⽅程:和⽅程求解有关的⼀些操作
8.5 微积分相关函数:关于求导,积分,泰勒展开等相关的函数8.6 多项式函数:多项式的相关函数8.7 随机函数:能产⽣随机数的函数函数
8.8 数值函数:和数值处理相关的函数,包括⼀些常⽤的数值算法8.9 表相关函数:创建表,表元素的操作,表的操作函数
8.10 绘图函数:⼆维绘图,三维绘图,绘图设置,密度图,图元,着⾊,图形显⽰等函数8.11 流程控制函数第1章Mathematica概述1.1 Mathematica的启动和运⾏
Mathematica是美国Wolfram研究公司⽣产的⼀种数学分析型的软件,以符号计算见长,也具有⾼精度的数值计算功能和强⼤的图形功能。
假设在Windows环境下已安装好Mathematica5.0,启动Windows后,在“开始”菜单的“程序”中单击,就启动了
Mathematica5.0,在屏幕上显⽰如图1的Notebook窗⼝,系统暂时取名Untitled-1,直到⽤户保存时重新命名为⽌。
图1
输⼊1+1,然后按下Shif+Enter键,这时系统开始计算并输出计算结果,并给输⼊和输出附上次序标识In[1]和Out[1],注意In[1]
是计算后才出现的;再输⼊第⼆个表达式,要求系统将⼀个⼆项式x5 + y5展开,按Shift+Enter输出计算结果后,系统分别将其标识为In[2]和Out[2],如图2。
图2
在Mathematica的Notebook界⾯下,可以⽤这种交互⽅式完成各种运算,如函数作图,求极限、解⽅程等,也可以⽤它编写像C那样的结构化程序。在Mathematica系统中定义了许多功能强⼤的函数,我们称之为内建函数(built-in function), 直接调⽤这些函数可以
取到事半功倍的效果。这些函数分为两类,⼀类是数学意义上的函数,如:绝对值函数Abs[x],正弦函数Sin[x],余弦函数Cos[x],以e 为底的对数函数Log[x],以a 为底的对数函数Log[a,x]等;第⼆类是命令意义上的函数,如作函数图形的函数Plot[f[x],{x,xmin,xmax}],解⽅程函数Solve[eqn,x],求导函数D[f[x],x]等。
必须注意的是: Mathematica 严格区分⼤⼩写,⼀般地,内建函数的⾸写字母必须⼤写,有时⼀个函数名是由⼏个单词构成,则每个单词的⾸写字母也必须⼤写,如:求局部极⼩值函数FindMinimum[f[x],{x,x0}等。第⼆点要注意的是,在Mathematica中,函数名和⾃变量之间的分隔符是⽤⽅括号“[ ]”,⽽不是⼀般数学书上⽤的圆括号“( )”,初学者很容易犯这类错误。如果输⼊了不合语法规则的表达式,系统会显⽰出错信息,并且不给出计算结果,例如:要画正弦函数在区间[-10,10]上的图形,输⼊plot[Sin[x],{x,-10,10}],则系统提⽰“可能有拼写错误, 新符号‘plot ’ 很像已经存在的符号‘Plot ’”, 实际上,系统作图命令“Plot ”第⼀个字母必须⼤写,⼀般地,系统内建函数⾸写字母都要⼤写。再输⼊Plot[Sin[x],{x,-10,10} ,系统⼜提⽰缺少右⽅括号,并且将不配对的括号⽤紫⾊显⽰,如图3。
图3
⼀个表达式只有准确⽆误,⽅能得出正确结果。学会看系统出错信息能帮助我们较快找出错误,提⾼⼯作效率。 完成各种计算后,点击“⽂件”“退出” 退出,如果⽂件未存盘,系统提⽰⽤户存盘,⽂件名以“.nb ”作为后缀,称为Notebook ⽂件。以后想使⽤本次保存的结果时可以通过“⽂件”“打开”菜单读⼊,也可以直接双击它,系统⾃动调⽤Mathematica 将它打开。1.2表达式的输⼊
Mathematica 提供了多种输⼊数学表达式的⽅法。除了⽤键盘输⼊外, 还可以使⽤⼯具样或者快捷⽅式健⼊运算符、矩阵或数学表达式。
1. 数学表达式⼆维格式的输⼊
Mathematic 担提供了两种格式的数学表达式。形如x/(2+3x)+y*(x-w)的称为⼀维格式,形如23x y xx w+
+-的称为⼆维格式。
你可以使⽤快捷⽅式输⼊⼆维格式,也可⽤基本输⼊⼯具栏输⼊⼆维格式。下⾯列出了⽤快捷⽅式输⼊⼆维格式的⽅法:数学运算 数学表达式 按键分式2
x x Ctrl+/ 2n 次⽅ x nx Ctrl+^ n
开 2次⽅下标 x 2 x Ctrl+_ 2 4,可以按如下顺序输⼊按键:
(,x,+,1,),Ctrl+ ^,+,4,→,Ctrl+/,Ctrl+2,2,x,+,y 另外也可从“⽂件”菜单中激活“控制⾯板”“Basic Input ”⼯具栏,也可输⼊,并且使⽤⼯具栏可输⼊更复杂的数学表达式,如下图4。
图4 图5
2.特殊字符的输⼊
MathemMatica 还提供了⽤以输⼊各种特殊符号的⼯具栏。基本输⼊⼯具栏包含了常⽤的特殊字符(上图),只要单击这些字符按钮即可输⼊。若要输⼊其它的特殊字符或运算符号,必须使⽤从“⽂件”菜单中激活“控制⾯板”“Complete Characters ”⼯具栏,如上图5,单击符号后即可输⼊。1.3 Mathematica的联机帮助系统
⽤Mathematica的过程中,常常需要了解⼀个命令的详细⽤法,或者想知系统中是否有完成某⼀计算的命令,联机帮助系统永远是最详细、最⽅便的资料库。1.获取函数和命令的帮助
在Notebook界⾯下,⽤?或 ?? 可向系统查询运算符、函数和命令的定义和⽤法,获取简单⽽直接的帮助信息。例如,向系统查询作图函数Plot命令的⽤法?Plot 系统将给出调⽤ Plot 的格式以及 Plot 命令的功能(如果⽤两个问号“??”,则信息会更详细⼀些)。? Plot* 给出所有以Plot这四个字母开头的命令。2.Help菜单
任何时候都可以通过按shift+F1键或点击“帮助”菜单项“帮助浏览”,调出帮助菜单,如图6所⽰。
图6
其中的各按钮⽤途如下:
Built-in Function 内建函数,按数值计算、代数计算、图形和编程分类存放Add-ons & Links 程序包附件和链接
The Mathematica Book ⼀本完整的Mathematica使⽤⼿册Getting Started/Demos 初学者⼊门指南/多种演⽰Tour 漫游Mathematic
Front End 菜单命令的快捷键,⼆维输⼊格式等
Master Index 按字母命令给出命令、函数和选项的索引表
如果要查找Mathematica中具有某个功能的函数,可以通过帮助菜单中的Mahematica 使⽤⼿册,通过其⽬录索引可以快速定位到⾃⼰要找的帮助信息。例如:需要查找Mathematica中有关解⽅程的命令,单击“The Mathematica Book”按钮,再单
击“Contents”,在⽬录中找到有关解⽅程的节次,点击相应的超链接,有关内容的详细说明就马上调出来了。如果知道具体的函数名,但不知其详细使⽤说明,可以在命令按钮 Goto 右边的⽂本框中键⼊函数名,按回车键后就显⽰有关函数的定义、例题和相关联的章节。例如,要查找函数
Plot的⽤法,只要在⽂本框中键⼊Plot,按回车键后显⽰Plot函数的详细⽤法和例题的窗⼝,如图7。
图7
如果已经确知Mathematica 中有具有某个功能的函数,但不知具体函数名,可以点击Built-in Functions按钮,再按功能分类从粗到细⼀步⼀步找到具体的函数,例如,要找画⼀元函数图形的函数,点击Built-in Functions →Graphics and Sound→2DPlots→Plot,找到Plot的帮助信息(如图7)。第2章Mathematica的基本量2.1数据类型和常数1.数值类型
在Mathematic中,基本的数值类型有四种:整数、有理数、实数和复数。
如果你的计算机的内存⾜够⼤,Mathemateic可以表⽰任意长度的精确实数,⽽不受所⽤的计算机字长的影响。整数与整数的计算结果仍是精确的整数或是有理数。例如2的100次⽅是⼀个31位的整数:ln[1]:=2^100
Out[1]=1267650600228228229401496703205376
在Mathematica中允许使⽤分数,也就是⽤有理数表⽰化简过的分数。当两个整数相除⽽⼜不能整除时,系统就⽤有理数来表⽰,即有理数是由两个整数的⽐来组成如:In[2]:=12345/5555
Out[2]=2469 1111
实数是⽤浮点数表⽰的,Mathematica实数的有效位可取任意位数,是⼀种具有任意精确度的近似实数,当然在计算的时候也可以控制实数的精度。实数有两种表⽰⽅法:⼀种是⼩数,另外⼀种是⽤指数⽅法表⽰的。如:In[3]:=0.239998Out[3]=0.23998In[4]:=0.12*10^11Out[4]=0.12*10^11
实数也可以与整数,有理数进⾏混合运算,结果还是⼀个实数。In[5]:=2+1/4+0.5Out[5]=2.75 ⼩数表⽰
复数是由实部和虚部组成,实部和虚部可以⽤整数、实数、有理数表⽰。在Mathematica 中,⽤I 表⽰虚数单位如:In[6]:=3+0.7IOut[6]=3+0.7i2.不同类型数的转换
在Mathematica的不同应⽤中,通常对数字的类型要求是不同的。例如在公式推导中的数字常⽤整数或有理数表⽰,⽽在数值计算中的数字常⽤实数表⽰。在⼀般情况下在输出⾏Out[n]中,系统根据输⼊⾏In[n]的数字类型对计算结果做出相应的处理。如果有⼀些特殊的要求,就要进⾏数据类型转换。在Mathematica中的提供以下⼏个函数达到转换的⽬的:N[x] 将x转换成实数
N[x,n] 将x转换成近似实数,精度为nRationalize[x] 给出x的有理数近似值
Rationalize[x,dx] 给出x的有理数近似值,误差⼩于dx举例:
In[1]:=N[5/3,20]
Out[1]=1.6666666666666666667
In[2]:=N[%,10] %表⽰上⼀输出结果,即%=1.6666666666666666667。Out[2]=1.666666667 第⼆个输出是把上⾯计算的结果变为10位精度的数字。In[3]:=Rationalize[%]Out[3]=5 33.数学常数
Mathematica 中定义了⼀些常见的数学常数,这些数学常数都是精确数。Pi 表⽰π=3.14159……E ⾃然对数的底e=2.71828……Degree 1度,π/180弧度I 虚数单位iInfinity ⽆穷⼤∞-infinity 负⽆穷⼤-∞
GondenRatio 黄⾦分割数0.61803
数学常数可⽤在公式推导和数值计算中,在数值计算中表⽰精确值。如:In[1]:=Pi^2Out[1]=π2In[2]:=Pi^2//NOut[2]=9.86964.数的输出形式
在数的输出中可以使⽤转换函数进⾏不同数据类型和精度的转换。另外对⼀些特殊要求的格式还可以使⽤如下的格式函数:NumberForm[expr,n] 以n位精度的实数形式输出实数exprScientificFormat[expr] 以科学记数法输出实数exprEngineergForm[expr] 以⼯程记数法输出实数expr例如:
In[1]:=N[Pi^30,30]
Out[1]=8.21289330402749581586503585434×1014In[2]:=NumberForm[%,10]
Out[2]//NumberForm=8.212893304×1014
下⾯的函数输出按⼯程记数法表⽰的指数可被3整除的实数In[3]=EngineeringForm[%%] %%表⽰上两步的输出结果,即Out[1]Out[3]//EngineeringForm=821.289330402749581586503585434×10122.2变量1.变量的命名
Mathematica中内部函数和命令都是以⼤写字母开始的标⽰符,为了不会与它们混淆,我们⾃定义的变量应该是以⼩写字母开始,后跟数字和字母的组合,长度不限。例如:a12,ast,aST都是合法的,⽽12a,z*a,a b(中间有空格)是⾮法的。另外在Mathematica
中的变量是区分⼤⼩写的。在Mathematica中,变量不仅可以存放⼀个数值,还可以存放表达式或复杂的算式。2.给变量赋值
在Mathmatica中⽤等号=为变量赋值。同⼀个变量可以表⽰⼀个数值,⼀个数组,⼀个表达式,甚⾄⼀个图形。如:In[1]:=x=3Out[1]=3In[2]:=x^2+2*xOut[2]=15In[3]:=x=%+1Out[3]=16
对不同的变量可同时赋不同的值,例如:In[4]:={u,v,w}={1,2,3}Out[4]={1,2,3}In[5]:=2u+3v+w
Out[5]=11
对于已定义的变量,当你不再使⽤它是,为防⽌变量值的混淆,可以随时⽤=.清除它的值,如果变量本⾝也要清除⽤函数Clear[var],例如:In[6]:=u=.
In[7]:=2u+v (上⾯已定义了u,v的值)Out[7]=2+2u3.变量的替换
在给定⼀个表达式时其中的变量可能取不同的值,这是可⽤变量替换来计算表达式的不同值。⽅法为⽤expr/.x->xval,例如:In[1]:=f=x/2+1Out[1]= 1+2x
In[2]:=f/.x->1Out[2]= 3 2In[3]:=f/.x->2Out[3]=2
如果表达式中有多个变量,也可同时替换,⽅法为:expr/.{x->xval,y->yval,...} In[4]:=(x+y)(x-y)^2/.{x->3,y->1-a}Out[4]=(4-a)(2+a)22.3 函数1.系统函数
在Mathmatic中定义了⼤量的数学函数可以直接调⽤,这些函数其名称⼀般表达了⼀定的意义,可以帮助我们理解。下⾯是⼏个常⽤的函数:
Floor[x] 不⽐x⼤的最⼤整数Ceiling[x] 不⽐x⼩的最⼩整数Sign[x] 符号函数Round[x] 接近x的整数Abs[x] x绝对值
Max[x1,x2,x3……..] x1 ,x2,x3…….中的最⼤值Min[x1,x2,x3……..] x1,x2,x3…….中的最⼩值Random[] 0~1之间的随机函数
Random[R,xmax] 0~xmax之间的随机函数(R为Real,Integer,Complex之⼀) Random[R,{xmin,xmax}] xmin~xmax之间的随机函数(R为Real,Integer,Complex之⼀) Exp[x] 指数函数e xLog[x] ⾃然对数函数lnxLog[b,x] 以b为底的对数函数logx
b Sin[x],Cos[x],Tan[x],Csc[x],Sec[x],Cot[x] 三⾓函数(变量是以弧度为单位的)ArcSin[x],ArcCos[x],ArcTan[x],ArcCsc[x],ArcSec[x],ArcCot[x] 反三⾓函数
Sinh[x],Cosh[x],Tanhx[x],Csch[x],Sech[x],Coth[x] 双曲函数
ArcSinh[x], ArcCosh[x], ArcTanhx[x], ArcCsch[x],ArcSech[x],ArcCoth[x] 反双曲函数Mod[m,n] m被n整除的余数,余数与n同号Quotient[m,n] m/n的整数部分
GCD[n1,n2,n3……]或GCD[s] n1,n2,…或s的最⼤公约数,s为数据集合LCM[n1,n2……]或LCM[s] n1,n2…或s的最⼩公倍数,s为数据集合N! N的阶程N!! N的双阶程
Mathematica中的函数与数学上的函数有些不同的地⽅,Mathematica中函数是⼀个具有独⽴功能的程序模块,可以直接被调⽤。同时每⼀函数也可以包括⼀个或多个参数,也可以没有参数。参数的的数据类型也⽐较复杂。更加详细的可以参看系统的帮助,了解各个函数的功能和使⽤⽅法是学习Mathematica软件的基础。2.函数的定义(1) 函数的⽴即定义
⽴即定义函数的语法如下f[x_]=expr函数名为f,⾃变量为x,expr是表达式。在执⾏时会把expr 中的x都换为f的⾃变量x (不是x_)。函数的⾃变量具有局部性,只对所在的函数起作⽤。函数执⾏结束后也就没有了,不会改变其它全局定义的同名变量的值。
请看下⾯的例⼦,定义函数f(x)=xsinx+x2,对定义的函数我们可以求函数值,也可绘制它的图形。In[1]:=f[x_]=x*Sin[x]+x^2Out[1]=x 2 +xSin[x]In[2]:=f[1]Out[2]=1+Sin[1]In[3]:=Plot[f[x],{x,-3,3}]
对于定义的函数我们可以使⽤命令Clear[f]清除掉,⽽Remove[f]则从系统中删除该函数。(2) 多变量函数的定义
也可以定义多个变量的函数,格式为f[x_,y_,z_,…]=expr ⾃变量为x,y,z …,相应的expr 中的⾃变量会被替换。例如定义函数f(x,y)=xy+ycosx 。
In[1]:=f[x_,y_ ]=x*y+y*Cos[x] Out[1]=xy+yCos[x] In[2]:=f[2,3] Out[2]=6+3Cos[2](3) 延迟定义函数
延迟定义函数从定义⽅法上与即时定义的区别为 “=” 与“:=”延迟定义的格式为f[x_]:=expr 其他操作基本相同。那么延迟定义和即时定义的主要区别是什么?即时定义函数在输⼊函数后⽴即定义函数并存放在内存中并可直接调⽤。延时定义只是在调⽤函数时才真正定义函数。
(4) 使⽤条件运算符定义和If 命令定义函数如果要定义如:21 0() 01 sin 1
x x f x x x x x -≥??=>>-??
≤-? 这样的分段函数应该如何定义,显然要根据x 的不同值给出不同的表达式。⼀种办法是使⽤条件运算符,基本格式为:f[x_]:=expr/;condition ,当condition 条件满⾜时才把expr 赋给f(x) 。下⾯定义⽅法,通过图形可以验证所定义函数的正确性。In[1]:=f[x_]:=x-1/;x>=0
f[x_]:=x^2/;(x>-1)&&(x<0) f[x_]:=x-1/;x<= -1In[4]:=Plot[f[x],{x,-2,2}]
Out[4]= -Graphics-当然使⽤If命令也可以定义上⾯的函数,If语句的格式为If[条件,值1,值2],如果条件成⽴取“值1”,否则取“值2”,⽤If语句的定义结果如下:
In[5]:=g[x_]:=If[x>=0,x-1,If[x<= -1,Sin[x],x^2]]In[6]:=Plot[g[x],{x,-2,2}]
Out[6]= -Graphics-可以看出⽤If定义的函数g(x)和前⾯函数f(x)相同,这⾥使⽤了两个If嵌套,逻辑性⽐较强。关于其他的条件命令的进⼀步讨论请看后⾯的章节。2.4 表
将⼀些相互关联的元素放在⼀起,使它们成为⼀个整体。既可以对整体操作,也可以对整体中的⼀个元素单独进⾏操作。在Mathematica中这样的数据结构就称作表(List)。表{a,b,c}表⽰⼀个向量;表{{a,b},{c,d}}表⽰⼀个矩阵。1.建表
在表中元素较少时,可以采取直接列表的⽅式列出表中的元素,如{1,2,3},请看下⾯的操作:In[1]:={1,2,3}Out[1]={1,2,3}
下⾯是符号表达式的列表:In[2]:=1+%x+x^%
Out[2]={1+2x,1+2x+x2,1+3x+x3}
下⾯是把Out[2]列表中的表达式对x求导:In[3]:=D[%,x]
Out[3]={2,2+2x,3+3x2}In[4]:=%/.x->1Out[4]={2,4,6}
如果表中的元素较多时,可以⽤建表函数进⾏建表:
Table[f,{i,min,max,step}] 以step为步长给出f的数值表,i由min变到maxTable[f,{min,max}] 给出f的数值表,i由min变到max 步长为1Table[f,max] 给出max个f的表
Table[f,{i,imin,imax},{j,jmin,jmax},….] ⽣成⼀个多维表TableForm[list] 或list//TableForm 以表格格式显⽰⼀个表Range[n] ⽣成⼀个{1,2,……,n}的列表
Range[n1,n2,d] ⽣成{n1,n1+d,n1+d,….,n2}的列表下⾯给出x乘i的值的表,i的变化范围为[2,6]:In[1]:=Table[x*i,{i,2,6}]Out[1]={2x,3x,4x,5x,6x}In[2]:=Table[x^2,{4}]Out[2]={x2,x2,x2,x2}
⽤Range函数⽣成⼀个序列数:In[3]:=Range[10]
Out[3]={1,2,3,4,5,6,7,8,9,10}
下⾯这个序列是以步长为2,范围从8到20:In[4]:=Range[8,20,2]Out[4]={8,10,12,14,16,18,20}
上⾯的参数变化都是只有⼀个,也可制成包括多个参数的表,下⾯⽣成⼀个多维表:In[5]:=Table[2i+j,{i,1,3},{j,3,5}]Out[5]={{5,6,7},{7,8,9},{9,10,11}}
使⽤函数TableForm可以以表格的⽅式输出In[6]:=%//TableFormOut[6]//TableForm=5 6 77 8 99 10 11
2.表的元素的操作
当t表⽰⼀个表时,t[[i]]表⽰t中的第i个⼦表。如果t={1,2,a,b}那么t[[3]]表⽰“a”。In[1]:=t=Table[I+2,j{I,1,3},{j,3,5}]Out[1]={{7,9,11},{8,10,12},{9,11,13}}
In[2]:=t[[2]]Out[2]={8,10,12}
对于表的操作Mathematica提供了丰富的函数,详细的可以查阅后⾯的附录或者系统帮助。2.5 表达式1.表达式的含义
Mathematica 能处理数学公式,表以及图形等多种数据形式。尽管他们从形式上看起来不⼀样,但在Mathematica内部都被看成同种类型,即都把他们当作表达式的形式。Mathematica 中的表达式是由常量、变量、函数、命令、运算符和括号等组成,它最典型的形式是f[x,y]。2.表达式的表⽰形式
在显⽰表达式时,由于需要的不同,有时我们需要表达式的展开形式,有时⼜需要其因⼦乘积的形式。在我们计算过程中可能得到很复杂的表达式,这时我们⼜需要对它们进⾏化简。常⽤的处理这种情况的函数就是变换表达式表⽰形式函数。Expand[expr] 按幂次升⾼的顺序展开表达式Factor[expr] 以因⼦乘积的形式表⽰表达式
Simplify[expr] 进⾏最佳的代数运算,并给出表达式的最少项形式表达式(x+y) 4 (x+y 2 ) 展开:In[1]:=Expand[(x+y)^4*(x+y^2)]
Out[1]=x 5 +4x 4 y+6x 3 y 2 +x 4 y 2 +4x 2 y 3 +4x 3 y 3 +xy 4 +6x 2 y 4 +4xy5 +y 6还原上⾯的表达式为因⼦乘积的形式:In[2]:=Factor[%]Out[2]=(x+y) 4 (x+y 2 )
多项式表达式的项数较多,⽐较复杂,在显⽰时显得⽐较杂乱,⽽且在计算过程中没有必要知道全部的内容;或表达式的项很有规律,没有必要打印全部的表达式的结果,Mathematica提供了⼀些命令,可将它缩短输出或不输出。expr//Short 或Short[expr] 显⽰表达式的⼀⾏形式
Short[expr,n] 显⽰表达式的n⾏形式,命令后加⼀分号“;”不输出结果将表达式(1+x) 30展开,并仅显⽰⼀⾏有代表项的式⼦:In[3]:=Expand[(1+ x)^30]//Short
Out[3]=1+30x+435x 2 +4060x 3 +<<23>>+4060x 2 7 +435x 2 8 +30x 2 9 +x 3 0将上式分成三⾏的形式展开:In[4]:=Short[Expand[(1+ x)^30],3]
Out[4]=1+30x+435x 2 +4060x 3 +27405x 4 +142506x 5 +<<19>>+142506x 2 5 +
27405x 2 6 +4060x 2 7 +435x 2 8 +30x 2 9 +x 3 0
把代数表达式变换到你所需要的形式没有⼀种固定的模式,⼀般情况下,最好的办法是进⾏多次实验,尝试不同的变换并观察其结果,再挑出你满意的表⽰形式。3.关系表达式与逻辑表达式
我们已经知道“=”表⽰给变量赋值。现在我们来学习⼀些其它的逻辑与关系算⼦。关系表达式是最简单的逻辑表达式,我们常⽤关系表达式表⽰⼀个判别条件。例如:x>0,y=0。关系表达式的⼀般形式是:表达式+关系算⼦+表达式。其中表达式可为数字表达式、字符表达式或意义更⼴泛的表达式,如⼀个图形表达式等。在我们实际运⽤中,这⾥的表达式常常是数字表达式或字符表达式。下⾯出Mathematica中的各种关系算⼦:x==y 相等
x!=y 不相等x>y ⼤于x>=y ⼤于等于x
x<=y ⼩于等于x==y==z 都相等x!=y!=z 都不相等x>y>z 严格递减x
给变量x,y赋值,输出后⼀变量的值,如:In[1]:=x=2;y=9Out[1]=9In[2]:=x>yOut[2]=False
下⾯是⽐较两个表达式的⼤⼩:In[3]:=3^2>y+1 上⾯已设y=9Out[3]= False
⽤⼀个关系式只能表⽰⼀个判定条件,要表⽰⼏个判定条件胡组合,必须⽤逻辑运算符将关系表达式组织在⼀起,我们称表⽰判定条件的表达式为逻辑表达式。下⾯是常⽤的逻辑运算和它们的意义:!⾮&& 并||或Xor 异或If 条件
LogicalExpand[expr] 展开逻辑表达式例如下⾯的例⼦说明它们的应⽤:In[4]:=3*x^2Out[4]=FalseIn[5]:=3*x^2Out[5]=True2.6 常⽤的符号
(term) 圆括号⽤于组合运算f[x] ⽅括号⽤于函数{ } 花括号⽤于列表[[i]] 双括号⽤于排序
% 代表最后产⽣的结果%% 倒数第⼆次的算结果%%%(k) 倒数第k次的计算结果%n 例出⾏Out[n]的结果(⽤时要⼩⼼)第3章Mathematica的基本运算3.1 多项式的表⽰形式
可认为多项式是表达式的⼀种特殊的形式,所以多项式的运算与表达式的运算基本⼀样,表达式中的各种输出形式也可⽤于多项式的输出。Mathematica提供⼀组按不同形式表⽰代数式的函数。Expand[ploy] 按幂次展开多项式ployExpandAll[ploy] 全部展开多项式ployFactor[ploy] 对多项式poly 进⾏因式分解
FactorTerms[ploy,{x,y,…}] 按变量x,y,…进⾏分解Simplify[poly] 把多项式化为最简形式FullSimplify[ploy] 把多项式化简Collect[poly,x] 把多项式poly按x幂展开
Collect[poly,{x,y…}] 把多项式poly按x,y….的幂次展开1.下⾯是⼀些例⼦(1) 对x 8 -1 进⾏分解In[1]:=Factor[x^8-1]
Out[1]=(-1+x)(1+x)(1+x 2)(1+x4)(2) 展开多项式(1+x) 5In[2]:= Expand[(1+x)^5]
Out[2]=1+5x+10x 2+10x 3+5x 4+x5(3) 展开多项式(1+x+3y) 4In[3]:= Expand[(1+x+3y)^4]
Out[3]=1+4x+6x 2+4x 3+x 4+12y+36xy+36x 2y+12x 3y+54y 2+108xy 2+54x 2y 2+108y 3+108xy 3+81y 4(4) 展开并化简(2+x) 4 (1+x) 4 (3+x) 3
In[4]:= Simplify[Expand[(2+x)^4(1+x)^4(3+x)^3]]Out[4]=(3+x) 3 (2+3x+x 2 ) 42.多项式的代数运算
多项式的运算有加、减、乘、除运算:+,-,*,/ 下⾯通过例⼦说明。(1) 多项式的加
运算a 2 +3a+2与a+1相加(后⾯例⼦中也使⽤这两个多项式运算)In[5]:=(a^2+3*a+2)+(a+1) 括号可以不要Out[5]= 3+4a+ a 2
或者In[5]:=p1= a^2+3*a+2;p2= a+1;p1+p2Out[5]= 3+4a+ a 2(2) 多项式相减
In[6]:=(a^2+3*a+2)-(a+1)Out[6]= 1+2a+ a 2或者In[6]:=p1-p2Out[6]= 1+2a+ a 2(3) 多项式相乘
In[7]:=(a^2+3*a+2)*(a+1) Out[7]= (1+ a) (2+3a+ a2) 或者In[7]:=p1*p2
Out[7]= (1+ a) (2+3a+ a2) In[8]:=Expand[p1*p2] Out[8]=2+5a+4a 2+a 3 (4) 多项式相除In[9]:=(a^2+3*a+2)/(a+1)Out[9]=2 23a a1a+++
或者In[9]:=p1/p2Out[9]=2 23a a1a+++
(5) 另外使⽤Cancel函数可以约去公因式In[10]:=Cancel[p1/p2]Out[10]=2+a
两个多项式相除,总能写成⼀个多项式和⼀个有理式相加Mathematic中提供两个函数PolynomialQuotient和PolynomialRemainder分别返商式和余式。例如:2 12 xx +
In[11]:=PolynomialQuotient[x^2, 1+2x,x]Out[11]=142x
-+商的整式部分
In[12]:= PolynomialRemainder[x^2, 1+2x,x]Out[12]=14
商的余式部分3.2⽅程及其根的表⽰
因为Mathematica把⽅程看作逻辑语句。在数学⽅程式表⽰为形如“x 2 -2x -3=0”的形式。在Mathematica中“=”⽤作赋值语句,这样在Mathematica中⽤“==”(两个等号中间没有空格)表⽰逻辑等号,则⽅程应表⽰为“x^2 -2x -3==0”。⽅程的解同原⽅程⼀样被看作是逻辑语句。例如⽤Roots[lhs==rhs,vars]求⽅程x 2-3x+2=0的根显⽰为:In[1]:=Roots[x^2-3x+3==0,x]Out[1]=x==1||x==2 这种表⽰形式说明x取1或2均可⽽⽤Solve[lhs==rhs,vars]可得解集形式:In[2]:=Solve[x^2-3x+3==0,x]Out[2]={{x→1},{x→2}}1 求解⼀元代数⽅程
下⾯是常⽤的⼀些⽅程求解函数:Solve[lhs ==rhs,vars] 给出⽅程的解集
NSolve[lhs ==rhs,vars] 直接给出⽅程的数值解集 Roots[lhs ==rhs,vars] 求表达式的根FindRoot[lhs ==rhs,{x,x 0}] 求x 在x 0附近的⽅程的数值解 先看Solve 函数例⼦:In[3]:=Solve[x^2-2x -3==0,x] Out[3]= {{x →-1},{x →3}}
Solve 函数可处理的主要⽅程是多项式⽅程。Mathematica 总能对不⾼于四次的⽅程进⾏精确求解,对于三次或四次⽅程,解的形式可能很复杂。例如求x 3+5x+3=0
In[4]:=Solve[x^3+5x +3==0,x]
这时可⽤N 函数近似数值解:In[5]:=N[%]
Out[5]= {{x →-0.5641},{x →0.28205-2.28881i},{x →0.28205+2.28881i}}
当⽅程中有⼀些复杂的函数时,Mathematica 可能⽆法直接给出解来。在这种情况下我们可⽤FindRoot[]来求解,但要给出起始条件。
例如求3Cosx=lnx 的解:
In[6]:=FindRoot[3*Cos[x]==Log[x],{x,1}] Out[6]= {x →1.44726}
但只能求出x=1附近的解,如果⽅程有⼏个不同的解,当给定不同的条件时,将给出不同的解。如上例若求x=10附近的解命令为:
In[7]:=FindRoot[3*Cos[x]==Log[x],{x,10}] Out[7]= {x →13.1064}
因此确定解的起始位置是⽐较关键,⼀种常⽤的⽅法是,先绘制图形观察后再解。 In[8]:=Plot[{3*Cos[x],Log[x]},{x,1,15}]
因篇幅问题不能全部显示,请点此查看更多更全内容