maple 教程

1 初识计算机代数系统Maple

1.1 Maple简说

1980年9月, 加拿大Waterloo大学的符号计算机研究小组成立, 开始了符号计算在计算机上实现的研究项目, 数学软件Maple是这个项目的产品. 目前, 这仍是一个正在研究的项目.

Maple的第一个商业版本是1985年出版的. 随后几经更新, 到1992年, Windows系统下的Maple 2面世后, Maple被广泛地使用, 得到越来越多的用户. 特别是1994年, Maple 3出版后, 兴起了Maple热. 1996年初, Maple 4问世, 1998年初, Maple 5正式发行. 目前广泛流行的是Maple 7以及2002年5月面市的Maple 8.

Maple是一个具有强大符号运算能力、数值计算能力、图形处理能力的交互式计算机代数系统(Computer Algebra System). 它可以借助键盘和显示器代替原来的笔和纸进行各种科学计算、数学推理、猜想的证明以及智能化文字处理.

Maple这个超强数学工具不仅适合数学家、物理学家、工程师, 还适合化学家、生物学家和社会学家, 总之, 它适合于所有需要科学计算的人.

1.2 Maple结构

Maple软件主要由三个部分组成: 用户界面(Iris)、代数运算器(Kernel)、外部函数库(External library). 用户界面和代数运算器是用C语言写成的, 只占整个软件的一小部分, 当系统启动时, 即被装入, 主要负责输入命令和算式的初步处理、显示结果、函数图象的显示等. 代数运算器负责输入的编译、基本的代数运算(如有理数运算、初等代数运算等)以及内存的管理. Maple的大部分数学函数和过程是用Maple自身的语言写成的, 存于外部函数库中. 当一个函数被调用时, 在多数情况下, Maple会自动将该函数的过程调入内存, 一些不常用的函数才需要用户自己调入, 如线性代数包、统计包等, 这使得Maple在资源的利用上具有很大的优势, 只有最有用的东西才留驻内存, 这保证了Maple可以在较小内存的计算机上正常运行. 用户可以查看Maple的非内存函数的源程序, 也可以将自己编的函数、过程加到Maple的程序库中, 或建立自己的函数库.

1.3 Maple输入输出方式

为了满足不同用户的需要, Maple可以更换输入输出格式: 从菜单“Options | Input Display和Out Display下可以选择所需的输入输出格式.

Maple 7有2种输入方式: Maple语言(Maple Notation)和标准数学记法(Standard Math Notation). Maple语言是一种结构良好、方便实用的内建高级语言, 它的语法和Pascal或C有一定程度的相似, 但有很大差别. 它支持多种数据操作命令, 如函数、序列、集合、列表、数组、表, 还包含许多数据操作命令, 如类型检验、选择、组合等. 标准数学记法就是我们常用的数学语言.

启动Maple, 会出现新建文档中的“[>”提示符, 这是Maple中可执行块的标志, 在“>”后即可输入命令, 结束用“;”(显示输出结果)或者“:”(不 显示输出结果). 但是, 值得注意的是, 并不是说Maple的每一行只能执行一句命令, 而是在一个完整的可执行块中健入回车之后, Maple会执行当前执行块中所有命令(可以是若干条命令或者是一段程序). 如果要输入的命令很长, 不能在一行输完, 可以换行输入, 此时换行命令用“shift+Enter”组合键, 而在最后一行加入结束标志“;”或“:”, 也可在非末行尾加符号“\”完成.

Maple 7有4种输出方式: Maple语言、格式化文本(Character Notation)、固定格式记法(Typeset Notation)、标准数学记法(Standard Math Notation). 通常采用标准数学记法.

Maple会认识一些输入的变量名称, 如希腊字母等. 为了使用方便, 现将希腊字母表罗列如下,输入时只需录入相应的英文,要输入大写希腊字母, 只需把英文首字母大写:  













alpha

beta

gamma

delta

epsilon

zeta

eta

theta

iota

kappa

lambda

mu













nu

xi

omicron

pi

rho

sigma

tau

upsilon

phi

chi

psi

omega

有时候为了美观或特殊需要,可以采用Maple中的函数或程序设计方式控制其输出方式,如下例:

> for i to 10 do

printf("i=%+2d and i^(1/2)=%+6.3f", i, eval(sqrt(i)));

od;

i=+1 and i^(1/2)=+1.000i=+2 and i^(1/2)=+1.414i=+3 and i^(1/2)=+1.732i=+4 and i^(1/2)=+2.000i=+5 and i^(1/2)=+2.236i=+6 and i^(1/2)=+2.449i=+7 and i^(1/2)=+2.646i=+8 and i^(1/2)=+2.828i=+9 and i^(1/2)=+3.000i=+10 and i^(1/2)=+3.162

+2d的含义是带符号的十进位整数,域宽为2. 显然,这种输出方式不是我们想要的,为了得到更美观的输出效果,在语句中加入换行控制符“\n”即可:

> for i to 10 do

printf("i=%+2d and i^(1/2)=%+6.3f\n", i, eval(sqrt(i)));

od;

i=+1 and i^(1/2)=+1.000

i=+2 and i^(1/2)=+1.414

i=+3 and i^(1/2)=+1.732

i=+4 and i^(1/2)=+2.000

i=+5 and i^(1/2)=+2.236

i=+6 and i^(1/2)=+2.449

i=+7 and i^(1/2)=+2.646

i=+8 and i^(1/2)=+2.828

i=+9 and i^(1/2)=+3.000

i=+10 and i^(1/2)=+3.162

再看下例:将输入的两个数字用特殊形式打印:

> niceP:=proc(x,y)

printf("value of x=%6.4f, value of y=%6.4f",x,y);

end proc;

> niceP(2.4,2002.204);

value of x=2.4000, value of y=2002.2040

1.4 Maple联机帮助

学会寻求联机帮助是掌握一个软件的钥匙. Maple有一个非常好的联机帮助系统, 它包含了90%以上命令的使用说明. 要了解Maple的功能可用菜单帮助“Help”, 它给出Maple内容的浏览表, 这是一种树结构的目录表, 跟有…的词条说明其后还有子目录, 点击这样的词条后子目录就会出现(也可以用Tab键和up, down选定). 可以从底栏中看到函数命令全称, 例如, 我们选graphics…, 出现该条的子目录, 从中选2D…, 再选plot就可得到作函数图象的命令plot的完整帮助信息. 一般帮助信息都有实例, 我们可以将实例中的命令部分拷贝到作业面进行计算、演示, 由此可了解该命令的作用.

在使用过程中, 如果对一个命令把握不准, 可用键盘命令对某个命令进行查询. 例如, 在命令区输入命令“?plot”(或help(plot);), 然后回车将给出plot命令的帮助信息, 或者将鼠标放在选定的要查询的命令的任何位置再点击菜单中的“Help”即可.

2 Maple的基本运算

2.1 数值计算问题

算术是数学中最古老、最基础和最初等的一个分支, 它研究数的性质及其运算, 主要包括自然数、分数、小数的性质以及他们的加、减、乘、除四则运算. 在应用Maple做算术运算时, 只需将Maple当作一个“计算器”使用, 所不同的是命令结束时需加“;”或“:”.

在Maple中, 主要的算术运算符有“+”(加)、“–”(减)、“*”(乘)、“/”(除)以及“^”(乘方或幂,或记为**), 算术运算符与数字或字母一起组成任意表达式, 但其中“+”、“*”是最基本的运算, 其余运算均可归诸于求和或乘积形式. 算述表达式运算的次序为: 从左到右, 圆括号最先, 幂运算优先, 其次是乘除,最后是加减. 值得注意的是, “^”的表达式只能有两个操作数, 换言之, 是错误的, 而“+”或“*”的任意表达式可以有两个或者两个以上的操作数.

Maple有能力精确计算任意位的整数、有理数或者实数、复数的四则运算, 以及模算术、硬件浮点数和任意精度的浮点数甚至于矩阵的计算等等. 总之, Maple可以进行任意数值计算.

但是, 任何软件或程序毕竟只是人们进行科学研究的一种必要的辅助, 即便它有很多优点, 但也有它的局限性, 为了客观地认识数学软件、认识Maple, 下面通过两个简单例子予以说明.

第一个简单的数值计算实例想说明Maple数值计算的答案的正确性:  

> 3!!!;

2601218943565795100204903227081043611191521875016945785727541837850835631156947382240678577958130457082619920575892247259536641565162052015873791984587740832529105244690388811884123764341191951045505346658616243271940197113909845536727278537099345629855586719369774070003700430783758997420676784016967207846280629229032107161669867260548988445514257193985499448939594496064045132362140265986193073249369770477606067680670176491669403034819961881455625195592566918830825514942947596537274845624628824234526597789737740896466553992435928786212515967483220976029505696699927284670563747137533019248313587076125412683415860129447566011455420749589952563543068288634631084965650682771552996256790845235702552186222358130016700834523443236821935793184701956510729781804354173890560727428048583995919729021726612291298420516067579036232337699453964191475175567557695392233803056825308599977441675784352815913461340394604901269542028838347101363733824484506660093348484440711931292537694657354337375724772230181534032647177531984537341478674327048457983786618703257405938924215709695994630557521063203263493209220738320923356309923267504401701760572026010829288042335606643089888710297380797578013056049576342838683057190662205291174822510536697756603029574043387983471518552602805333866357139101046336419769097397432285994219837046979109956303389604675889865795711176566670039156748153115943980043625399399731203066490601325311304719028898491856203766669164468791125249193754425845895000311561682974304641142538074897281723375955380661719801404677935614793635266265683339509760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

上述运算结果在IBM PC机(1G, 128M)上计算只需要0.01秒, 得到如此复杂的结果(1747位), 一个自然的问题是: 答案正确吗?

为了回答这个问题, 我们借助于数值分析方法, 由Stiring公式

可得: , 前三位数字与Maple输出结果相同, 且两者结果均为1747位. 另外, 在720!的计算中, 5的因子的个数为:  

这些5与足够多的2相乘将得到178个0, 而Maple的输出结果中最后178位数为零. 由此, 可以相信Maple结果的正确性.

另一个例子则想说明Maple计算的局限性:  

Maple在处理问题时, 为了避免失根, 从不求算术式的近似值, 分数则化简为既约分数. 因此, 在Maple中很容易得到:  

显然这是错误的. 这一点可以从代数的角度予以分析.

不妨设 , 则 , 即 , 显然 有3个结果, -2是其实数结果.

另一方面, 设 , 则 , 即:

显然 有6个结果, -2、2是其实数结果.

这个简单的例子说明了Maple在数值计算方面绝对不是万能的, 其计算结果也不是完全正确的, 但是, 通过更多的实验可以发现: Maple只可能丢失部分结果, 而不会增加或很少给出完全错误的结果(如上例中Maple的浮点数结果皆为 ). 这一点提醒我们, 在利用Maple或其他任何数学软件或应用程序进行科学计算时, 必须运用相关数学基础知识校验结果的正确性.

尽管Maple存在缺陷(实际上, 任何一个数学软件或程序都存在缺陷), 但无数的事实说明Maple仍然不失为一个具有强大科学计算功能的计算机代数系统. 事实上, Maple同其他数学软件或程序一样只是科学计算的一个辅助工具, 数学基础才是数学科学中最重要的.

2.1.1 有理数运算

作为一个符号代数系统, Maple可以绝对避免算术运算的舍入误差. 与计算器不同, Maple从来不自作主张把算术式近似成浮点数, 而只是把两个有公因数的整数的商作化简处理. 如果要求出两个整数运算的近似值时, 只需在任意一个整数后加“.”(或“.0”), 或者利用“evalf”命令把表达式转换成浮点形式, 默认浮点数位是10 (即: Digits:=10, 据此可任意改变浮点数位, 如Digits:=20).

> 12!+(7*8^2)-12345/125;

> 123456789/987654321;

> evalf(%);

> 10!; 100*100+1000+10+1; (100+100)*100-9;

> big_number:=3^(3^3);

> length(%);

上述实验中使用了一个变量“big_number”并用“:=”对其赋值, 与Pascal语言一样为一个变量赋值用的是“:=”. 而另一个函数“length”作用在整数上时是整数的十进制位数即数字的长度. “%”是一个非常有用的简写形式, 表示最后一次执行结果, 在本例中是上一行输出结果. 再看下面数值计算例子:  

    1)整数的余(irem)/商(iquo)

命令格式:  

irem(m,n);        #求m除以n的余数

irem(m,n,'q');    #求m除以n的余数, 并将商赋给q

iquo(m,n);        #求m除以n的商数

iquo(m,n,'r');    #求m除以n的商数, 并将余数赋给r

其中, m, n是整数或整数函数, 也可以是代数值, 此时, irem保留为未求值.

> irem(2002,101,'q'); # 求2002除以101的余数, 将商赋给q

> q; #显示q

> iquo(2002,101,'r'); # 求2002除以101的商, 将余数赋给r

> r; #显示r

> irem(x,3);

2)素数判别(isprime)

素数判别一直是初等数论的一个难点, 也是整数分解问题的基础. Maple提供的isprime命令可以判定一个整数n是否为素数. 命令格式: isprime(n);

    如果判定n可分解, 则返回false, 如果返回true, 则n“很可能”是素数.

> isprime(2^(2^4)+1);

> isprime(2^(2^5)+1);

上述两个例子是一个有趣的数论难题。形如 的数称为Fermat数, 其中的素数称为Fermat素数, 显然, F0=3、F1=5、F2=17、F3=257、F4=65537都是素数. Fermat曾经猜想所有的Fn都是素数, 但是Euler在1732年证明了F5=641?6700417不是素数. 目前, 这仍是一个未解决的问题, 人们不知道还有没有Fermat素数, 更不知道这样的素数是否有无穷多.

3) 确定第i个素数(ithprime)

若记第1个素数为2,判断第i个素数的命令格式: ithprime(i);   

> ithprime(2002);

> ithprime(10000);

4) 确定下一个较大(nextprime)/较小(prevprime)素数

当n为整数时,判断比n稍大或稍小的素数的命令格式为:  

nextprime(n);

prevprime(n);

> nextprime(2002);

> prevprime(2002);

5) 一组数的最大值(max)/最小值(min)

命令格式: max(x1,x2,…,xn);   #求x1,x2,…,xn中的最大值

             min(x1,x2,…,xn);   #求x1,x2,…,xn中的最小值

> max(1/5,ln(3),9/17,-infinity);

> min(x+1,x+2,y);

6)模运算(mod/modp/mods)

命令格式: e mod m;    # 表达式e对m的整数的模运算

modp(e,m); # e对正数m的模运算

mods(e,m); # e对m负对称数(即 -m)的模运算

`mod`(e,m); # 表达式e对m的整数的模运算, 与e mod m等价

值得注意的是, 要计算i^n mod m(其中i是一整数), 使用这种“明显的”语法是不必要的, 因为在计算模m之前, 指数要先在整数(可能导致一个非常大的整数)上计算. 更适合的是使用惰性运算符“&^”即: i &^n mod m, 此时, 指数运算将由mod运算符智能地处理. 另一方面, mod运算符的左面优先比其他运算符低, 而右面优先高于+和-, 但低于*和/.

> 2002 mod 101;

> modp(2002,101);

> mods(49,100);

> mods(51,100);

> 2^101 mod 2002; # 同 2 &^101 mod 2002;

7)随机数生成器(rand)

命令格式:  

rand( );    #随机返回一个12位数字的非负整数

rand(a..b); #调用rand(a..b)返回一个程序, 它在调用时生成一个在范围[a, b]内的随机数

> rand();

> myproc:=rand(1..2002):

> myproc();

> myproc();

    注意, rand(n)是rand(0..n-1)的简写形式.

2.1.2 复数运算

复数是Maple中的基本数据类型. 虚数单位i在Maple中用I表示. 在运算中, 数值类型转化成复数类型是自动的, 所有的算术运算符对复数类型均适用. 另外还可以用Re( )Im( )conjugate( )argument( )等函数分别计算实数的实部、虚部、共轭复数和幅角主值等运算. 试作如下实验:  

> complex_number:=(1+2*I)*(3+4*I);

> Re(%);Im(%%);conjugate(%%%);argument(complex_number);

值得注意的是上行命令中均以“;”结束, 因此不能将命令中的2个%或3个%(最多只能用3个%)改为1个%, 因为%表示上一次输出结果, 若上行命令改为“,”结束, 则均可用1个%.

为了在符号表达式中进行复数运算, 可以用函数evalc( ), 函数evalc把表达式中所有的符号变量都当成实数, 也就是认为所有的复变量都写成 的形式, 其中a、b都是实变量. 另外还有一些实用命令, 分述如下:  

1) 绝对值函数

命令格式: abs(expr);

当expr为实数时,返回其绝对值,当expr为复数时,返回复数的模.

abs(-2002);    #常数的绝对值

abs(1+2*I);   #复数的模

abs(sqrt(3)*I*u^2*v); #复数表达式的绝对值

abs(2*x-5);   #函数表达式的绝对值

2)复数的幅角函数

命令格式:   argument(x); #返回复数x的幅角的主值

> argument(6+11*I);

> argument(exp(4*Pi/3*I));

3)共轭复数

命令格式:   conjugate(x); #返回x的共轭复数

> conjugate(6+8*I);

> conjugate(exp(4*Pi/3*I));

2.1.3 数的进制转换

数的进制是数值运算中的一个重要问题. 而在Maple中数的进制转换非常容易, 使用convert命令即可.

命令格式:   convert(expr, form, arg3, ...);   

其中, expr为任意表达式, form为一名称, arg3, ... 可选项.

下面对其中常用数的转换予以概述. 而convert的其它功能将在后叙章节详述.

    1)基数之间的转换

命令格式:  

convert(n, base, beta);      #将基数为10的数n转换为基数为beta的数

    convert(n, base, alpha, beta);#将基数为alpha的数字n转换为基数为beta的数

> convert(2003,base,7); #将10进制数2002转换为7进制数, 结果为: (5561)7

> convert([1,6,5,5],base,7,10); #将7进制数5561转换为10进制数

convert(2002,base,60);       #将十进制数2002转换为60进制数, 得33(分钟)22(秒)

   2)转换为二进制形式

命令格式: convert(n, binary);

其功能是将十进制数n转换为2进制数. 值得注意的是, 数可以是正的, 也可以是负的, 或者是整数, 或者是浮点数, 是浮点数时情况较为复杂.

convert(2002,binary);  

convert(-1999,binary);

convert(1999.7,binary);

3)转换为十进制形式

其它数值转换为十进制的命令格式为:  

convert(n, decimal, binary);   #将一个2进制数n转换为10进制数

    convert(n, decimal, octal);    #将一个8进制数n转换为10进制数

    convert(string, decimal, hex); #将一个16进制字符串string转换为10进制数

convert(11111010010, decimal, binary);   

convert(-1234, decimal, octal);          

> convert("2A.C", decimal, hex);        

4) 转换为16进制数

将自然数n转换为16进制数的命令格式为: convert(n, hex);  

convert(2002,hex); convert(1999,hex);

5)转换为浮点数

命令格式: convert(expr, float);

注意, convert/float命令将任意表达式转换为精度为全局变量Digits的浮点数, 且仅是对evalf的调用.

convert(1999/2002,float);

convert(Pi,float);

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Maple is a computer program capable of performing a wide variety of mathematical operations. It originated in the early 1980s as a computer algebra system, but today this description doesn’t really do it justice. Maple has facilities for algebra, calculus, linear algebra, graphics (twoand three-dimensional plots, and animations), numerical calculations to arbitrary precision, and many other things besides. It is widely used in universities across the world, and is particularly useful for tasks that are tedious and error-prone when performed by humans, such as manipulating complicated series expansions and solving large sets of simultaneous equations. Used correctly, Maple can save time and quickly solve problems that would otherwise be intractable. Used incorrectly, it can lead to frustration, and the destruction of expensive IT equipment. At the time of writing, the current version is Maple 2016. Versions before Maple 2015 were numbered starting from 1; the last of these was Maple 18. New features introduced in each version from Maple 4.0 onwards can be viewed using the help system (see Section 2.2). For the most part, recent changes have been relatively minor, at least as far as the material in this book is concerned. Consequently, all of the examples work with both Maple 2015 and Maple 2016. In fact, most will work in older versions as well, though naturally the number of exceptions increases the further back one goes. Two substantial new features are the dataplot command, discussed in Section 6.6, and the new rules concerning terminating characters, described in Appendix B (see also Section 2.3). Both of these were introduced in Maple 2015.
Maple教程PDF是一种在电子档案中以PDF格式提供的Maple学习教程Maple是一种强大的数学软件,被广泛应用于科学工程、教育研究等领域。Maple教程PDF为用户提供了学习Maple的便利和灵活性。 首先,Maple教程PDF具有便携性。由于PDF格式的特性,Maple教程PDF可以在多种设备上进行阅读和学习,例如电脑、平板和手机等。用户可以随时随地地阅读教程,无需受限于特定的时间和地点。这使得学习变得更加方便和高效。 其次,Maple教程PDF提供了全面和系统的教学内容。PDF格式的文件可以容纳大量的文字、图表和示例,教程能够详细地介绍Maple的各种功能和应用。通过有序的章节和清晰的结构,用户可以逐步地学习Maple的基础知识,深入了解其高级功能,并能够按照自己的需要进行查找和重复阅读。这种方式可以让用户以自己的节奏和目标来学习Maple,提高学习效果和理解程度。 最后,Maple教程PDF还可以充分利用电子文档的互动性。PDF文件通常具有书签、目录和链接等功能,用户可以通过点击操作来快速跳转到需要的章节和内容。同时,教程中可能包含练习题和答案,用户可以通过点击链接来查看答案和解析,加深对Maple的理解和应用。这种互动性为用户提供了更加灵活和交互式的学习方式,使学习过程更加有趣和富有挑战。 综上所述,Maple教程PDF通过便携性、全面性和互动性等特点,为用户提供了高效、方便和灵活的Maple学习方式。无论是初学者还是有一定基础的用户,都可以通过阅读Maple教程PDF,提高对Maple软件的掌握程度和应用水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值