MAPLE画三维图象
Maple
简介
计算机代数系统的基本功能及特征以及网络资源. 然后介绍Maple V 的基本功能, 窗口环境以
及组织结构.
1.1 计算机代数系统的发展历史
什么是计算机代数系统? 从历史的角度来看\COMPUTE” 的涵义是\数值的计算". 数值
计算的涵义不仅仅是数的算术计算, 还包括其它复杂的计算, 例如: 数学函数的计算、求多项式
的根、矩阵的计算、矩阵特征值的计算等等. 数值计算的一个本质的特征是它不能保证绝对的
准确, 原因在于, 在数值计算的过程中我们是用浮点数进行计算的, 对于简单的问题, 我们可以
用纸和笔手工计算, 对于复杂的问题, 就需要用计算器或计算机进行计算. 然而, 对计算机来说,
要想绝对精确的表达一个浮点数几乎是不可能的, 在计算的过程中必然会产生误差.
数学的计算除了数值计算以外还有另一个重要的分枝, 我们称之为符号计算或代数计算. 简
单的讲, 就是对代表数学对象的符号进行计算. 这些符号可以代表整数、有理数、实数、复数或
代数数, 也可以代表其它的数学对象如多项式、有理函数、矩阵、方程组, 或者其它抽象的数学
对象如群、环、域等等. 对于这些抽象的数学符号, 我们通常是手工计算的, 这也是数学家传统
的工作方式. 然而随着计算机技术的发展, 以及对符号算法的深入研究, 用计算机代替人工进行
符号计算已经成为可能.
从二十世纪六十年代以来, 符号计算这个研究领域获得了极大的发展. 一系列符号计算算
法的提出为现代计算机代数系统奠定了理论基础. 比较著名的算法包括: 计算多项式理想的
Grobner 基算法、多项式分解的Berlekamp 算法、计算有理函数积分的Risch 算法.
在二十世纪六十年代, 比较流行的计算机程序语言是FORTRAN 和ALGOL. 这两种语言
主要是用来作数值计算的, 至今FORTRAN 依然是数值计算领域的标准语言之一. 然而FORTRAN 语言和ALGOL 语言并不适合于编写符号计算软件. 六十年代初出现的LISP 语言为符
号计算软件提供了合适的语言环境, 因此早期的符号计算软件都是用LISP 语言编写的. 其中最
著名的符号计算系统是REDUCE, REDUCE 系统是由Stanford 大学的Tony Hearn 开发的基
于LISP 语言的交互式符号计算系统, 最初的目的是用来进行物理计算. 到了二十世纪七十年代
初, 由麻省理工学院的Joel Moses, Willian Martin 等人开发的MACSYMA 系统诞生了, 它是那
个时代功能最强大的符号计算系统. 它的功能除了标准的代数计算以外, 还包括极限的计算、符
号积分、解方程等. 事实上, 许多符号计算的标准算法都是由麻省理工学院的研究小组提出的.
由G. Collins 和R. Loos 开发的SAC/ALDES 系统是另外一种类型的符号计算系统, 它的
前身是G. Collins 在IBM 编写的PM 系统(它是一个处理多项式的符号计算系统). SAC 是一
个非交互的系统, 它是由ALDES(ALgebraic DEScription) 语言编写的模块组成的, 并且带有一
个转换程序, 可以把结果转换成FORTRAN 语言. 到了1990 年, H. Hong 用C 语言重写了SAC
系统, 形成了新的SACLIB 系统. 这个系统提供了完整的C 语言源代码, 可以自由的从国际互
联网上下载.
在二十世纪七十年代的第四个通用的符号计算系统是muMATH. 它是由Hawaii 大学的
David Stoutemyer 和Albert Rich 开发的第一个可以在IBM 的PC 机上运行的计算机代数系统.
1
2 第一章Maple 系统简介
它所使用的开发语言是LISP 语言的一个子集称为muSIMP.
进入二十世纪八十年代, 随着个人PC 机的普及, 计算机代数系统也获得了飞速的发展. 在
这个时代推出的计算机代数系统大部分是用C 语言编写的, 比较著名的系统包括Maple, Mathematica, DERIVE 等. 有关Maple 的特点我们将在后面介绍, 这里, 我们简单介绍一下DERIVE
和Mathematica.
DERIVE 是muMATH 的后继版本, 它是第一个在PC 机上运行的符号计算系统.DERIVE
具有友好的菜单驱动界面和图形接口, 可以很方便的显示二维和三维图形. 它唯一的缺陷是没
有编程功能, 直到1994 年DERIVE 的第三版问世时, 才提供了有限的编程功能. 现在DERIVE
的大部分功能都被移植到由HP 公司和Texas 公司生产的图形计算器上.
Mathematica 是由Stephen Wolfram 开发的符号计算软件,Mathematica 系统的计算能力非
常强, 它的函数很多, 而且用户自己可以编程. 它的最大优点是, 在带有图形用户接口的计算机
上Mathematica 支持一个专用的Notebook 接口. 通过Notebook 接口, 我们可以向Mathematica
核心输入命令, 可以显示Mathematica 的输出结果, 显示图形、动画、播放声音. 通过Notebook,
我们可以书写报告、论文, 甚至整本书. 事实上, 有关Mathematica 的论文, 软件, 杂志大部分都
是用Notebook 写的, 并且在Internet 网络上广泛传播.Mathematica 的另一个重要特点是它具
有Mathlink 协议, 通过Mathlink, 我们可以把Mathematica 的核心与其它高级语言连接, 我们
可以用其它语言调用Mathematica, 也可以在Mathematica 中调用其它语言编写的程序. 到现
在为止, 能够与Mathlink 连接的语言包括C 语言,Excel,Word 等. 事实上Notebook 就是通过
Mathlink 与Mathematica 核心相连接的.
上面我们介绍的软件都是通用的符号计算系统, 其它通用的符号计算系统还有IBM 公司
的Thomas J. Watson 研究中心开发的AXIOM, 它的前身称为SCRATCHPAD.
除了上述通用的符号计算系统以外, 还有一些在某个领域专用的符号计算系统. 例如: 用于
高能物理计算的SCHOONSCHIP, 用于广义相对论计算的SHEEP 和STENSOR. 在数学领域
中用于群论的Cayley 和GAP, 用于数论的PARI, SIMATH 和KANT. 在代数几何和交换代数
领域中常用的系统是CoCoA 和Macaulay. 还有专门计算Lie 群的Lie 等等.
1.2 计算机代数系统的网络资源
进入二十世纪九十年代以来, 随着国际互联网的迅速发展, 符号计算系统的发展变的更加
迅速和开放. 从国际互联网上可以获取各种符号计算系统, 以及其他数学软件的相关信息. 有些
新的符号计算系统甚至提供源代码. 有些数学软件还有新闻组或讨论组, 通过讨论组, 用户可以
彼此交流信息、解答问题. 厂家也可以及时发现软件的问题, 进行修改. 下面我们介绍一些常用
数学软件的网络资源, 以及主要研究机构的地址.
Mathematica 的网络资源:
et.mcs.kent.edu
Macaulay2
Magma
MuPad bine(4*cos(x)^3,trig);
cos(3 x) + 3 cos(x)
解方程
用Maple 来解简单的方程是毫无问题的, 即使是很复杂的方程,Maple 也可以用数值计算的
方法来处理.
> solve(x^2-3*x=2,x);
31 31
2+
2
p17, 2 . 2
p17
> glsys:=f2*x+3*y+z=1,x-y-z=4,3*x+7*z=3g:
> solve(glsys);
..24 97 ..43
fz =
41 ;x =
41;y =
41 }
> fsolve(fx^2+y^2=10,x^y=2g,fx,yg);
fx =3:102449071;y = :6122170880}
矩阵计算
Maple 还有许多命令可以处理矩阵和向量, 不过需要调用线性代数软件包linalg. 还有一
点特别的是, 作矩阵的乘法需要一个特殊的算子&*.
> with(linalg):
Warning, new definition for norm
Warning, new definition for trace
> a:=matrix([[2,3],[1,4]]);
> inverse(a),det(a);
a :=
. ..
23
14
. ..
2..
4 ..3
55
..12
55
3..
, 5
> b:=matrix([[w,x],[y,z]]);
b :=
. ..
wx
. .5
yz
第一章Maple 系统简介
> evalm(a+b);
. ..
2+ w 3+ x
1+ y 4+ z
. ..
> evalm(a &* b);
. ..
2 w +3 y 2 x +3 z
w +4 yx +4 z
. ..
极限, 求和与乘积
对于普通的求极限问题, 可以直接用Maple 来计算, 它还可以符号的计算级数的和与积. 当
符号计算不成功时, 还可以作数值计算.
> limit((sqrt(1+x)-1)/x,x=0);
1
2
> limit(x!/x^x,x=infinity);
0
> sum(1/2^n, n=1..infinity);
1
> evalf(product(1+1/x^2, x=1..infinity));
3:676077910
微分与积分
用Maple 来求微分是相当容易的, 使用diff 命令即可以求出数学表达式的微分, 不过求出
的结果可能是相当复杂, 因此通常还要用simplify 命令进行化简. 求数学表达式的定积分和不
定积分就相对复杂一些, 需要某些特定的算法. 对于复杂的函数, 求出的结果可能是某些特殊函
数. 对于定积分, 还可以用evalf 求出积分的数值.
> simplify(diff((x-1)/(x^2+1),x));
x2 . 1 . 2 x
. (x2 + 1)2
> diff(sin(x*y),x);
cos(xy) y
> int(1/(1+x+x^2),x);
21
p3 arctan( (2 x + 1) p3)
33
1.3 Maple 的基本功能7
> int(sin(x^2),x=a..b);
1
FresnelS( b p2) p2 pπ .
1
FresnelS(a p2) p2 p
2 pπ 2 pπ
> int(sin(x)/x,x=0..5);
Si(5)
> evalf(%);
1:549931245
微分方程
对于不太复杂的常微分方程,Maple 可以求出它的符号解. 如果你没有给初始条件, 或者给
的初始条件或边界条件不全, 在解的公式中会带有积分常量.
> deq:=diff(y(x),x)*y(x)*(1+x^2)=x;
deq := ( . y(x)) y(x)(1 + x 2)= x
@x
> dsolve(fdeq,y(0)=0g,fy(x)g);
y(x)= pln(1 + x2), y(x)= ..pln(1 + x2)
> dsolve((y(x)^2-x)*D(y)(x)+x^2-y(x)=0,fy(x)} );
11
x 3 . y(x) x + y(x)3 = C1
33
级数展开
当数学问题比较复杂时, 求出准确解通常是不可能的, 用series 作级数展开是有帮助的.
> series(sin(x),x=0, 10);
11 5 11 10)
x . 6 x 3 +
120 x . 5040 x 7 +
362880 x 9 + O(x
例如在下列微分方程中, 就是用级数方式求出的微分方程级数解.
> Order:=10:
> deq:=diff(y(x),x$2)+diff(y(x),x)+y(x)=x+sin(x );
@2 @
deq :=( y(x))+( y(x)) + y(x)= x + sin(x)
@x2 @x
> sln1:=dsolve(fdeq, y(0)=0, D(y)(0)=0g,fy(x)g,series);
1 3 1 4 1 5 +
1 6 1 7 1 8 +
1 10)
sln1 := y(x)=
3 x . 12 x . 120 x 240 x . 5040 x . 20160 x 181440 x 9 + O(x
第一章Maple 系统简介
Laplace 和Fourier 变换
Laplace 变换和Fourier 变换是常用的数学变换. 在Maple 中有一个积分变换的程序包
inttrans 提供了各种积分变换和它们的逆变换.
> with(inttrans):
> laplace(cos(t-a),t,s);
s cos(a) + sin(a)
s2 +1
> invlaplace(%,s,t);
cos(a) cos(t) + sin(a) sin(t)
> combine(%,trig);
cos(t . a)
> alias(sigma=Heaviside):
> f:=sigma(t+1)-sigma(t-1):
> g:=simplify(fourier(f,t,w));
g := 2 I (π Dirac(w) w . I) sin(w)
w
插值与函数拟合
interp命令可以由n 个点出发计算n . 1 阶的插值多项式. 在下例中,x 的取值是1 到10,
y 的值是1 到10 之间的10 个随机数.f 是相应的插值多项式.
> datax:=[seq(i,i=1..10)]:
> datay:=[seq(rand(10)(),i=1..10)]:
> dataxy:=zip((x,y)->[x,y], datax, datay);
dataxy := [[1, 1], [2, 0], [3, 7], [4, 3], [5, 6], [6, 8], [7, 5], [8, 8], [9, 1], [10, 9]]
> f:=interp(datax, datay, x);
17 9 517 11699 7 3719 27323 176741 4 652577 3f :=
51840 x . 40320 x 8 +
60480 x . 2880 x 6 +
17280 x 5 +
5760 x . 3240 x
1816483 2 1669153
+ xx + 293
3360 . 2520
使用数值逼近程序包numapprox 中的pade 命令可以计算一个给定函数的有理逼近函数,
以及其它类型的逼近函数.
> with(numapprox):
> x0:=solve(x^2=Pi/2)[1];
x0 :=
1 p2 p
2
1.3 Maple 的基本功能9
> f:=pade(tan(x^2), x=x0, [3,3]);
8 10
f := (..17280 19=2 p2 + 10800 %1 7 + 43200 %13 . 7680 %13
12
. 3072 %12 25=2 p2 . 32400 15=2 p2 + 3840 23=2 p2 + 28800 %1 9 + 3072 %13
+ 23040 %12 21=2 p2 + 14400 %12 17=2 p2 . 11520 %1 11) .(
(..11520 11 + 1024 13 . 14400 9 . 10800 7) %13
+ (7680 23=2 p2 . 11520 19=2 p2 + 21600 15=2 p2) %12
+(..7680 12 + 34560 10 + 64800 8) %1)
%1 := x .
1 p2 pπ
2
> evalf(normal(f));
6:(..:4532958122 109 x 2 . :1125313130 109 + :1054184360 109 x 3 + :5353835473 109 x)
((2:x . 2:506628274)
(..:1097168700 109 x 2 + :8958248690 109 x . :1356288866 1010))
图形
最常用的画图命令是plot和plot3d.下面的例子说明了使用在两个命令的方法.
>plot(sin(x)*exp(1)^(-x/7),x=0..4*Pi);
-0.4-0.200.20.40.60.824681012x>plot3d(sin(x)*exp(1)^y,x=0..2*Pi,y=0..Pi,axes=boxed);
20-1001020
Maple 编程
Maple 不仅可以对数学表达式进行计算, 还可以编程. 他的编程语言和其它的结构化编程
语言很相似.
10 第一章Maple 系统简介
> f:=proc(x::nonnegint)
> option remember;
> if x=0 then 0
> elif x=1 then 1
> else f(x-1)+f(x-2) end if
> end proc:
> f(40);
102334155
1.4 Maple 系统的交互使用
Maple 的窗口环境提供了先进的工作区界面, 其扩充的数学功能简明易用, 用户可以在其
中展现数学思想, 创建复杂的技术报告, 充分发挥Maple 的功能.
图1.1: Maple 的窗口环境
A Maple 的工具条
B 内容工具条, 它还包含一个输入和编辑文本的区域
C 节的头部及标题
D Maple 的输入, 提示符为\>", 显示为红色
1.4 Maple 系统的交互使用11
E Maple 的输出, 既执行Maple 命令的结果, 通常显示为蓝色
F 一组Maple 命令及其输出
G Maple 的工作区
H 工作区元素组成的节
I 节的范围: 用一个大的方括号\[” 表示
J 省缺的Maple 输入提示符
K 符号模板, 包含了许多常用的数学符号
L 表达式模板
M 矩阵模板
N 向量模板
Maple 工作区界面
Maple 的图形界面具有现代应用软件界面的常见功能, 它支持鼠标操作, 包括剪切和粘贴等
功能, 如果你已经习惯了这些用法, 那就具备了使用Maple 工作区界面的基本知识. 现在你可
以执行一些标准的操作, 例如: 打开文件、保存和打印文件等.
对于Windows 平台, 只要双击Maple 图标即可启动Maple. 在Unix 系统下, 可在提示符
之后键入xmaple 命令来启动.Maple 启动后将开启一个新的工作区.
在窗口上端是菜单条, 包括File 和Edit 等菜单项, 菜单条之下是工具条, 其中有若干用于
经常性操作的快捷按钮, 如文件打开, 保存和打印等. 工具条之下是内容指示条, 其中有一些控
件规定当前执行的任务. 再向下是较大的工作区区域, 也就是你的工作区. 窗口的最下端是状态
条, 其中显示系统信息.
作为Maple 用户界面的一个组成部分, 工作区是用户交互的求解问题和把工作写成文档的
集成环境. 所谓交互的求解问题, 简单的说就是输入适当的Maple 命令, 得到结果. 在工作区中
可以修改命令, 重新执行并获得新的结果. 除了Maple 命令及其结果以外, 还可以在文档中加入
许多其他类型信息. 主要包括:
可以加入文本, 用户能够逐个字符地控制文本段落.
.
在文本段中, 可以加入数学表达式和Maple 命令.
.
可以加入超连接, 当用鼠标单击某特定文本区域时, 能跳转到工作区的其他位置, 或其它文
.
本中.
可以规定文档的结构, 包括超连接, 节与小节的划分.
.
在Windows 平台上, 用户可以嵌入其他对象, 可借助OLE 2( 对象连接与嵌入标准) 嵌入图
.
形和表格.
添加标题
在Maple 的工作区中不仅可以作数学计算, 还可以编写文档. 首先我们可以给文档加标题.
具体步骤是: 将光标移到第一行, 在Insert 菜单的Execution Group 中选择Region Before
项, 此时在顶部出现一个新区域. 这个区域包含一个Maple 输入的提示符, 这意味着此时是输入
Maple 命令的状态. 点击工具条上的
T 按钮或从Insert 菜单中选择Text Input 项, 就把这个
区域变成了文本输入状态, 现在就可以输入文本. 此时在工具条下面又出现了一个新的文本选
择工具条, 从中你可以选择文本的字体格式等. 如果你输入的是文章的标题, 就可以在文本格式
12 第一章Maple 系统简介
的下拉菜单中选择标题格式. 输入标题后回车, 系统会自动要求你输入作者的名字, 输入完作者
名以后就可以输入正文了.
添加小标题
对文档的进一步加工是把文档分解为节. 具体作法是首先用鼠标选定相关的区域, 然后点
击工具条中的. 键, 此时就在选定的区域前面出现了一个小方块, 下拉一个大括号, 括住了选
定的区域. 并且在这个区域的第一条命令之前插入一个文本区域, 此时你可以输入节的标题, 回
车后还可以输入其他说明文本. 如果需要开始新的一节, 可以在Insert 菜单中选择section.
就可以在这一节之后创建新的一节.
行内数学表达式
在一个文档中有时需要插入数学表达式, 例如下面一段文字:
Look at the integral . x2 sin(x . a)dx. Notice that its integrand, x2 sin(x . a), depends
on the parameter a.
在其中插入数学公式的方法是: 首先将光标移到相应的位置, 从Insert 菜单中选择Math Input
项, 然后输入对应于. x2 sin(x . a)dx 的Maple 代码, 即Int(x^2*sin(x), x), 注意观察内容指
示条中的编码区域, 其中显示输入的代码, 而工作区中则显示使用标准数学符号的积分表达式.
在数学表达式输入完成后, 再将输入状态变成文本输入状态, 就可以继续输入其他文本. 这样就
完成了我们的文档, 它既可以保存也可以打印.
添加超连接
在Maple 系统中, 用户可以同时打开多个工作区, 在不同的工作区之间可以通过建立超连
接的方式建立联系. 建立超连接的方法是: 在一个工作区中用鼠标选定一个位置, 在Insert 菜
单中选择Hyperlink 项. 此时弹出一个对话框, 它要求用户输入联接的文字和另一个工作区的
文件名. 填写完成后单击OK 键就完成了超连接.
建立书签
在工作区中可以插入书签, 以便迅速的查找内容. 单击指向书签的超连接,Maple 将立即转
至书签位置. 建立书签的方法是: 首先将光标移动到要插入书签的位置, 从View 菜单中选择
Edit Bookmark 项. 在弹出的对话框中键入一段文字, 例如\expr command” 作为书签文本, 单
击OK 按钮插入书签. 当你移动光标到工作区的任何位置时, 从View 菜单中选择Bookmark, 再
从弹出的菜单中选择expr command 项, 就可以跳到你插入书签的位置.
此外超连接的方式也可以使用书签. 具体作法是: 首先按照前面的方法建立书签, 将光标
移动到建立超连接的位置, 在Insert 菜单中选择Hyperlink 项. 在弹出的对话框中输入联接的
文字, 然后在Book Mark 区域添入你已经建立的书签的标记, 例如\expr command", 单击OK 键
就完成了超连接.
帮助系统
前面我们介绍了Maple 的计算和排版方面的能力, 然而这只能是简介, 在本书中, 我们不可
能详尽的描述Maple 的所有命令, 因为Maple 包含了数以千计的命令. 为了了解这些命令的使
用方法, 可以使用Maple 软件带有的一个自足的参考手册, 即Maple 的帮助系统. 借助帮助系
1.5 Maple 的组织结构13
统, 可以按名字或主题查询Maple 命令及其特点. 此外用户还可以自行选择关键词或术语, 来
迅速打开含有这些文字的帮助页面. 在每个帮助页面中还提供了超连接, 使用户可以阅读相关
的页面.
在帮助系统中,Maple 提供了三种方法定位信息: 按目录、按主题和按全文查找. 从Help 菜
单中选择Contents, 帮助窗口将变为帮助系统的一个简单目录, 用户可以通过超连接的方式浏
览帮助系统. 这就是按目录的查找方法. 通过这种方法我们可以大致了解Maple V 的基本功
能, 但是要从中找到某个特定的主题还是很困难的. 按主题查找的方法是: 从Help 菜单中选择
Topic Search, 此时帮助窗口将弹出一个对话框, 在其中添入需要查找的主题, 点击OK 键, 就可
以阅读相应的帮助文档. 如果已经知道希望阅读的主题词, 也可以直接从工作区访问该页面, 办
法是在Maple 提示符后键入?topic, 回车后就可阅读相应的页面.
在大多数Maple 版本中(唯一的例外是Maple V Realese 4 版本), 进入帮助系统后,Maple
会打开帮助浏览器, 通过帮助浏览器可以方便地找到你需要的帮助.
有的时候, 在解决某个数学问题时不知道应该使用Maple 的什么命令, 但是由数学问题本
身出发, 有理由推测, 在这些命令的帮助页面应当包含某些特定单词, 此时就要用到全文查找的
方法. 例如我要解一个微分方程, 但是不知道应该用什么命令, 我们可以推测, 在这个命令的帮
助中应该包含solve, di erential 和equation 等单词, 此时可以在Help 菜单中选择Full Text
Search, 在弹出的对话框中, 输入要查找的关键词, 例如solve di erential equation 等, 然后单击
Search 按钮, 通知Maple 开始检索.Maple 将列出匹配的主题, 并附带数值, 表明匹配的程度, 用
户可从列表中选择最感兴趣的主题.
此外从Help 菜单中选定Balloon Help 项以后, 当鼠标停留在某个按钮或菜单上时,Maple
就显示简短的说明. 这也是一个很有用的功能.
1.5 Maple 的组织结构
Maple 是由加拿大Waterloo 大学的符号计算组开发的计算机代数系统. 它可以在各种计
算机上运行, 从超级计算机, 例如Cray Y/MP, 到用于桌面的微型计算机, 例如IBM PC 兼容
机.Maple 既可以在单用户的操作系统, 例如MS-Windows 上