资源描述:
《Mathematica-教程08变换规则与表达式ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、变换规则与表达式非自动使用的变换规则带条件的规则表达式的完全形式与表达式结构有关的函数非自动使用的变换规则前面介绍的规则都存入Mathematics的规则库中,在求值时被Mathematics自动查阅、使用,例如使用“=”和“:=”定义的规则都属于这一类。还有另一类非自动使用的变换规则,它们不能放入规则库中、不会被Mathematics自动使用,只能由用户在需要时键入执行。1.规则表与规则的使用非自动使用的变换规则采用“->”和“:>"分别替代“=”和";="这两个符号的区别也是位于符号右边的表达式是否立即求值。表达式/.规则表
2、对表达式中各项尝试使用一次规则表中的规则表达式//.规则表反复使用规则表中的规则直到结果不变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与人的理解不一致的问题,由此导致错误的发生。Math
3、ematica给出了解决办法:使用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_能与任何幕式匹配
4、),也是只变换了外层。In[3]的变换是将二次幕变成一次幂,因为被变换的一层有两项,它们都变了。In[4]虽然给了两个变换规则,也还是至多将表达式变换一次,而不是每个规则都能用一次使用//.的例子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中的规则。ReplaceRe
5、peated[expr.rules]对expr反复使用rules中的规则直到结果不变,还有可选参数MaxIterations,允许指定使用变换的次数,取值为:n默认值为655366Infinity不限制次数。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->3ReplaceAll[Replac
6、eAll[ReplaceAll[2x^y,2->a],x->2],y->3]2x^y/.x->2/.y->3/.2->aReplaceAll[ReplaceAll[ReplaceAll[2x^y,x->2],y->3],2->a]说明:前两个表示法是等同的,后两个表示法也是等同的,因此在一个式子中连续多次使用“/.”相当于嵌套,使用嵌套能准确理解变换过程.当变换的次序不同时,得到的结果也可能不同.后两个式子经过两次变换后,结果为16,变换2->a不再起作用.函数Replace详解Replace[expr,rules]对expr试
7、用一次规则表中的规则。Replace[expr,rules,levelspec]对由层号levelspec指定的表达式的各层试用规则表中的规则。第二个函数出现层号的概念,层号用于指明表达式的某一部分属于表达式的第几层,可以用函数:Level[expr,levelspec]查看位于层号指定各层的所有子表达式.Depth[expr]返回一个数等于表达式的层数加1层号有几种用法:n表示从1到n的所有各层.{n}表示第n层.{n1,n2}表示从n1到n2的所有各层.Infinity表示所有各层Replace[Sin[x^2],Sin[x
8、^2]->a]Replace[Sin[x^2],x^2->a]Sin[x^2]/.x^2->a说明:不加第3个参数时,函数Replace只能对整个表达式指明变换规则,不能变换子表达式.因此以上In[2]中的变换规则不起作用,还不如In[3]使用“/.”反而能达到