资源描述:
《第6章-程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第六章Maple程序设计前面,我们使用的是Maple的交互式命令环境.所谓交互式命令环境,就是一次输入一条或几条命令,然后按回车,这些命令就被执行了,执行的结果显示在同一个可执行块中.对于大多数用户来说,利用交互式命令环境解决问题已经足够了,但如果要解决一系列同一类型的问题或者希望利用Maple编写需要的解决特定问题的函数和程序,以期更加充分地利用Maple的强大功能,提高大规模问题的计算效率,掌握一定的程序设计是必要的.幸运的是,Maple自身提供了一套编程工具,即Maple语言.Maple语言实际上是由Maple各种命令以及一
2、些简单的过程控制语句组成的.1编程基础1.1算子所谓算子,是从一个抽象空间到另一个抽象空间的函数.在数学上算子的含义通常是函数到函数的映射.在Maple中,算子常用“箭头”记号定义(也称箭头操作符):>f:=x->axexp(x);xf:=xa→xe>g:=(x,y)->axyexp(x^2+y^2);22()x+yg:=()xy,→axye另外,函数unapply也可以从表达式建立算子:>unapply(x^2+1,x);2x→x+1>unapply(x^2+y^2,x,y);22()xy,→x+y当我们依次把算子f作用到参数0
3、,a,x^2+a时即可得平常意义上的函数值:>f:=t->tsin(t);-137-f:=tt→sin()t>f(0);0>f(a);asin()a>f(x^2+a);22()x+asin()x+a22上述结果是函数作用的例子.而最后一个结果(x+a)sin(x+a)实际上是算子f与算子g:=t->t^2+a复合后再作用到参数x的结果.从数学上讲,作用与复合是不同的,它们产生的结果是有区别的,但在使用它们时,两者还是有些重叠的.在Maple中,可以依赖于语法把它们区分开:(1)当复合两个算子时,结果仍是算子,两个算子的定义域必须是
4、相容的;(2)当把一个算子作用于一个参数(参数必须在算子的定义域中)时,结果是一个表达式;(3)在Maple中,函数作用的语法是使用括号(),如函数f作用到参数u写作f(u).而复合算子的符号是@,多重复合时使用符号@@.通过进一步的例子可以清楚区分作用与复合的功能:f和g复合的结果是算子fog:=taf(g(t)),而把这个算子作用到参数x得到表达式f(g(x)).例如,f=tasin(t+ϕ),g=uaexp(u),则fog:=zasin(exp(z)+ϕ)是一个算子,而f(g(x)=sin(exp(x)+ϕ)是一个表达式,因
5、为x是一个实数.试比较下述两例:>D(g@f);()()D()g@fD()f>D(gh);D()ghg+D()h另外一个应引起注意的问题是算子(函数)与表达式的异同,在第一章2.2.2中曾探讨过函数与表达式的区别,这里再通过几个例子说明其中的微妙差异:>f1:=x^2+1;>f2:=y^2+1;2f1:=x+1-138-2f2:=y+1>f3:=f1+f2;22f3:=x+2+y再看下面的例子:>g1:=x->x^2+1;>g2:=y->y^2+1;2g1:=x→x+12g2:=y→y+1>g3:=g1+g2;g3:=g1+g2与
6、前面例子不同的是,两个算子(函数)g1,g2相加的结果依然是函数名g3,出现这个问题的主要原因是g1与g2分别为x,y的函数,Maple认为它们的定义域不相容.要得到与前例的结果,只需稍作改动:>g3:=g1(x)+g2(y);22g3:=x+2+y下面的例子想说明生成Maple函数的两种方式“箭头操作符”及“unapply”之间微妙的差异:>x:='x':a:=1:b:=2:c:=3:>ax^2+bx+c;2x+2x+3>f:=unapply(ax^2+bx+c,x);2f:=x→x+2x+3>g:=x->ax^2+bx+c;2
7、g:=x→ax+bxc+由此可见,f中的a,b,c已经作了代换,而g中则显含a,b,c。再看下面实验:>f(x);g(x);2x+2x+32x+2x+3-139-f与g两者相同,再对其微分:>D(f);D(g);x→2x+2x→2ax+b再改变常数c的值,观察f与g的变化:>c:=15;c:=15>f(x);g(x);2x+2x+32x+2x+15由此可见,在利用Maple进行函数研究时,对同一问题应该用不同方法加以校验,而这一切的支撑是数学基础!1.2编程初体验利用算子可以生成最简单的函数—单个语句的函数,但严格意义上讲它并非程
8、序设计,它所生成的数据对象是子程序.所谓子程序,简单地说,就是一组预先编好的函数命令,我们由下面的简单程序来看看Maple程序的结构:>plus:=proc(x,y)x+y;end;这个程序只有2个参数,在程序内部它的名称是x,y,这是Maple最