maple 第十一章编程

上传人:suns****4568 文档编号:89394894 上传时间:2019-05-24 格式:PDF 页数:30 大小:277.01KB
返回 下载 相关 举报
maple 第十一章编程_第1页
第1页 / 共30页
maple 第十一章编程_第2页
第2页 / 共30页
maple 第十一章编程_第3页
第3页 / 共30页
maple 第十一章编程_第4页
第4页 / 共30页
maple 第十一章编程_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《maple 第十一章编程》由会员分享,可在线阅读,更多相关《maple 第十一章编程(30页珍藏版)》请在金锄头文库上搜索。

1、第十一章Maple编程 Maple用户的数量很多,许多用户仅仅是交互式的使用Maple系统.他们并没有意识到Maple也 是一种完善的程序语言. 编写Maple程序实际上是非常简单的,只要在你每天使用的一系列命令前后分别加上proc( )及end即可. Maple系统中含有数以千计的命令,其中的百分之八十自身就是Maple程序,用户 完全可以尽情地检测和修改他们,以适应自己的需要,或者扩充它们来解决新的问题.一些在 其他语言中需要花费若干天或者若干星期编写的应用程序,在Maple中只需几个小时便可完成. Maple之所以有如此高效率,主要因为Maple是交互式语言,语言的可交互性大大方便了程序

2、的 测试与修改. Maple编程不需要专门的技巧.区别于传统语言的是, Maple含有丰富的功能强大的命令,他 们将一些复杂的,通常需要写数页编码的任务浓缩为一个命令.例如, solve命令可用于求方程 组的解. Maple还带有一个巨大的程式库,其中包括图形处理程序.因此,利用Maple自带的程序 构造应用程序,是一件极为容易的事情. 下面我们通过一个简单的程序来说明Maple程序的基本结构: test:=proc(X:list) local n,i,total; n:=nops(X); if n=0 then ERROR(empty list) end if; total:=0; for

3、i from 1 to n do total :=total+Xi; end do; total/n; end proc: test(1,2,a); 1 + 1 3 a test(a,b,c); 1 3 a + 1 3 b + 1 3 c X:=1.3,5.3,11.2,2.1,2.1; X := 1.3, 5.3, 11.2, 2.1, 2.1 test(X); 4.400000000 这个程序计算一个列表的平均值.在其中我们用到了条件语句、循环语句以及局部变量的 声明等.这些都是Maple程序的基本组成部分. 244 11.1程序的基本结构245 11.1程序的基本结构 Maple以pro

4、c命令开始一个过程.以end proc结束这个过程.一个过程的基本结构如下: name:=proc(P) local L; global G; options O; description D; B end proc; 其中name是用户定义的过程的名字, P是过程的形式参数, local L是局部变量, global G是过 程的全局变量, options是过程的选项, description是过程的描述域, B是过程的体,最后用end proc语句结束一个过程. 象其他Maple对象一样,我们定义过程时通常都赋给它一个名字.而且通常都是用proc开 始,以end proc结束.但是也有一些

5、特殊情况.例如我们经常要定义函数,定义函数实际上就是 定义一个过程.例如下列定义的函数 F := (x,y) - x2 + y2; F := (x, y) x2+ y2 实际上就是一个最简单的过程.用过程语言来描述就是: F :=proc(x,y) x2+y2 end proc; F := proc(x, y)x2+ y2endproc 这两个定义是等价的.在这个过程的定义中,我们省略了局部变量与全局变量,选项与描述体等 部分,仅有一个过程体.调用过程的方式和调用函数的方式是一样的, F(2,3); 13 当Maple执行过程体内的语句时,它用函数调用时提供的实际参数A代替形式参数P.值得注意

6、 的是: Maple在进行代换之前将计算实际参数A的值.通常,过程执行后返回的结果是过程体中 最后一个可执行语句计算的结果. 无名过程 过程的定义是合法的Maple表达式.可以建立、使用、调用过程,而不必为过程指定一个名 字.不过定义一个无名过程通常是和其它过程组合在一起使用的. (x)- x2; x x2 可以用下列方式调用无名过程 ( x - x2)(t); t2 246第十一章Maple编程 proc(x,y) x2+y2 end proc(u,v); u2+ v2 无名过程的常用方式是与map命令联合使用. map(x-x2, 1,2,3,4); 1, 4, 9, 16 可以把几个无名

7、过程一起使用,如果合适,也可以与其它命令一起使用,例如微分算子D. D(x - x2); x 2x F := D(exp+2*ln); F := exp + 2(a 1 a) 可以把结果F直接作为变量使用. 过程简化 当建立一个过程时, Maple并不执行这个过程,但是对过程体进行简化. proc(x) local t; t := x*x*x + 0*2; if true then sqrt(t); else t2 end if; end proc; proc(x)localt; t := x3; sqrt(t)end proc 过程简化是程序优化的一个简单形式. 条件语句 与其它程序语言相同

8、的,Maple的过程体也是由赋值语句,条件语句,循环语句组成的.在这 里我们首先说明一下条件语句的用法. 条件语句有四种形式.前两种形式的语法如下 if expr then statseq end if if expr then statseq1 else statseq2 end if Maple执行条件语句的过程是:首先求expr的值,如果结果是布尔值true就执行then以后的语句statseq,然 后结束.如果expr的值是false或FAIL,则Maple执行else以后的语句.例如 x:=-2: if xif x, then 0, else 1 end if; Syntax err

9、or, reserved word then unexpected 如果对条件不成立时不要作任何动作,则可以省略else语句. if x0 then x:=x-1 end if; x; 2 条件语句可以嵌套.即then部分及else部分的语句序列中可以是任何语句,包括if语句. 下面的例子计算一个数的符号. if x1 then 1 else if x=0 then 0 else -1 end if; end if; 这个例子说明了FAIL的用法. r:=FAIL: if r then print(1) else if not r then print(0) else print(-1) en

10、d if end if; 1 如果Maple有许多情形需要考虑,仅使用if和else语句会变的杂乱难读. Maple提供了下述两 种形式的语句. ifexpr then statseq elif expr then statseq end if 和 ifexpr then statseq elif expr then statseq else statseq end if 248第十一章Maple编程 其中elif expr then statseq结构可以多次出现. 下面我们用elif来实现符号函数. x:=-2; x := 2 if x elif x=0 then 0 else 1 end

11、 if; 1 由于循环语句的情况较为复杂,我们在下一节中单独说明. 11.2循环语句 象其它程序语言一样, Maple也提供两种循环语句.分别为for循环和while循环.但是在Maple中, for循环与while循环本质上是统一的,因此,我们主要讨论for循环的用法. for循环 循环结构主要是用来处理相似的计算.例如,求前五个自然数的和可以如下计算. total:=0; total:=total+1; total:=total+2; total:=total+3; total:=total+4; total:=total+5; 这个问题也可以用for循环处理. total:=0: for

12、 i from 1 to 5 do total:=total+i; end do; total := 1 total := 3 total := 6 total := 10 total := 15 每轮循环, Maple使i的值加1并检查i的值是否大于5,如果不大于5, Maple则再次执行循环体. 循环结束后total的值为15. total; 15 11.2循环语句249 下述过程使用for循环计算前n个自然数的和. SUM:=proc(n) local i, total; total :=0; for i from 1 to n do total:=total+i; end do; to

13、tal; end proc: SUM最后的total语句是为了保证SUM返回total的值.例如计算前100个数的和的命令为: SUM(100); 5050 上面我们给出了for循环常见的使用方法, for循环的一般语法结构如下: for name from expr1 by expr2 to expr3 while condition do commands end do; 其中expr1是name的初始值, expr3是name的终值. expr2是步长. condition则是name所满足的条 件.在for循环的结构中,可以省略下列任何一部分for name, from expr1,

14、by expr2, to expr3或 者while expr. commands也可以省略.除了for部分必须放置于首位外,其余的部分可以按任意 的顺序放置.省略的部分有自己的缺省值,见下表: 各部分及其缺省值 部分缺省值 for虚拟变元 from1 by1 toinfinity whiletrue 其中while condition是用来判断循环变量是否满足条件,在省缺情况下, condition为恒真.有 时我们可以通过给定一个条件来终止循环.例如我们要找出大于107的第一个素数可以编写如下 程序 for i from 107 while not isprime(i) do end do

15、; 现在i是第一个大于107的素数. i; 10000019 注意到循环体是空的. Maple容许空语句. 下面是重复n次动作的例子.掷五次筛子. die:=rand(16): 250第十一章Maple编程 to 5 do die(); end do; 4 3 4 6 5 在这个例子中我们省略了循环变量,仅给出了循环的次数.有时也可以省略掉所有的循环语句,仅 有 do commands end do; 此时的含义是作无限循环. while循环 while循环也是一类非常重要的循环结构,实际上while循环是for循环中省略了除while部 分外的其它部分,它的结构为 while conditi

16、on do commands end do; 表达式expr称为while条件.它必须是布尔值表达式,也就是说:它的值必须是true, false,或 者FAIL.例如 x:=256; x := 256 while x1 do x:=x/4 end do; x := 64 x := 16 x := 4 x := 1 while循环的工作方式如下.首先Maple计算while条件.如果值为true, Maple运行循环体.重复 循环直到Maple条件的值为false或FAIL.注意, Maple在执行循环体之前计算条件. while条件不 是true, false或FAIL三者之一时就是出现错误.例如 x:=1/2: while x1 do x:=x/2 end do; x; 1 2 while x do x:=x/2 end do; Error, invalid boolean expression 11.2循环语句251 for-in循环 for循环还有一种形式,我们称为for-in循环,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号