第六章 Maple程序设计

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第六章Maple程序设计

教学目的:学习并掌握计算机代数系统Maple下的算法设计和程序设计原理和方法,包括基本程序结构、子程序求值、程序的嵌套以及程序的调试。

教学要求:掌握算法设计和程序设计原理和基本方法。

重点内容:算法设计,程序设计。

难点内容:算法设计,程序设计。

前面, 我们使用的是Maple 的交互式命令环境. 所谓交互式命令环境, 就是一次输入一条或几条命令, 然后按回车, 这些命令就被执行了, 执行的结果显示在同一个可执行块中. 对于大多数用户来说, 利用交互式命令环境解决问题已经足够了, 但如果要解决一系列同一类型的问题或者希望利用Maple 编写需要的解决特定问题的函数和程序, 以期更加充分地利用Maple 的强大功能, 提高大规模问题的计算效率, 进行一定的程序设计是必要的.

程序设计主要包括两个方面: 行为特性的设计与结构特性的设计. 所谓行为特性的设计, 通常是指将解决问题的过程的每一个细节准确地加以定义, 并且还应当将全部的解题过程用某种工具完整地描述出来, 这一过程也称为算法的设计. 而结构特性设计是指为问题的解决确定合适的数据结构.

幸运的是, Maple 自身提供了一套编程工具, 即Maple 语言. Maple 语言实际上是由Maple 各种命令以及一些简单的过程控制语句组成的.

1编程基础

1.1算子

所谓算子, 是从一个抽象空间到另一个抽象空间的函数. 在数学上算子的含义通常是函数到函数的映射. 在Maple 中, 算子常用“箭头”记号定义(也称箭头操作符): > f:=x->a*x*exp(x);

:= f → x a x e x

> g:=(x,y)->a*x*y*exp(x^2+y^2);

:= g → (),x y a x y e () + x 2y 2

另外, 函数unapply 也可以从表达式建立算子:

> unapply(x^2+1,x);

→ x + x 21

> unapply(x^2+y^2,x,y);

→ (),x y + x 2y 2

当我们依次把算子f 作用到参数0, a, x^2+a 时即可得平常意义上的函数值:

> f:=t->t*sin(t);

:= f → t t ()sin t

> f(0);

> f(a);

a ()sin a

> f(x^2+a);

() + x 2a ()sin + x 2a

上述结果是函数作用的例子. 而最后一个结果)sin()(22a x a x ++实际上是算子f 与算子g:=t->t^2+a 复合后再作用到参数x 的结果.

从数学上讲, 作用与复合是不同的,它们产生的结果是有区别的, 但在使用它们时, 两者还是有些重叠的. 在Maple 中, 可以依赖于语法把它们区分开:

(1) 当复合两个算子时, 结果仍是算子, 两个算子的定义域必须是相容的;

(2) 当把一个算子作用于一个参数(参数必须在算子的定义域中)时, 结果是一个表

达式;

(3) 在Maple 中,函数作用的语法是使用括号( ),如函数f 作用到参数u 写作f(u). 而

复合算子的符号是@,多重复合时使用符号@@.

通过进一步的例子可以清楚区分作用与复合的功能: f 和g 复合的结果是算子))((:t g f t g f =, 而把这个算子作用到参数x 得到表达式f (g (x )). 例如, )exp(),sin(u u g t t f =+=ϕ, 则))sin(exp(:ϕ+=z z g f 是一个算子, 而))sin(exp()((ϕ+=x x g f 是一个表达式, 因为x 是一个实数. 试比较下述两例: > D(g@f);

()@()()D g f ()D f

> D(g*h);

+ ()D g h g ()D h

另外一个应引起注意的问题是算子(函数)与表达式的异同,在第一章2.2.2中曾探讨过函数与表达式的区别,这里再通过几个例子说明其中的微妙差异:

> f1:=x^2+1;

> f2:=y^2+1;

:= f1 + x 21

:= f2 + y 21

> f3:=f1+f2;

x22y2

f3 + +

:=

再看下面的例子:

> g1:=x->x^2+1;

> g2:=y->y^2+1;

x21

:=

x +

g1 →

y21

y +

:=

g2 →

> g3:=g1+g2;

g3 +

g1g2

:=

与前面例子不同的是,两个算子(函数) g1, g2相加的结果依然是函数名g3,出现这个问题的主要原因是g1与g2分别为x,y的函数,Maple认为它们的定义域不相容. 要得到与前例的结果,只需稍作改动:

> g3:=g1(x)+g2(y);

x22y2

g3 + +

:=

下面的例子想说明生成Maple函数的两种方式“箭头操作符”及“unapply”之间微妙的差异:

> restart: a:=1: b:=2: c:=3:

> a*x^2+b*x+c;

x22x3

+ +

> f:=unapply(a*x^2+b*x+c,x);

x22x3

x + +

f →

:=

> g:=x->a*x^2+b*x+c;

a x2

b x c

:=

x + +

g →

由此可见,f中的a,b,c已经作了代换,而g中则显含a,b,c。再看下面实验:

> f(x); g(x);

+ +

x22x3

x22x3

+ +

f与g两者相同,再对其微分:

> D(f); D(g);

相关文档
最新文档