第六章 Maple程序设计
- 格式:doc
- 大小:433.50 KB
- 文档页数:53
数学软件Maple使⽤教程数学实验数学软件Maple使⽤教程序⾔⼀.什么是数学实验?我们都熟悉物理实验和化学实验,就是利⽤仪器设备,通过实验来了解物理现象、化学物质等的特性。
同样,数学实验也是要通过实验来了解数学问题的特性并解决对应的数学问题。
过去,因为实验设备和实验⼿段的问题,⽆法解决数学上的实验问题,所以,⼀直没有听说过数学实验这个词。
随着计算机的飞速发展,计算速度越来越快,软件功能也越来越强,许多数学问题都可以由计算机代替完成,也为我们⽤实验解决数学问题提供了可能。
数学实验就是以计算机为仪器,以软件为载体,通过实验解决实际中的数学问题。
⼆.常⽤的数学软件⽬前较流⾏的数学软件主要有四种:1.MathACD其优点是许多数学符号键盘化,通过键盘可以直接输⼊数学符号,在教学⽅⾯使⽤起来⾮常⽅便。
缺点是⽬前仅能作数值运算,符号运算功能较弱,输出界⾯不好。
2.Matlab优点是⼤型矩阵运算功能⾮常强,构造个⼈适⽤函数⽅便很⽅便,因此,⾮常适合⼤型⼯程技术中使⽤。
缺点是输出界⾯稍差,符号运算功能也显得弱⼀些。
不过,在这个公司购买了Maple公司的内核以后,符号运算功能已经得到了⼤⼤的加强。
再⼀个缺点就是这个软件太⼤,按现在流⾏的版本5.2,⾃⾝有400多兆,占硬盘空间近1个G,⼀般稍早些的计算机都安装部下。
我们这次没⽤它主要就是这个原因。
3.Mathematica其优点是结构严谨,输出界⾯好,计算功能强,是专业科学技术⼈员所喜爱的数学软件。
缺点是软件本⾝较⼤,⽬前流⾏的3.0版本有200兆;另⼀个缺点就是命令太长,每⼀个命令都要输⼊英⽂全名,因此,需要英语⽔平较⾼。
4.Maple优点是输出界⾯很好,与我们平常书写⼏乎⼀致;还有⼀个最⼤的优点就是它的符号运算功能特别强,这对于既要作数值运算,⼜要作符号运算时就显得⾮常⽅便了。
除此之外,其软件只有30兆,安装也很⽅便(直接拷贝就可以⽤)。
所以,我们把它放到学校⽹上直接调⽤。
(2.1.1)
(2.1.3)(2.1.4)(2.1.2)
Part 6:数据结构
西希安工程模拟软件(上海)有限公司,2008
6.0 介绍
第六部分:数据结构,学习Maple的数据结构。
6.1 数据结构
Maple 有多种数据结构,提供用于任务的工具。
前面您已经接触了矩阵,其他数据结构包括:列表、集合、序列、数组、表、模块等。
熟悉数据结构和它们之间的区别非常重要,这样可以针对不同的问题选择恰当的结构和操作,这里仅介绍一些最常用的数据结构。
序列
操作步骤
结果
序列是一个用逗号隔开的任意对象集合,一个序列也可以由若干个序列复合而成。
例子:
表示命名 被赋值为一
个序列。
在Maple中,序列是许多数据类型的基础。
特别是,他们出现在函数调用、列表、集合、下标。
使用索引符号提取序列中的元素:指向
序列 s 中的第 个元素。
也可以使用下标符号,,引用第 个元
12a
集合
Array, list, map, seq。
数学应用软件实验指导书石家庄铁道学院数学实验室1前言随着计算机科学的飞速发展,以及工程计算的迫切需求,计算机符号代数系统(Computer Algebra System, CAS)得到了广泛的应用及拓展。
一般按功能的不同,将此系统分为两大类:专用系统和通用系统。
专用符号代数系统是特别为解决物理、化学或数学中某一方面问题而编写的。
例如天体物理方面的CAMAL;针对核物理的SCHOOHSCHIP;应用于物理化学,计算分子结构、反应动力学的GAUSSIAN;以及分析微分方程的DELIA等等。
通用符号系统则是针对普遍的应用领域而开发出来的,包含大量的数据结构与数学函数包。
通用系统软件的执行方式一般有两种,一种是输入一条命令、输出一条结果式的命令行方式。
虽然不同软件的执行命令不尽相同,但一般都具有数值计算、符号计算、图形处理这3种功能;另一种是类似FORTRAN、C语言的编程模式。
不同的软件编程语言也不尽相同,但能够实现的功能类似。
概括起来,计算机符号代数系统可以应用到以下的领域:1.推导的工具。
符号系统可以出色地完成科研、工程中所遇到的复杂公式推导与验证工作,不仅可以避免人工推导过程中可能会出现的错误,而且显著地提高了工作效率。
2.数学实验。
由于推导工作的简化,可以通过对符号的变换与处理,为数学研究提供一种类似“实验室”的环境,通过不同的方法可能出现的结果。
3.辅助教学。
符号代数系统的易学易用为学生和老师提供了很好的学习帮助系统。
许多问题借助计算机将得到更快更好的解决。
同时为制作课件和练习系统提供了方便。
一般来讲,选择一个好某个软件之后,应以这个软件为主,尽量熟悉和精通,这样比较节省精力。
但就象俗话说的“尺有所短,寸有所长”,由于每个软件都有长处,同时又有某种缺陷,所以,学习中还要博众家之长,以备用时随心所欲。
下面,我们根据通用软件Maple, MATLAB, MathCAD, Mathematica的不同特点,选用每个软件中最适合解决数学计算或应用的部分进行学习。
第六章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;:= f3 + + x 22y 2再看下面的例子:> g1:=x->x^2+1;> g2:=y->y^2+1;:= g1 → x + x 21:= g2 → y + y 21> g3:=g1+g2;:= g3 + g1g2和前面例子不同的是,两个算子(函数) g1, g2相加的结果依然是函数名g3,出现这个问题的主要原因是g1和g2分别为x ,y 的函数,Maple 认为它们的定义域不相容. 要得到和前例的结果,只需稍作改动:> g3:=g1(x)+g2(y);:= g3 + + x 22y 2下面的例子想说明生成Maple 函数的两种方式“箭头操作符”及“unapply ”之间微妙的差异:> restart: a:=1: b:=2: c:=3:> a*x^2+b*x+c;+ + x 22x 3> f:=unapply(a*x^2+b*x+c,x);:= f → x + + x 22x 3> g:=x->a*x^2+b*x+c;:= g → x + + a x 2b x c由此可见,f 中的a,b,c 已经作了代换,而g 中则显含a,b,c 。
107Maple V Release 5 起步与进阶。
108.和别的语言不同,当我们利用Maple 进行二维或者三维绘图时,Maple 可以自动地决定所需的点数、坐标轴的位置、标尺的数字、图形的颜色等等繁杂的设置,在默认状态下就可以绘制出令人满意的图形。
当然,你也可以自己设定各种不同的绘图设置,比如更改绘图的坐标系(以画出极坐标、球坐标、或柱坐标下的图形),或者绘图的点数。
下面,我们就由浅入深地介绍Maple 中的绘图方法。
6.1 二维基本图形绘制在Maple 中,单变量函数曲线的绘制可以使用函数plot 。
例如,我们需要绘制函数)sin()(32x e x f x π−=在区间[-2,2]上的图形,我们可以这样来实现。
首先用箭头操作符定义函数:然后,调用plot 函数。
键入命令后,所绘制的图形会立即出现在同一个可执行块中。
Maple V Release 5也支持把图形单独绘制在一个窗口中,如图 6.1所示,只需要在菜单Option | Plot Display 选择Window 即可。
一般地,函数plot 的调用格式为plot (f , a..b, options )。
其中,f 是需要绘制的函数,a..b 是自变量的变化范围,options 是可选参数,用它可以控制图形的绘制,我们将在下一节中详细介绍。
除了可以绘制函数的图形外,plot 也可以绘制表达式表示的函数图形,调用格式为plot (expr , x = a..b, options )。
其中,expr 是表达式(相信读者一定知道表达式和函数间的区别了),x 是表达式中的自变量,因为表达式中没有自变量的信息(甚至可以是多变量的表达式),所以必须指定自变量,并用等式形式给出自变量的变化范围。
第六章 Maple绘图。
109.图6.1 在窗口中绘图这些基本的绘图功能,Maple 和其他的树脂绘图工具(比如Matlab 、Origin 等)并没有什么区别。
maple 简单编程
Maple是一种流行的数学软件,也可以用来编写简单的程序。
下面是一个简单的Maple程序示例,用于计算圆的面积和周长:
```
with(vectores):
# 定义向量
x := [1, 0]:
y := [0, 1]:
# 定义圆心
center := [0, 0]:
# 定义半径
radius := 1:
# 定义圆的方程
circle := x*x + y*y - 2*x - 2*y + 1 = 0:
# 计算周长
circumference := 2*pi*radius:
# 计算面积
area := pi*radius^2:
# 输出结果
writeln(circumference, area);
```
在这个程序中,我们首先定义了向量x和y,然后定义了圆心和半径。
接着,我们定义了圆的方程,并计算了圆的周长和面积。
最后,我们使用writeln函数输出了结果。
需要注意的是,Maple是一种高级数学软件,支持许多高级数学函数和算法。
如果您需要编写更复杂的程序,建议查阅Maple的官方文档或参考相关教程。
第五章程序设计§5.1 简单的程序设计前面已经用过很多Maple的内部函数和程序包带的外部程序。
现在我们要学着自己建立函数了。
先来看一个关于log函数的源代码,这样能熟悉一下Maple编程的一般规则。
> interface(verboseproc=2): 先调用函数interface,设置参数> readlib(log); 调log的源代码。
改log为sin等,就能看这些函数的源代码::x algebraicproc()local;a`Copyright (c) 1992 by the University of Waterloo. All rights reserved.`option;`expecting 1 argument, got `nargsERROR ||if thennargs1()≠elif thenindexedtype,procname''()a()op procname;:=''if thenalgebraic error "invalid index"a[][]not ()type,`expecting 1 argument, got `nargsERROR ||elif then≠nargs1()()complex floatelif thentype,x''complex float()ortype,a''()()ln x()ln a +()Digits2/()evalf()evalf,elseln a()ln x()/end ifelseln x()end ifend proc5.1.1 过程和函数过程和函数差得不是很多,它们都可以实现对方的功能,如果没有特别说明,我们对这两种概念将不做区分。
一个Maple语言的过程定义的格式如下:proc(argseq)local lseq;global gseq;1options oseq;description stringseq;statseqend proc一个过程一定是以proc开头,以end proc(或)结束。
Eisenstein判别法的Maple程序设计
邬毅
【期刊名称】《重庆科技学院学报(自然科学版)》
【年(卷),期】2005(007)001
【摘要】探讨如何运用计算机代数系统Maple对整系数多项式不可约的判别条件--Eisenstein判别法的程序设计.该程序能够测试任意整系数多项式是否可约,并给出了满足不可约整系数多项式的Eisenstein素数值.
【总页数】2页(P93-94)
【作者】邬毅
【作者单位】重庆师范大学,重庆,400047
【正文语种】中文
【中图分类】TP311
【相关文献】
1.Eisenstein判别法的几个注记 [J], 樊正恩
2.Eisenstein判别法的几个推广 [J], 陈秀梅;滕常春
3.不能用Eisenstein判别法判别的不可约多项式 [J], 朱一心
4.Eisenstein判别法及其应用 [J], 冯世强;王万龙;高大鹏
5.Eisenstein判别法的变换与推广 [J], 王子茹;梅瑞;梁菊先
因版权原因,仅展示原文概要,查看原文内容请购买。
第六章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;:= f3 + + x 22y 2再看下面的例子:> g1:=x->x^2+1;> g2:=y->y^2+1;:= g1 → x + x 21:= g2 → y + y 21> g3:=g1+g2;:= g3 + g1g2与前面例子不同的是,两个算子(函数)g1, g2相加的结果依然是函数名g3,出现这个问题的主要原因是g1与g2分别为x ,y 的函数,Maple 认为它们的定义域不相容. 要得到与前例的结果,只需稍作改动:> g3:=g1(x)+g2(y);:= g3 + + x 22y 2下面的例子想说明生成Maple 函数的两种方式“箭头操作符”及“unapply ”之间微妙的差异:> restart: a:=1: b:=2: c:=3:> a*x^2+b*x+c;+ + x 22x 3> f:=unapply(a*x^2+b*x+c,x);:= f → x + + x 22x 3> g:=x->a*x^2+b*x+c;:= g → x + + a x 2b x c由此可见,f 中的a,b,c 已经作了代换,而g 中则显含a,b,c 。
再看下面实验: > f(x); g(x);+ + x 22x 3+ + x 22x 3f 与g 两者相同,再对其微分:> D(f); D(g);→ x + 2x 2→ x + 2a x b再改变常数c 的值,观察f 与g 的变化:> c := 15;:= c 15> f(x); g(x);+ + x 22x 3+ + x 22x 15由此可见,在利用Maple 进行函数研究时,对同一问题应该用不同方法加以校验,而这一切的支撑是数学基础!1.2 编程初体验利用算子可以生成最简单的函数—单个语句的函数, 但严格意义上讲它并非程序设计, 它所生成的数据对象是子程序. 所谓子程序,简单地说, 就是一组预先编好的函数命令, 我们由下面的简单程序来看看Maple 程序的结构:> plus:=proc(x,y)x+y;end;这个程序只有2个参数, 在程序内部它的名称是x , y, 这是Maple 最简单的程序结构, 仅仅在proc ( )和end 中间加上在计算中需要的一条或者多条命令即可, Maple 会把最后一个语句的结果作为整个子程序的返回结果, 这一点需要引起注意. 再看下例: > P:=proc(x,y)x-y;x*y;x+y;end:> P(3,4);7显然, 尽管程序P 有三条计算命令,但返回的只是最后一个语句x+y;的结果. 要想输出所有的计算结果,需要在程序中增加print 语句:> P:=proc(x,y)print(x-y);print(x*y);print(x+y);end:> P(3,4);-1127再看下面几个例子:> for i from 2 to 6 doexpand((x+y)^i );od;x22x y y2+ +x33x2y3x y2y3+ + +x44x3y6x2y24x y3y4+ + + +x55x4y10x3y210x2y35x y4y5+ + + + +x66x5y15x4y220x3y315x2y46x y5y6+ + + + + +> F:=proc(n::integer)if n mod 12=0 then trueelse falsefiend:> F(123^123), F(1234567890^9);,false true从上面几个简单的例子可以看出Maple子程序主要包含以下一些内容:(i)把定义的子程序赋值给程序名procname, 以后就可以用子程序名procname来调用程序;(ii)子程序一律以proc( )开头, 括号里是程序的输入参数,如果括号中什么都没有, 表示这个子程序没有任何输入参数;(iii)子程序中的每一个语句都用分号(或冒号)分开(这一点不是主要的, 程序设计时, 在可能的时候—过程当中的最后一个语句、for-循环、if语句中的最后一个语句省略终结标点也是允许的, 这并不是为了懒惰, 而是因为在终结语句后面插入一个语句产生的影响要比仅仅执行一个新语句产生的影响大);(iv)在定义完子程序之后, Maple会显示它对该子程序的解释(除非在end后用冒号结束), 它的解释和你的定义是等价的, 但形式上不一定完全相同;(v)Maple会自动地把除了参数以外的变量都作为局部变量(local variable), 这就是说, 它们仅仅在这个子程序的定义中有效, 和子程序以外的任何同名变量无关.在定义了一个子程序以后, 执行它的方法和执行任何Maple系统子程序一样—程序名再加上一对圆括号( ), 括号中包含要调用的参数, 如果子程序没有参数, 括号也是不能省略的.除了上面给出的程序设计方法外,在Maple中还可以直接由“->”(箭头)生成程序, 如下例:> f:=x->if x>0 then x else -x fi;operator arrow if then else end if<,0x x-x:=f proc()end procx option;> f(-5),f(5);,55甚至于程序名也可以省略,这种情况通常会在使用函数map时遇到:> map(x->if x>0 then x else -x fi,[-4,-3,-2,0,1]);43201[],,,,如果需要察看一个已经定义好的子程序的过程, 用eval命令, 查看Maple中源程序(如factor函数)使用下述组合命令:interface(verboseproc=2);print(factor);1.3 局部变量和全局变量Maple中的全局变量, 是指那些在交互式命令环境中定义和使用的变量, 前面所使用的变量几乎都属于全局变量. 而在编写子程序时, 需要定义一些只在子程序内部使用的变量, 称其为局部变量. 当Maple执行子程序时, 所有和局部变量同名的全局变量都保持不变, 而不管在子程序中给局部变量赋予了何值. 如果要把局部变量定义为全局变量, 需要用关键词global在程序最开始加以声明, 而局部变量则用local声明, 虽然这是不必要的, 但在程序设计时, 声明变量是有一定好处的.下面通过实例演示局部变量与全局变量的不同. 为了更清楚地观察子程序对全局变量的影响, 在子程序外先设定一个变量a的值:> a:=1;a1:=> f:=proc( )local a;a:=12345678/4321;evalf(a/2);end;> f();1428.567230> a;1> g:=proc( )global a;a:=12345678/4321;evalf(a/2);end;> g();1428.567230> a;123456784321显然, 在前一个程序中, 由于在子程序外已经赋值给a, a是全局变量, 它的值不受子程序中同名局部变量的影响;而在后一个子程序中, 由于重新把a定义为全局变量, 所以子程序外的a随着子程序中的a值的变化而变化.子程序中的输入参数, 它既不是全局的, 也不是局部的. 在子程序内部, 它是形式参数, 也就是说, 它的具体取值尚未被确定, 它在程序调用时会被替换成真正的参数值. 而在子程序外部, 它们仅仅表示子程序接受的参数的多少, 而对于具体的参数值没有关系.1.4 变量nargs, args与procname在所有程序中都有三个有用的变量:nargs, args与procname. 前两个给出关于调用参量的信息:nargs变量是调用的实际参量的个数, args变量是包含参量的表达式序列, args的子序列通过范围或数字的参量选取. 例如, 第i个参量被调用的格式为: args[i]. nargs, args变量通常在含有可选择参量的程序中使用. 下面看一个例子:> p:=proc( )local i;RETURN(nargs,[seq(i^3,i=args)])end proc:> p(1,2,3,4,5,6,7,8,9,10);,,,,,,,,,1827641252163435127291000,10[]该程序利用Maple函数RETURN返回了输入参量的个数以及参量序列的立方列表, RETURN函数使用时必须在其后加圆括号,即使无结果返回时也得如此。