Mathematica-教程08变换规则与表达式

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

►Down◙Main变换规则与表达式非自动使用的变换规则带条件的规则表达式的完全形式与表达式结构有关的函数►Down◄Up◙Main非自动使用的变换规则前面介绍的规则都存入Mathematics的规则库中,在求值时被Mathematics自动查阅、使用,例如使用“=”和“:=”定义的规则都属于这一类。还有另一类非自动使用的变换规则,它们不能放入规则库中、不会被Mathematics自动使用,只能由用户在需要时键入执行。1.规则表与规则的使用非自动使用的变换规则采用“-”和“:分别替代“=”和;=这两个符号的区别也是位于符号右边的表达式是否立即求值。►Down◄Up◙Main表达式/.规则表对表达式中各项尝试使用一次规则表中的规则表达式//.规则表反复使用规则表中的规则直到结果不变x^2+2x^4-x^6/.x^n_→x^(n/2)%/.x→x^2;%1/.x^n_-.x^(2n)例使用了带有参数的变换规则,对于表达式中的各项,都试用一次变换规则。In[1]是将n次幂变成n/2次幂。In[2]又将多项式复原。不过应当注意In[3],原来打算使用另一种变换表达式将Out[I]复原,但是Mathematics并不将x当做x^1,第1项没有被变换。Mathematica与人的理解不一致的问题,由此导致错误的发生。►Down◄Up◙MainMathematica给出了解决办法:使用n_.代替n_,这时如果n不出现则默认为n=1。将In[3]修改成:%1/.x^n_.x^(2n)X_+Y_.不出现时则Y=0,而X_Y_.中Y不出现时则Y=1.f[f[x]]/.f[x_]→Sin[x];Sin[x^2+x^4]^2/.u_^n→u^(n/2)g[y^2+Sin[x^2]^2]/.u_^2→u;x^4/.{x^4→x^2,x^2→x}In[1]说明,当表达式有两层能变换时,因为只能变换一次,结果是变换了外层。In[2]的变换是将幂次除2(其中使用了模式u_^n_能与任何幕式匹配),也是只变换了外层。In[3]的变换是将二次幕变成一次幂,因为被变换的一层有两项,它们都变了。In[4]虽然给了两个变换规则,也还是至多将表达式变换一次,而不是每个规则都能用一次►Down◄Up◙Main使用//.的例子f[f[x]]//.f[x_]→Sin[x];Sin[x^2]^2//.u_^2→u;x^4//.{x^4→x^2,x^2→x}使用//.后,允许反复使用变换规则,能变的都变了执行变换的函数与操作符“/.”和“//.等同的函数ReplaceAll[expr.rules]对expr中各项尝试使用一次rules中的规则。ReplaceRepeated[expr.rules]对expr反复使用rules中的规则直到结果不变,还有可选参数MaxIterations,允许指定使用变换的次数,取值为:n默认值为655366Infinity不限制次数。►Down◄Up◙MainReplaceRepeated[f[f[f[f[x]]]],f[x_]-x,MaxIterations-3]ReplaceRepeated[f[f[f[f[x]]]],f[x_]-x,MaxIterations-∞]执行语句是可以嵌套的,如2x^y/.2-a/.x-2/.y-3ReplaceAll[ReplaceAll[ReplaceAll[2x^y,2-a],x-2],y-3]2x^y/.x-2/.y-3/.2-aReplaceAll[ReplaceAll[ReplaceAll[2x^y,x-2],y-3],2-a]说明:前两个表示法是等同的,后两个表示法也是等同的,因此在一个式子中连续多次使用“/.”相当于嵌套,使用嵌套能准确理解变换过程.当变换的次序不同时,得到的结果也可能不同.后两个式子经过两次变换后,结果为16,变换2-a不再起作用.►Down◄Up◙Main函数Replace详解Replace[expr,rules]对expr试用一次规则表中的规则。Replace[expr,rules,levelspec]对由层号levelspec指定的表达式的各层试用规则表中的规则。第二个函数出现层号的概念,层号用于指明表达式的某一部分属于表达式的第几层,可以用函数:Level[expr,levelspec]查看位于层号指定各层的所有子表达式.Depth[expr]返回一个数等于表达式的层数加1层号有几种用法:n表示从1到n的所有各层.{n}表示第n层.{n1,n2}表示从n1到n2的所有各层.Infinity表示所有各层►Down◄Up◙MainReplace[Sin[x^2],Sin[x^2]-a]Replace[Sin[x^2],x^2-a]Sin[x^2]/.x^2-a说明:不加第3个参数时,函数Replace只能对整个表达式指明变换规则,不能变换子表达式.因此以上In[2]中的变换规则不起作用,还不如In[3]使用“/.”反而能达到变换目的。因此Replace只有使用第3个参数时才有用,让用户能够自由选择变换的部位、随心所欲地进行变换.►Down◄Up◙Main说明:In[1]中返回表达式的层数为2,x^2是第一层的元素,第二层的元素是x和2.使用函数Level就可以弄清一个子表达式到底属于哪一层.如果同一层有多个子表达式满足变换条件,则都被变换Replace[Sin[x^2+x^6],x^n_-x^(n/2),{2}]如果改为”-”则出差错►Down◄Up◙Main说明:虽然子表达式x^2和x^6都能与变换规则匹配,但它们属于不同层,指定层号后可以分别被变换.指定层号为2时,x^6不变.指定层号为3时,x^2不变.最后In[7]中的3不带花括号,则前3层都变,但不如使用“/.”方便了.►Down◄Up◙Main函数ReplaceList的功能ReplaceList[expr,rules]对整个表达式试用规则表中的每一个规则,以表的形式列出全部结果,如果使用一个规则有多种可能的结果,则列出所有可能的结果.ReplaceList[expr,rules,n]给出至多有n个结果表。►Down◄Up◙Main同样的表达式和变换规则,给出Replace与ReplaceList的差异.In[1]和In[2]说明,当变换规则表中有多个变换可用时,前者只变换一次,后者将所有可用的变换都用一次,前者返回一个结果,后者返回由多个结果组成的一个表.In[3]使用第三个参数,限定至多只返回一个结果,最后In[4]和In[5]说明,当一个变换可能产生多个结果时,前者仍只返回一个结果,后者返回所有可能的结果.►Down◄Up◙Main-与:的差异u_-Expand[u]u_:Expand[u](1+x)^5/.u_-Expand[u](1+x)^5/.u_:Expand[u]在例中In[1]使用“-”号,符号右边的函数Expand[u]立即求值得到u,Out[1]表明变换规则变成u_-u.In[2]使用:号,符号右边的函数Expand[u]不立即求值,变换规则是u_:-Expand[u].由此知道,对同一表达式使用这两个变换时,结果自然不同.使用In[3]不能达到变换目的,这里必须改用In[4]经常使用的简单变换,使用-和:号的结果相同►Down◄Up◙Mainx^2/.x-3x^2/.x:3带条件的规则使用:=和:定义的变换规则,还可以附加条件,规则的定义形式为:模式:=表达式/;条件模式:表达式/;条件其中/;是附加条件用的操作符►Down◄Up◙Main其中IntegerQ[n]判断n是否为整数,如果不满足条件则不求值.x^2+x^3/.x^n_:x^(n/2)x^2+x^3/.x^n_:x^(n/2)/;IntegerQ[n/2]说明:上例In[1]中将幕次一律除2,In[2]限定n为偶数,两者结果不同。►Down◄Up◙Main表达式的完全形式表达式的完全形式的结构表达式分成两类:简单表达式和复杂表达式,简单表达式不能再分解成更简单的表达式,它们是:数、变量名、字符串。而a+b,x-a,aSin[x-y]显然不是简单表达式了,一般的表达式可能非常复杂,而且在形式上也会千差万别,Mathematica能将它们转换成统一的形式,称为表达式的完全形式。以下各行中右边的表达式是左边的输入表达式的完全形式:►Down◄Up◙Main显然完全形式不便于输入和阅读,但形式统一,是对表达式的一种理性认识,便于计算机处理时有统一的方法.这种形式一般仅供计算机内部使用,输入、输出时仍按通常约定的方式,Mathematica会自动转换,但输入时也可以使用完全形式。►Down◄Up◙Main查看表达式的完全形式FullForm[expr]返回表达式的完全形式。Head[expr]返回表达式的头.FullForm[x+2xy]Head[x+2xy]FullForm[{1,2,3}]FullForm[{{1,2},{3,4}}]FullForm[{{1,2},{3,4}}]//MatrixForm对于简单表达式,Fu1lForm返回原来的表达式,但是它们也有头。►Down◄Up◙MainFullForm[x]Head[x]FullForm[x]Head[x]FullForm[-2]Head[-2]有些数己经不能算简单表达式,由它们的完全形式可知►Down◄Up◙Main表达式的元素操作从表达式的完全形式看出,它可以分成若干个分量,每个分量可再分成几个子分量,类似于表的结构,故可用操作表中元素的方法来操作表达式的各部分。t=x+2xy+x^3;FullForm[t]t[[3]];t[[2,1]];t[[3,3]];t[[2,2]]=5;t先将表达式转换成完全形式,如Out[2],除其中所有的头,再将[]改成{},就得一个相应的表:{x,{x,3},{2,x,y}}.这样看出,对表达式操作同操作表是相对应的,不过t[[3]]是Times[2,x,y]而不是{2,x,y}同样也可操作表达式的头,如在t[[3]]就是表达式的头。对照相应的表可看出,一个表达式有几层,每层的元素都是什么►Down◄Up◙Main前缀和后缀表示形式后缀形式:expr//f,含义是f[expr]前缀形式:f@expr,

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功