第1章 Maple的基本量
- 格式:pdf
- 大小:128.42 KB
- 文档页数:7
符号计算系统maple 教程第1章 maple 简介*.mw 格式的maple 文档可以将文本数字、数学公式、声音、图像等内容组合在一起,生成具有多媒体效果的专业科技文档。
Maple 可以打开maple 12进入文件模式窗口;打开 class worksheets maple 12,打开传统的工作模式窗口;打开command-line maple12,进入命令行模式窗口。
在command-line maple12窗口中,按enter 键执行表达式计算,若命令很长,在输入过程中按shift+enter 键将命令分成若干行,在class worksheets maple 12模式下,表达式必须以冒号”:”或分号”;”结尾,在maple 12模式下则不需要如此。
#及其所在行后面的部分为注释说明语句。
在maple12模式下进行一下操作:maple 的优点是可以直接修改编辑好的公式等 因式分解:> ,而且可以直接在出现结果后继续在factor 公式中进行修改。
多项式展开>公约数:>公倍数:>计算111121k k =-∑:>计算和式31n k k =∑:>求解线性方程组:215x y x y +=-=:>计算44sin()d x dx x ⎛⎫= ⎪⎝⎭:>计算41x dx x -⎰:>计算22()bd a c x y dxdy +⎰⎰:>计算矩阵123213123A ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦的特征值和特征向量。
>计算上面A 矩阵的1-范数: >画出f(x)=x 2sin(x)-1在区间[-7,7]上的图像:画长幅内次摆线:3cos 24cos3{,[0,2]3sin 24sin 3x t t t y t tπ=+∈=-画出22()(,)x y f x y xye -+=在[2,2],[2,2]x y ∈-∈-上的图像。
获取帮助:➢ 文件模式下:maple12:按F1会出现快速帮助菜单。
1 初识计算机代数系统Maple1.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会认识一些输入的变量名称, 如希腊字母等. 为了使用方便, 现将希腊字母表罗列如下,输入时只需录入相应的英文,要输入大写希腊字母, 只需把英文首字母大写:的函数或程序设计方式控制其输出方式,如下例:> for i to 10 doprintf("i=%+2d and i^(1/2)=%+6.3f", i, eval(sqrt(i)));od;+2d的含义是带符号的十进位整数,域宽为2. 显然,这种输出方式不是我们想要的,为了得到更美观> for i to 10 doprintf("i=%+2d and i^(1/2)=%+6.3f\n", i, eval(sqrt(i)));od;再看下例:将输入的两个数字用特殊形式打印:> niceP:=proc(x,y)printf("value of x=%6.4f, value of y=%6.4f",x,y);end proc;> niceP(2.4,2002.204); 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 中, 主要的算术运算符有“+”(加)、“–”(减)、“*”(乘)、“/”(除)以及“^”(乘方或幂,或记为**), 算术运算符与数字或字母一起组成任意表达式, 但其中“+”、“*”是最基本的运算, 其余运算均可归诸于求和或乘积形式. 算述表达式运算的次序为: 从左到右, 圆括号最先, 幂运算优先, 其次是乘除,最后是加减. 值得注意的是, “^”的表达式只能有两个操作数, 换言之, c b a ^^是错误的, 而“+”或“*”的任意表达式可以有两个或者两个以上的操作数.Maple 有能力精确计算任意位的整数、有理数或者实数、复数的四则运算, 以及模算术、硬件浮点数和任意精度的浮点数甚至于矩阵的计算等等. 总之, Maple 可以进行任意数值计算.但是, 任何软件或程序毕竟只是人们进行科学研究的一种必要的辅助, 即便它有很多优点, 但也有它的局限性, 为了客观地认识数学软件、认识Maple, 下面通过两个简单例子予以说明.第一个简单的数值计算实例想说明Maple 数值计算的答案的正确性: > 3!!!;上述运算结果在IBM PC 机(1G , 128M)上计算只需要0.01秒, 得到如此复杂的结果(1747位), 一个自然的问题是: 答案正确吗?为了回答这个问题, 我们借助于数值分析方法, 由Stiring 公式)exp(2!n n n n n -⋅⋅≈π可得: 17461060091.2!720⨯≈, 前三位数字与Maple 输出结果相同, 且两者结果均为1747位. 另外, 在720!的计算中, 5的因子的个数为:1785720572057205720432=⎥⎦⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡这些5与足够多的2相乘将得到178个0, 而Maple 的输出结果中最后178位数为零. 由此, 可以相信Maple 结果的正确性.另一个例子则想说明Maple 计算的局限性:()()?8 ?86/23/1=-=-Maple 在处理问题时, 为了避免失根, 从不求算术式的近似值, 分数则化简为既约分数. 因此, 在Maple 中很容易得到:()()6/23/18 8-=-显然这是错误的. 这一点可以从代数的角度予以分析.不妨设()x =-3/18, 则083=+x , 即0)42)(2(2=+-+x x x , 显然()3/18-有3个结果, -2是其实数结果.另一方面, 设()x=-6/28, 则0)8(26=-+x , 即:)(42)(2)(2()8)(8(2233+--+=-+x x x x x x x 显然()6/28-有6个结果, -2、2是其实数结果.这个简单的例子说明了Maple 在数值计算方面绝对不是万能的, 其计算结果也不是完全正确的, 但是, 通过更多的实验可以发现: Maple 只可能丢失部分结果, 而不会增加或很少给出完全错误的结果(如上例中Maple 的浮点数结果皆为 + 1.000000000 1.732050807I ). 这一点提醒我们, 在利用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 的余数, 并将商赋给qiquo(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);上述两个例子是一个有趣的数论难题。
Maple的内部常数Maple的常用内部数学函数)Maple中的数学运算符Maple的关系运算符函数的连续性四大数学软件(mathcad,mathematica,maple,matlab)中,只有Maple才有判断函数连续性的命令,其命令如下:如何用Maple求极限(1)极限:(2)单侧极限:左极限:右极限:如何用Maple求导数如何用Maple求高阶导数如何在Maple中求隐函数的导数在Maple中,没有直接求参数方程确定的函数的导数的命令,只能根据参数方程确定的函数的求导公式一步一步地进行推导;或者,干脆自己编一个小程序,应用起来会更加方便。
如何用Maple求不定积分求定积分、广义积分如何用Maple先加载student函数库,加载方法为:with(student);如何用Maple进行分部积分的计算先加载student函数库,加载方法为:with(student);在Maple中,如何用矩形法、梯形法和辛普森法求近似积分在计算之前,首先要加载student函数库,加载方法为:with(student);矩形法梯形法辛普森法如何用Maple对数列和级数进行求和如何用Maple进行连乘如何用Maple展开级数如何在Maple中进行积分变换在进行拉普拉斯变换及其逆变换、傅立叶变换及其逆变换、傅立叶正弦变换和傅立叶余弦变换时,必须要先加载积分变换函数库,加载方法为:with(inttrans),但在进行Z变换及其逆变换时,不用加载任何函数库。
如何用Maple解微分方程如何用Maple解微分方程组如何用maple求多变量函数的极限以两个变量为例说明,多于两个变量的函数极限可以依次类推。
计算极限如何用maple 求多元函数的偏导数求偏导数如何用maple 求多变量函数的泰勒展开式首先要加载mtaylor 链接库,加载方法为:readlib (mtaylor )(在maple7、maple8、maple9中不用加载)如何用maple 求重积分可以利用数个int ()指令的组合来完成。
1.Maple概述什么是Maple, 怎么学习Maple?Maple软件是加拿大Waterloo大学在1980年开始开发,到现在最新的版本是Maple11, Maple具有强大的数值计算能力,图形处理能力,特别是符号计算能力。
常用的数学软件除Maple外,有Matlab等, 统计软件: SAS,SPSS,运筹学软件:Lingo, WINQSB.1. 数值计算与符号计算的区别a*x^2+b*x+c=0求这方程的跟, 来说明数值计算与符号计算的区别数值计算:切线法符号计算:Maple功能非常之强大, 不仅适合数学家, 还适合物理学家, 工程师,化学家,生物学家, 总之,它适合所有需要科学计算的人.举例:1) 求PI的前100位2) 求X的范围3) 求积分演示1.1.2界面介绍1.工具栏在Maple界面上说明2. 工作区每一个“>”是一个执行块. 表示命令提示符。
9-95 1.2基本运算能精确计算整数、有理数或者实数、复数的四则运算, 以及模算术、硬件浮点数和任意精度的浮点数甚至于矩阵的计算等等.总之, Maple可以进行任意数值计算.10-95 1.2.1数值计算问题关键符号问号(?) 帮助分号(;) 表示表达式结束,显示内容冒号(:) 表示表达式结束,不显示内容字符(\) 表示内容连续井号(#) 表示注释百分号(%) 表示上一步(I) 表示虚数单位演示11-951.2.1.2复数运算函数作用格式Re 返回实部function(co mplex)Im返回虚部conjugate 共轭复数argument 幅角abs模演示1.2.1.3数的进制转换convert 函数●b inary二进制●d ecimal 十进制●o ctal 八进制●h ex十六进制演示1.2.1.4常用函数●isprime素数isprime(n)●max/min最值max(a1,a2,…);●mod/modp/mods余a mod b; modp(a,b); mods(a,b);●rand随机数rand();rand(a..b)();14-95 1.2.1.5整数计算函数abs 求绝对值ifactor 求因子iquo 求商iquo(a,b,’r’)irem 余数irem(a,b,’q’)isqrt 近似的平方跟整数15-95 1.2.1.6精确与非精确运算在精确运算中,必须所有的数是整数或恒数(如, Pi), Maple不会对该表达式进行浮点运算.如果你想得到非精确值, 用浮点数进行该表达式计算.演示1.2.2初等函数初等数学是数学的基础之一, 也是数学中最有魅力的一部分内容. 通过下面的内容我们可以领略Maple对初等数学的驾驭能力, 也可以通过这些实验对Maple产生一些感性认识. 指数函数:exp自然函数:ln一般对数:log[a]常用对数: log101.2.2.1重要函数连乘函数: product/Product 连加函数: sum/Sum展开函数:expand合并函数:combine1.2.2.2简单函数定义Maple定义简单的函数有2种方法:•函数法:unapply(expr,vars);expr为任意表达式,vars为变量组•箭头法: (vars)->expr;expr为任意表达式,vars为变量组重要函数floorceilopnopsmap演示1.3求值1.3.1赋值在Maple中,不需要申明变量类型,直接对变量赋值,其赋值格式为.变量明:=表达式;例如:y:=5;f:=x^2+3*x+2;1.3.2变量代换在表达式化简中, 变量代换是一个得力工具. 我们可以利用函数subs根据自己的意愿进行变量代换, 最简单的调用这个函数的形式是这样的:单个变量替换subs ( x= a, expr);多个变量替换subs ( x = a,y=b, expr);调用的结果是将表达式expr中所有变量var出现的地方替换成变量的值.演示subs命令●顺序替换subs(var1=val1,var2=val2,…,expr);subs((var1=val1,var2=val2,…),expr);●同步替换subs({var1=val1,var2=val2,…},expr);演示1.3.3 假设机制解决某些问题的时候,我们必须要对其变量进行假设,格式如下:assume(x1::prop1,x2::prop2,…);assume(x1>val,x2<val);其中xi表示变量,propi表示属性,val表示值例如:sin(n*Pi),如果n是整数,这个表达式值为0assume(n::interger)演示1.3.4 求值规则●eval 命令格式:eval(e, x=a); #求表达式e在x=a处的值eval(e, vars); #对方多个变量求值●evalc #对复数求值●evalf #求浮点数●evala #对表达式或未求值函数求值●value #对惰性表达式求值1.4 数据结构●变量类型(数字,字符串,复合表达式)integer, float, list, set, exprseq,…●运算符: +, -, *, /, ^●关系表达式:=, <>, <, <=注意“>”●逻辑表达式: and, or ,not26-95 1.4.1 数据及变量类型查询●whattype(expr)其中expr是任何表达式●type(expr,t)其中expr是任何表达式,t为有效表达式1.4.2 序列,列表和集合1.4.2.1序列所谓序列(Sequence), 就是一组用逗号隔开的表达式列.如:s:=1,4,9,16,25;一个序列也可以由若干个序列复合而成s:=s,s;该值为:1,4,9,16,25,1,4,9,16,25;产生序列的函数为seq(f,i=m..n)其中f是函数,可以是i的函数,也可以不是.判断序列的函数为:nops演示1.4.2.2 列表简单的说, 就是序列加上方括号如:L:=[1,2,3,4];L1:=[[1,2,3],[2,3,4]];对序列和列表操作的函数nops:个数sort:排序op:解开操作extracts operands from an expression1.4.2.3 集合集合(set)也是把对象(元素)放在一起的数据结构, 与列表不同的是集合中不可以有相同的元素(如果有, Maple也会自动将其当作同一个元素), 另外, 集合中的元素不管次序. 用花括号表示集合.s:={x,1,1-z,x};集合的基本运算函数:交(intersect),并(union),差(minus)格式:函数(集合,集合);1.4.3 数组和表arraytableS := table([(2)=45,(4)=61]);1.4.4 数据类型的转换与合并convert 这个功能强大的类型转换函数,可以实现列表和数组的类型转换将array转换为list将array转换为set1.5 高级输入与输出操作Maple提供了良好的接口来编辑与计算数学式. 许多时候, 我们可能需要把Maple的运算结果输出到一个文件中, 或者在一个文本编辑器里先编好一个较大的Maple程序, 再将它加载到Maple的环境里.1.5.1 fprintffprintf函数是用来输出到文件中,在使用该函数前,先用fopen打开一个文件,再使用fprintf函数输出到fopen打开的文件中,最后用fclose关闭文件。
第1章章数1.1 复数Re,Im - 返回复数型表达式的实部/虚部abs - 绝对值函数argument - 复数的幅角函数conjugate - 返回共轭复数csgn - 实数和复数表达式的符号函数signum - 实数和复数表达式的sign 函数51.2 MAPLE 常数已知的变量名称指数常数(以自然对数为底)I - x^2 = -1 的根infinity 无穷大1.3 整数函数! - 阶乘函数irem, iquo - 整数的余数/商isprime - 素数测试isqrfree - 无整数平方的因数分解max, min - 数的最大值/最小值mod, modp, mods - 计算对 m 的整数模rand - 随机数生成器randomize - 重置随机数生成器1.4 素数Randpoly, Randprime - 有限域的随机多项式/首一素数多项式ithprime - 确定第 i 个素数nextprime, prevprime - 确定下一个最大/最小素数1.5 数的进制转换convert/base - 基数之间的转换convert/binary - 转换为二进制形式convert/decimal - 转换为 10 进制convert/double - 将双精度浮点数由一种形式转换为另一种形式convert/float - 转换为浮点数convert/hex - 转换为十六进制形式convert/metric - 转换为公制单位convert/octal - 转换为八进制形式1.6 数的类型检查type - 数的类型检查函数第2章初等数学2.1 初等函数product - 确定乘积求和不确定乘积exp - 指数函数sum - 确定求和不确定求和sqrt - 计算平方根算术运算符+, -, *, /, ^add, mul - 值序列的加法/乘法2.2 三角函数arcsin, arcsinh, . - 反三角函数/反双曲函数sin, sinh, . - 三角函数/双曲函数2.3 LOGARITHMS 函数dilog - Dilogarithm 函数ln, log, log10 - 自然对数/一般对数,常用对数2.4 类型转换convert/`+`,convert/`*` - 转换为求和/乘积convert/hypergeom - 将求和转换为超越函数convert/degrees - 将弧度转换为度convert/expsincos - 将trig 函数转换为exp, sin, cosconvert/Ei - 转换为指数积分convert/exp - 将trig 函数转换为指数函数convert/ln - 将arctrig 转换为对数函数polar - 转换为极坐标形式convert/radians - 将度转换为弧度convert/sincos - 将trig 函数转换为sin, cos, sinh, cosh convert/tan - 将trig 函数转换为tanconvert/trig - 将指数函数转换为三角函数和双曲函数第3章求值3.1 假设功能3.2 求值Eval - 对一个表达式求值eval - 求值evala - 在代数数(或者函数)域求值evalb - 按照一个布尔表达式求值evalc - 在复数域上符号求值evalf - 使用浮点算法求值evalhf - 用硬件浮点数算法对表达式求值evalm - 对矩阵表达式求值evaln - 求值到一个名称evalr, shake - 用区间算法求表达式的值和计算范围evalrC - 用复数区间算法对表达式求值value - 求值的惰性函数第4章求根,解方程4.1 数值解fsolve - 利用浮点数算法求解solve/floats - 包含浮点数的表达式4.2 最优化extrema - 寻找一个表达式的相对极值minimize, maximize - 计算最小值/最大值maxnorm - 一个多项式无穷大范数4.3 求根allvalues -计算含有RootOfs的表达式的所有可能值isqrt, iroot - 整数的平方根/第n 次根realroot - 一个多项式的实数根的隔离区间root - 一个代数表达式的第n 阶根RootOf - 方程根的表示surd - 非主根函数roots - 一个多项式对一个变量的精确根turm, sturmseq - 多项式在区间上的实数根数和实根序列4.4 解方程eliminate - 消去一个方程组中的某些变量isolve - 求解方程的整数解solvefor - 求解一个方程组的一个或者多个变量isolate - 隔离一个方程左边的一个子表达式singular - 寻找一个表达式的极点solve/identity - 求解包含属性的表达式solve/ineqs - 求解不等式solve/linear - 求解线性方程组solve/radical - 求解含有未知量根式的方程solve/scalar - 标量情况(单变量和方程)solve/series - 求解含有一般级数的方程solve/system - 解方程组或不等式组第5章操作表达式5.1 处理表达式Norm - 代数数 (或者函数) 的标准型Power - 惰性幂函数Powmod -带余数的惰性幂函数Primfield - 代数域的原始元素Trace - 求一个代数数或者函数的迹charfcn - 表达式和集合的特征函数Indets - 找一个表达式的变元invfunc - 函数表的逆powmod - 带余数的幂函数Risidue - 计算一个表达式的代数余combine - 表达式合并(对tan,cot不好用)expand - 表达式展开Expand - 展开表达式的惰性形式expandoff/expandon - 抑制/不抑制函数展开5.2 因式分解Afactor - 绝对因式分解的惰性形式Afactors - 绝对因式分解分解项列表的惰性形式Berlekamp - 因式分解的Berlekamp 显式度factor - 多元的多项式的因式分解factors - 多元多项式的因式分解列表Factor - 函数factor 的惰性形式Factors - 函数factors 的惰性形式polytools[splits] - 多项式的完全因式分解第6章化简6.1 表达式化简118simplify - 给一个表达式实施化简规则simplify/@ - 利用运算符化简表达式simplify/Ei - 利用指数积分化简表达式simplify/GAMMA - 利用GAMMA 函数进行化简simplify/RootOf - 用RootOf 函数化简表达式simplify/wronskian - 化简含wronskian 标识符的表达式simplify/hypergeom - 化简超越函数表达式simplify/ln - 化简含有对数的表达式simplify/piecewise - 化简分段函数表达式simplify/polar - 化简含有极坐标形式的复数型表达式simplify/power - 化简含幂次的表达式simplify/radical - 化简含有根式的表达式simplify/rtable - 化简rtable 表达式simplify/siderels - 使用关系式进行化简simplify/sqrt - 根式化简simplify/trig - 化简trig 函数表达式simplify/zero - 化简含嵌入型实数和虚数的复数表达式6.2 其它化简操作Normal - normal 函数的惰性形式convert - 将一个表达式转换成不同形式radnormal - 标准化一个含有根号数的表达式rationalize - 分母有理化第7章操作多项式7.0 MAPLE 中的多项式简介7.1 提取coeff - 提取一个多项式的系数coeffs - 提取多元的多项式的所有系数coeftayl - 多元表达式的系数lcoeff, tcoeff - 返回多元多项式的首项和末项系数7.2 多项式约数和根gcd, lcm - 多项式的最大公约数/最小公倍数psqrt, proot - 多项式的平方根和第n次根rem,quo - 多项式的余数/商7.3 操纵多项式convert/horner - 将一个多项式转换成Horner形式collect - 象幂次一样合并系数compoly - 确定一个多项式的可能合并的项数convert/polynom - 将级数转换成多项式形式convert/mathorner - 将多项式转换成Horner矩阵形式convert/ratpoly - 将级数转换成有理多项式sort - 将值的列表或者多项式排序sqrfree - 不含平方项的因数分解函数7.4 多项式运算discrim - 多项式的判别式fixdiv - 计算多项式的固定除数norm - 多项式的标准型resultant - 计算两个多项式的终结式bernoulli - Bernoulli 数和多项式bernstein - 用Bernstein多项式近似一个函数content, primpart - 一个多元的多项式的内容和主部degree, ldegree - 一个多项式的最高次方/最低次方divide - 多项式的精确除法euler - Euler 数和多项式icontent - 多项式的整数部分interp - 多项式的插值prem, sprem - 多项式的pseudo 余数和稀疏pseudo 余数randpoly - 随机多项式生成器spline - 计算自然样条函数第8章有理表达式8.0 有理表达式简介8.1 操作有理多项式numer,denom - 返回一个表达式的分子/分母frontend - 将一般的表达式处理成一个有理表达式normal - 标准化一个有理表达式convert/parfrac - 转换为部分分数形式convert/rational - 将浮点数转换为接近的有理数ratrecon - 重建有理函数第9章微积分9.1 取极限Limit, limit - 计算极限limit[dir] - 计算方向极限limit[multi] - 多重方向极限limit[return] - 极限的返回值9.2 连续性测试discont - 寻找一个函数在实数域上的间断点fdiscont - 用数值法寻找函数在实数域上的间断点iscont - 测试在一个区间上的连续性9.3 微分计算D - 微分算子D, diff - 运算符D 和函数diffdiff, Diff - 微分或者偏微分convert/D - 将含导数表达式转换为D运算符表达式convert/diff - 将D(f)(x)表达式转换为diff(f(x),x)的形式implicitdiff - 由一个方程定义一个函数的微分9.4 积分计算Si, Ci …- 三角和双曲积分Dirac, Heaviside - Dirac 函数/Heaviside阶梯函数Ei - 指数积分Elliptic - 椭圆积分FresnelC, … - Fresnel 正弦,余弦积分和辅助函数int, Int - 定积分和不定积分LegendreP, …- Legendre 函数及其第一和第二类函数Li - 对数积分student[changevar] - 变量代换dawson - Dawson 积分ellipsoid - 椭球体的表面积evalf(int) - 数值积分intat, Intat - 在一个点上积分求值第10章微分方程10.1 微分方程分类odeadvisor - ODE-求解分析器DESol - 表示微分方程解的数据结构pdetest - 测试pdsolve 能找到的偏微分方程(PDEs)解10.2 常微分方程求解dsolve - 求解常微方程(ODE)dsolve - 用给定的初始条件求解ODE 问题dsolve/inttrans - 用积分变换方法求解常微分方程dsolve/numeric - 常微方程数值解dsolve/piecewise - 带分段系数的常微方程求解dsolve - 寻找ODE 问题的级数解dsolve - 求解ODEs 方程组odetest - 从ODE 求解器中测试结果是显式或者隐式类型10.3 偏微分方程求解pdsolve - 寻找偏微分方程 (PDEs) 的解析解第11章数值计算11.1 MAPLE 中的数值计算环境IEEE 标准和Maple数值计算数据类型特殊值环境变量11.2 算法标准算法复数算法含有0,无穷和未定义数的算法11.3 数据构造器254complex - 复数和复数构造器Float, …- 浮点数及其构造器Fraction - 分数及其的构造器integer - 整数和整数构造器11.4 MATLAB 软件包简介11.5 “”区间类型表达式第12章级数12.1 幂级数的阶数Order - 阶数项函数order - 确定级数的截断阶数12.2 常见级数展开series - 一般的级数展开taylor - Taylor 级数展开mtaylor - 多元Taylor级数展开poisson - Poisson级数展开.26812.3 其它级数eulermac - Euler-Maclaurin求和piecewise - 分段连续函数asympt - 渐进展开第13章特殊函数AiryAi, AiryBi - Airy 波动函数AiryAiZeros, AiryBiZeros - Airy函数的实数零点AngerJ, WeberE - Anger函数和Weber函数BesselI, HankelH1, …- Bessel函数和Hankel函数BesselJZeros, … - Bessel函数实数零点Beta - Beta函数EllipticModulus - 模数函数k(q)GAMMA, lnGAMMA - 完全和不完全Gamma函数GaussAGM - Gauss 算术的几何平均数JacobiAM, ., - Jacobi 振幅函数和椭圆函数JacobiTheta1, JacobiTheta4 - Jacobi theta函数JacobiZeta - Jacobi 的Zeta函数KelvinBer, KelvinBei - Kelvin函数KummerM, - Kummer M函数和U函数LambertW - LambertW函数LerchPhi - 一般的Lerch Phi函数LommelS1, LommelS2 - Lommel函数MeijerG - 一个修正的Meijer G函数Psi - Digamma 和Polygamma函数StruveH, StruveL - Struve函数WeierstrassP - Weierstrass P函数及其导数WhittakerM - Whittaker 函数Zeta - Zeta 函数erf, … - 误差函数,补充的误差函数和虚数误差函数harmonic - 调和函数hypergeom - 广义的超越函数pochhammer - 一般的pochhammer函数polylog - 一般的polylogarithm函数第14章线性代数14.1 ALGEBRA(代数)中矩阵,矢量和数组14.2 LINALG 软件包简介14.3 数据结构矩阵matrices(小写)矢量vectors(矢量)convert/matrix - 将数组,列表,Matrix 转换成matrixconvert/vector - 将列表,数组或Vector 转换成矢量vectorlinalg[matrix] - 生成矩阵matrix(小写)linalg[vector] - 生成矢量vector(小写)14.4 惰性函数Det - 惰性行列式运算符Eigenvals - 数值型矩阵的特征值和特征向量Hermite, Smith - 矩阵的Hermite 和Smith 标准型14.5 LinearAlgebra函数Matrix 定义矩阵Add 加/减矩阵Adjoint 伴随矩阵BackwardSubstitute 求解 A . X = B,其中 A 为上三角型行阶梯矩阵BandMatrix 带状矩阵Basis 返回向量空间的一组基SumBasis 返回向量空间直和的一组基IntersectionBasis 返回向量空间交的一组基BezoutMatrix 构造两个多项式的Bezout 矩阵BidiagonalForm 将矩阵约化为双对角型CharacteristicMatrix 构造特征矩阵CharacteristicPolynomial 构造矩阵的特征多项式CompanionMatrix 构造一个首一(或非首一)多项式或矩阵多项式的友矩阵(束)ConditionNumber 计算矩阵关于某范数的条件数ConstantMatrix 构造常数矩阵ConstantVector 构造常数向量Copy 构造矩阵或向量的一份复制CreatePermutation 将一个 NAG 主元向量转换为一个置换向量或矩阵CrossProduct 向量的叉积`&x` 向量的叉积DeleteRow 删除矩阵的行DeleteColumn 删除矩阵的列Determinant 行列式Diagonal 返回从矩阵中得到的向量序列DiagonalMatrix 构造(分块)对角矩阵Dimension 行数和列数DotProduct 点积BilinearForm 向量的双线性形式EigenConditionNumbers 计算数值特征值制约问题的特征值或特征向量的条件数Eigenvalues 计算矩阵的特征值Eigenvectors 计算矩阵的特征向量Equal 比较两个向量或矩阵是否相等ForwardSubstitute 求解 A . X = B,其中 A 为下三角型行阶梯矩阵FrobeniusForm 将一个方阵约化为 Frobenius 型(有理标准型)GaussianElimination 对矩阵作高斯消元ReducedRowEchelonForm 对矩阵作高斯-约当消元GetResultDataType 返回矩阵或向量运算的结果数据类型GetResultShape 返回矩阵或向量运算的结果形状GivensRotationMatrix 构造Givens 旋转的矩阵GramSchmidt 计算一个正交向量集HankelMatrix 构造一个Hankel 矩阵HermiteForm 计算一个矩阵的 Hermite 正规型HessenbergForm 将一个方阵约化为上Hessenberg 型HilbertMatrix 构造广义 Hilbert 矩阵HouseholderMatrix 构造 Householder 反射矩阵IdentityMatrix 构造一个单位矩阵IsDefinite 检验矩阵的正定性,负定性或不定性IsOrthogonal 检验矩阵是否正交IsUnitary 检验矩阵是否为酉矩阵IsSimilar 确定两个矩阵是否相似JordanBlockMatrix 构造约当块矩阵JordanForm 将矩阵约化为约当型KroneckerProduct 构造两个矩阵的Kronecker 张量积LeastSquares 方程的最小二乘解LinearSolve 求解线性方程组 A . x = bLUDecomposition 计算矩阵的 Cholesky,PLU 或 PLU1R 分解Map 将一个程序映射到一个表达式上,对矩阵和向量在原位置上进行处理MatrixAdd 计算两个矩阵的线性组合VectorAdd 计算两个向量的线性组合MatrixExponential 确定一个矩阵 A 的矩阵指数 exp(A)MatrixFunction 确定方阵 A 的函数F(A)MatrixInverse 计算方阵的逆或矩阵的Moore-Penrose 伪逆MatrixMatrixMultiply 计算两个矩阵的乘积MatrixVectorMultiply 计算一个矩阵和一个列向量的乘积VectorMatrixMultiply 计算一个行向量和一个矩阵的乘积MatrixPower 矩阵的幂MinimalPolynomial 构造矩阵的最小多项式Minor 计算矩阵的子式Multiply 矩阵相乘Norm 计算矩阵或向量的p-范数MatrixNorm 计算矩阵的p-范数VectorNorm 计算向量的p-范数Normalize 向量正规化NullSpace 计算矩阵的零度零空间OuterProductMatrix 两个向量的外积Permanent 方阵的不变量Pivot 矩阵元素的主元消去法PopovForm Popov 正规型QRDecomposition QR 分解RandomMatrix 构造随机矩阵RandomVector 构造随机向量Rank 计算矩阵的秩Row 返回矩阵的一个行向量序列Column 返回矩阵的一个列向量序列RowOperation 对矩阵作初等行变换ColumnOperation 对矩阵作出等列变换RowSpace 返回矩阵行空间的一组基ColumnSpace 返回矩阵列空间的一组基ScalarMatrix 构造一个单位矩阵的数量倍数ScalarVector 构造一个单位向量的数量倍数ScalarMultiply 矩阵与数的乘积MatrixScalarMultiply 计算矩阵与数的乘积VectorScalarMultiply 计算向量与数的乘积SchurForm 将方阵约化为 Schur 型SingularValues 计算矩阵的奇异值SmithForm 将矩阵约化为 Smith 正规型StronglyConnectedBlocks 计算方阵的强连通块SubMatrix 构造矩阵的子矩阵SubVector 构造向量的子向量SylvesterMatrix 构造两个多项式的 Sylvester 矩阵ToeplitzMatrix 构造Toeplitz 矩阵Trace 计算方阵的迹Transpose 转置矩阵HermitianTranspose 共轭转置矩阵TridiagonalForm 将方阵约化为三对角型UnitVector 构造单位向量VandermondeMatrix 构造一个 Vandermonde 矩阵VectorAngle 计算两个向量的夹角ZeroMatrix 构造一个零矩阵ZeroVector 构造一个零向量Zip 将一个具有两个参数的程序作用到一对矩阵或向量上LinearAlgebra[Generic] 子函数包[Generic] 子函数包提供作用在场,欧几里得域,积分域和环上的线性代数算法。
Maple基础教程(修订稿)Maple 基础⼀Maple 的基本运算1 数值计算问题在应⽤Maple 做算术运算时, 只需将Maple 当作⼀个“计算器”使⽤, 所不同的是命令结束时需加“;”或“:”.在Maple 中, 主要的算术运算符有“+”(加)、“–”(减)、“*”(乘)、“/”(除)以及“^”(乘⽅或幂,或记为**),值得注意的是, “^”的表达式只能有两个操作数, 换⾔之, c b a ^^是错误的, ⽽“+”或“*”的任意表达式可以有两个或者两个以上的操作数. 2.1.1 有理数运算作为⼀个符号代数系统, Maple 可以绝对避免算术运算的舍⼊误差.如果要求出两个整数运算的近似值时, 只需在任意⼀个整数后加“.”(或“.0”), 或者利⽤“evalf ”命令把表达式转换成浮点形式, 默认浮点数位是10 (即: Digits:=10, 据此可任意改变浮点数位, 如Digits:=20). > 123456789/987654321;13717421109739369 > evalf(%);.1249999989> big_number:=3^(3^3);:= big_number 7625597484987> length(%);13函数“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 保留为未求值.2)素数判别(isprime) 命令格式: isprime(n);如果判定n 可分解, 则返回false, 如果返回true, 则n “很可能”是素数. > isprime(2^(2^4)+1);true3) 确定第i 个素数(ithprime)若记第1个素数为2,判断第i 个素数的命令格式: ithprime(i);4) ⼀组数的最⼤值(max)/最⼩值(min)命令格式: max(x1,x2,…,xn); #求x 1,x 2,…,x n 中的最⼤值 min(x1,x2,…,xn); #求x 1,x 2,…,x n 中的最⼩值5)随机数⽣成器(rand)命令格式:rand( ); #随机返回⼀个12位数字的⾮负整数rand(a..b); #调⽤rand(a..b)返回⼀个程序, 它在调⽤时⽣成⼀个在范围[a, b]内的随机数> rand();427419669081> myproc:=rand(1..2002):> myproc();1916> myproc();1204注意, 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);-510Icomplex_number +:=> Re(%);Im(%%);conjugate(%%%);argument(complex_number);-510-510I-- +arctan2π()1) 绝对值函数命令格式: abs(expr);当expr为实数时,返回其绝对值,当expr为复数时,返回复数的模.2)复数的幅⾓函数命令格式: argument(x); #返回复数x的幅⾓的主值3)共轭复数命令格式: conjugate(x); #返回x的共轭复数2.2 初等数学2.2.1 常⽤函数1) 确定乘积和不确定乘积命令格式: product(f,k);product(f,k=m..n);product(f,k=alpha);product(f,k=expr);其中, f—任意表达式, k—乘积指数名称, m,n—整数或任意表达式, alpha—代数数RootOf, expr—包含k的任意表达式.> product(k^2,k=1..10); #计算2k关于1..10的连乘13168189440000> product(k^2,k); #计算2k的不确定乘积()Γk 2> product(a[k],k=0..5); #计算a i (i=0..5)的连乘a 0a 1a 2a 3a 4a 5> Product(n+k,k=0..m)=product(n+k,k=0..m); #计算(n+k)的连乘, 并写出其惰性表达式=∏ = k 0m() + n k ()Γ + + n m 1()Γn> product(k,k=RootOf(x^3-2)); #计算23-x 的三个根的乘积22)指数函数计算指数函数exp 关于x 的表达式的命令格式为: exp(x); 3)确定求和与不确定求和sum 命令格式: sum(f,k);sum(f,k=m..n); sum(f,k=alpha); sum(f,k=expr);其中, f —任意表达式, k —乘积指数名称, m,n —整数或任意表达式, alpha —代数数RootOf, expr —不含k 的表达式. > Sum(k^2,k=1..n)=sum(k^2,k=1..n);= ∑ = k 1nk 2 - + + 13() + n 1312() + n 1216n 16 > Sum(1/k!,k=0..infinity)=sum(1/k!,k=0..infinity);= ∑= k 0∞1!k e > sum(a[k]*x[k],k=0..n);∑= k 0na k x k> sum(k/(k+1),k=RootOf(x^2-3));3)三⾓函数/双曲函数命令格式: sin(x); cos(x); tan(x); cot(x); sec(x); csc(x); sinh(x); cosh(x); tanh(x); coth(x); sech(x); csch(x); 其中, x 为任意表达式. > Sin(Pi)=sin(Pi);= ()Sin π04)反三⾓函数/反双曲函数命令格式: arcsin(x); arccos(x); arctan(x); arccot(x); arcsec(x); arccsc(x);arcsinh(x); arccosh(x); arctanh(x); arccoth(x); arcsech(x); arccsch(x);arctan(y,x);其中, x, y 为表达式. 反三⾓函数/反双曲函数的参数必须按弧度计算. > arcsinh(1);()ln + 12> cos(arcsin(x));- 1x 25)对数函数命令格式: ln(x); #⾃然对数log[a](x); #⼀般对数 log10(x); #常⽤对数⼀般地, 在ln(x)中要求x>0. 但对于复数型表达式x, 有:)(argument *))(abs ln()ln(x I x x += (其中, ππ≤<-)(argument x )> log10(1000000);()ln 1000000()ln 10> simplify(%); #化简上式62.2.2 函数的定义试看下⾯⼀个例⼦:> f(x):=a*x^2+b*x+c;---并不是函数,⽽是⼀个表达式:= ()f x + + a x 2b x c> f(x),f(0),f(1/a);,, + + a x 2b x c ()f 0?? ?f 1由上述结果可以看出, ⽤赋值⽅法定义的f(x)是⼀个表达式⽽不是⼀个函数在Maple 中, 要真正完成⼀个函数的定义, 需要⽤算⼦(也称箭头操作符): > f:=x->a*x^2+b*x+c;:= f → x + + a x 2b x c> f(x),f(0),f(1/a);+ + a x 2b x c c + + 1a bac > f:=(x,y)->x^2+y^2;:= f → (),x y + x 2y 2> f(1,2);5> f:=(x,y)->a*x*y*exp(x^2+y^2);:= f → (),x y a x y e()+ x 2y 2另⼀个定义函数的命令是unapply,其作⽤是从⼀个表达式建⽴⼀个算⼦或函数. 命令格式为: f:=unapply(expr, x); 命令格式为: f:=unapply(expr, x, y, …); > f:=unapply(x^4+x^3+x^2+x+1,x);:= f → x + + + + x 4x 3x 2x 1借助函数piecewise 可以⽣成简单分段函数:> abs(x)=piecewise(x>0,x,x=0,0,x<0,-x);= x ??x < 0x 0= x 0-x < x 0清除函数的定义⽤命令unassign. > unassign(f); > f(1,1);()f ,11定义了⼀个函数后, 就可以使⽤op 或nops 指令查看有关函数中操作数的信息. nops(expr), 函数op 的主要功能是,其命令格式为:op(expr); #获取表达式的操作数op(i, expr); #取出expr ⾥第i 个操作数, op(i .. j, expr); #expr 的第i 到第j 个操作数 nops(expr); #返回操作数的个数> expr:=6+cos(x)+sin(x)*cos(x)^2;:= expr + + 6()cos x ()sin x ()cos x 2> op(expr);,,6()cos x ()sin x ()cos x 2> nops(expr);32.2.3 Maple 中的常量与变量名为了解决数学问题, ⼀些常⽤的数学常数是必要的. Maple 系统中已经存储了⼀些数学常数在表达式序列constants 中: > constants;,,,,,,false γ∞true Catalan FAIL π为了⽅便使⽤, 现将上述常数的具体含义列⽰如下:2.2.4 函数类型转换实现函数类型转换的命令是convert . 命令格式:convert(expr, form); #把数学式expr 转换成form 的形式convert(expr, form, x); #指定变量x, 此时form 只适于exp 、sin 、cos convert 指令所提供的三⾓函数、指数与函数的转换共有exp 等7种: (1) exp : 将三⾓函数转换成指数(2) expln : 把数学式转换成指数与对数(3) expsincos : 分别把三⾓函数与双曲函数转换成sin 、cos 与指数的形式 (4) ln : 将反三⾓函数转换成对数(5) sincos : 将三⾓函数转换成sin 与cos 的形式, ⽽把双曲函数转换成sinh 与cosh 的形式 (6) tan : 将三⾓函数转换成tan 的形式(7) trig : 将指数函数转换成三⾓函数与对数函数 > convert(sinh(x),exp); #将sinh(x)转换成exp 类型- 1e x 11ex 2.2.5 函数的映射—map 指令在符号运算的世界⾥, 映射指令map 可以说是相当重要的⼀个指令, 它可以把函数或指令映射到这些结构⾥的元素, ⽽不破坏整个结构的完整性. 命令格式为:map(f, expr); #将函数f 映射到expr 的每个操作数map(f, expr, a); #将函数f 映射到expr 的每个操作数, 并取出a 为f 的第2个⾃变量map(f, expr, a1, a2,…, an); #将函数f 映射到expr 的每个操作数, 并取a1~an 为f 的第2~n+1个⾃变量 map2(f, a1, expr, a2, …, an); #以a1为第1个⾃变量, expr 的操作数为第2个⾃变量, a2为第3个⾃变量…, an 为第n+1个⾃变量来映射函数f> f:=x->sqrt(x)+x^2;:= f → x + x x 2> map(f,[a,b,c]);[],, + a a 2 + b b 2 + c c 2> map(h, [a,b,c],x,y);[],,()h ,,a x y ()h ,,b x y ()h ,,c x y3 求值3.1 赋值在Maple 中, 不需要申明变量的类型, 甚⾄在使⽤变量前不需要将它赋值, 这是Maple 与其它⾼级程序设计语⾔不同的⼀点, 也正是Maple 符号演算的魅⼒所在, 这个特性是由Maple 与众不同的赋值⽅法决定的. 为了理解其赋值机制, 先看下⾯的例⼦. >p:=9*x^3-37*x^2+47*x-19;:= p - + - 9x 337x 247x 19> roots(p);,[],12,1991> subs(x=19/9,p);3.2 变量代换subs ( var = repacedment , expression );调⽤的结果是将表达式expression 中所有变量var 出现的地⽅替换成 replacement. > f:=x^2+exp(x^3)-8;:= f + - x 2e()x 38> subs(x=1,f);- + 7e如果需要计算, 必须调⽤求值函数evalf . 如: > evalf(%);5.> subs(x=y,y=z,x^2*y); (顺序替换)z 3> subs({x=y,y=z},x^2*y); (同步替换)y 2z> subs((a=b,b=c,c=a),a+2*b+3*c); (顺序替换)6a> subs({a=b,b=c,c=a},a+2*b+3*c); (轮换)+ + b 2c 3a> subs({p=q,q=p},f(p,q)); (互换)()f ,q p3.3 求值规则1) 对表达式求值命令格式: eval(e, x=a); #求表达式e 在x=a 处的值 eval(e, eqns); #对⽅程或⽅程组eqns 求值 eval(e); #表达式e 求值到上⾯两层 eval(x,n); #给出求值名称的第n 层求值 > p:=x^5+x^4+x^3+x^2+x+73;:= p + + + + + x 5x 4x 3x 2x 73> eval(p,x=7);19680当表达式在异常点处求值时, eval 会给⼀个错误消息. 如下: > eval(sin(x)/x,x=0);Error, numeric exception: division by zero2) 在代数数(或者函数)域求值命令格式: evala(expr); # 对表达式或者未求值函数求值 evala(expr,opts); #求值时可加选项(opts)在Maple 中, 代数数⽤函数RootOf ()来表⽰. 如3作为⼀个代数数, 可以表⽰为:> alpha:=RootOf(x^2-3,x);:= α()RootOf - _Z 23> simplify(alpha^2);3在Maple 内部, 代数数α不再表⽰为根式, ⽽在化简时, 仅仅利⽤到32=α这样的事实. 这⾥, Maple ⽤到⼀个内部变量_Z. 再看下⾯⼀个例⼦,其中alias 是缩写的定义函数,⽽参数lenstra 指lenstra 椭圆曲线⽅法:> alias(alpha=RootOf(x^2-2)):> evala(factor(x^2-2,alpha),lenstra);() + x α() - x α> evala(quo(x^2-x+3,x-alpha,x,'r'));- + + 1αx> r;- + 3αα2> simplify(%);- 5α3) 在复数域上符号求值操纵复数型表达式并将其分离给出expr 的实部和虚部的函数为evalc, 命令格式为: evalc(expr);evalc 假定所有变量表⽰数值, 且实数变量的函数是实数类型. 其输出规范形式为: expr1+I*expr2. > evalc(sin(6+8*I));+ ()sin 6()cosh 8I ()cos 6()sinh 8> evalc(f(exp(alpha+x*I)));()f + e α()cos x I e α()sin x4) 使⽤浮点算法求值命令格式为: evalf(expr, n); > evalf(Pi,50);3.1415926535897932384626433832795028841971693993751> evalf(sin(3+4*I));- 3.853********.01681326I5) 对惰性函数求值把只⽤表达式表⽰⽽暂不求值的函数称为惰性函数,对任意代数表达式f 求值的命令格式为: value(f); > F:=Int(exp(x),x);:= F d ??e xx> value(%);e x> f:=Limit(sin(x)/x,x=0);:= f limsin x x> value(%);1另外, 将惰性函数的⼤写字母改为⼩写字母亦即可求值. 如下例: > Limit(sin(x)/x,x=0)=limit(sin(x)/x,x=0);= lim→ x 0()sin x 1 4 数据结构Maple 中有许多内建的与FORTRAN 、C 或Pascal 不同的数据结构. 主要的数据结构有序列(sequence)、列表(list)、集合(set)、代数数( algebraic number)、未求值或惰性函数调⽤、表(table)、级数(series)、串(string)、索引名(index)、关系(relation)、过程体(process)以及整数(integer)、分数(fraction)、浮点数(float)、复数(complex number)等数据结构, ⽽矩阵(matrix)在Maple 中表⽰为阵列, 是⼀种特殊的表.4.1 数据类型查询在Maple 中, ⽤whattype 指令来查询某个变量的数据类型或特定类型, 命令格式为: whattype(expr) # 查询expr 的数据类型type(expr, t) # 查询expr 是否为t 类型, 若是则返回true, 否则返回false4.2 序列, 列表和集合4.2.1 序列所谓序列(Sequence), 就是⼀组⽤逗号隔开的表达式列. 如: > s:=1,4,9,16,25;:= s ,,,,1491625> t:=sin,com,tan,cot;:= t ,,,sin com tan cot⼀个序列也可以由若⼲个序列复合⽽成, 如: > s:=1,(4,9,16),25;:= s ,,,,1491625> s,s;,,,,,,,,,14916251491625⽽符号NULL 表⽰⼀个空序列. 序列有很多⽤途, 如构成列表、集合等. 事实上, 有些函数命令也是由序列构成. 例如: > max(s); 25> min(s,0,s);函数seq 是最有⽤的⽣成序列的命令, 通常⽤于写出具有⼀定规律的序列的通项, 命令格式为: seq(f(i), i=m..n); # ⽣成序列f(m), f(m+1), …, f(n) (m,n 为任意有理数) seq(f(i), i=expr); # ⽣成⼀个f 映射expr 操作数的序列seq(f(op(i,expr)), i=1..nops(expr)); # ⽣成nops(expr)个元素组成的序列> seq(i^2,i=1..10);149162536496481100,,,,,,,,,> seq(i^3,i=x+y+z);获得⼀个序列中的特定元素选⽤操作符[ ], 如:> seq(ithprime(i),i=1..20);235711131719232931374143475359616771,,,,,,,,,,,,,,,,,,,> %[6],%[17];1359,4.2.2 列表列表(list), 就是把对象(元素)放在⼀起的⼀种数据结构, ⼀般地, ⽤⽅括号[ ]表⽰列表. 如下例: > l:=[x,1,1-z,x]; x1 -1z x,,,:=l[]> whattype(%);list4.2.3 集合集合(set)也是把对象(元素)放在⼀起的数据结构,⼀般地, ⽤花括号表⽰集合.> s:={x,1,1-z,x};1z1x -,,s{}:=> whattype(%);set空集定义为{ }.Maple中集合的基本运算有交(intersect)、并(union)、差(minus):> A:={seq(i^3,i=1..10)};B:={seq(i^2,i=1..10)};,,,,,,,,,1827641252163435127291000A{}:=149162536496481100,,,,,,,,,B{}:=> A intersect B;,164{}4.3 数组和表在Maple中, 数组(array)由命令array产⽣, 其下标变量(index)可以⾃由指定. 下标由1开始的⼀维数组称为向量(vector), ⼆维以上的数组称为矩阵(matrix). 数组的元素按顺序排列, 任意存取⼀数组的元素要⽐列表或序列快的多. 区分⼀个数据结构是数组还是列表要⽤“type”命令.表(table)在建⽴时使⽤圆括号, 变量能对⼀个表赋值, 但⼀个在存取在算⼦中的未赋值变量会被⾃动地假定是表, 表的索引可以成为任意Maple表达式. 表中元素的次序不是固定的.5 Maple ⾼级输⼊与输出操作⽣成LATEXMaple 可以把它的表达式转换成LATEX, 使⽤latex 命令即可: > latex(x^2+y^2=z^2);{x}^{2}+{y}^{2}={z}^{2}还可以将转换结果存为⼀个⽂件(LatexFile):> latex(x^2 + y^2 = z^2, LatexFile);再如下例:> latex(Int(1/(x^2+1),x)=int(1/(x^2+1),x));\int \! \left( {x}^{2}+1 \right) ^{-1}{dx}=\arctan\left( x \right)⼆微积分运算1 函数的极限和连续1.1 函数和表达式的极限)(lim x f ax →命令格式为: limit(f,x=a);求)(lim x f a x +→时的命令格式为limit(f, x=a, right); 求)(lim x f ax -→时的命令格式为limit(f, x=a, left); 请看下述例⼦:> Limit((1+1/x)^x,x=infinity)=limit((1+1/x)^x,x=infinity);= lim → x ∞?? ?+ 11x xe > Limit((x^n-1)/(x-1),x=1)=limit((x^n-1)/(x-1),x=1);= lim → x 1 - x n 1 - x 1n > Limit(x^x,x=0,right)=limit(x^x,x=0,right);= lim → +> limit(a*x*y-b/(x*y),{x=1,y=1});- a b> limit(x^2*(1+x)-y^2*((1-y))/(x^2+y^2),{x=0,y=0});undefined下例就是化⼆重极限为⼆次极限⽽得正确结果:> limit((sin(x+y)/(sin(x)*sin(y)),{x=Pi/4,y=Pi/4}));limit ,()sin + x y ()sin x ()sin y {}, = x 14π = y 14π > limit(limit(sin(x+y)/(sin(x)*sin(y)),x=Pi/4),y=Pi/4);21.2 函数的连续性1.2.1 连续在Maple 中可以⽤函数iscont 来判断⼀个函数或者表达式在区间上的连续性. 命令格式为: iscont(expr, x=a..b, 'colsed'/'opened');其中, closed 表⽰闭区间, ⽽opened 表⽰开区间(此为系统默认状态).如果表达式在区间上连续, iscont 返回true, 否则返回false, 当iscont ⽆法确定连续性时返回FAIL. 另外, iscont 函数假定表达式中的所有符号都是实数型. 颇为有趣的是, 当给定区间[a,b ] (a >b )时, iscont 会⾃动按[b,a ]处理.> iscont(1/x,x=1..2);true> iscont(1/x,x=-1..1,closed);false> iscont(1/(x+a),x=0..1);FAIL> iscont(ln(x),x=10..1);true1.2.2 间断函数discont 可以寻找函数或表达式在实数域的间断点, 当间断点周期或成对出现时, Maple 会利⽤⼀些辅助变量予以表达, ⽐如, _Zn ~(任意整数)、_NZn ~(任意⾃然数)和Bn ~(⼀个⼆进制数, 0或者1), 其中n 是序号. 判定f(x)间断点的命令为:discont(f, x);> discont(ln(x^2-4),x);{},-22> discont(arctan(1/2*tan(2*x))/(x^2-1),x);{},,-11 + 12π_Z1~14π> discont(round(3*x-1/2),x);3_Z1 函数round 为“四舍五⼊”函数,上例并⾮⼀⽬了然,对其进⼀步理解可借助于函数plot 或下⾯给出的fdiscont 例⼦。
O O O O (1.7)(1.3)(1.2)O (1.13)(1.9)(1.14)(1.15)(1.1)O O O (1.8)(1.5)(1.12)(1.10)O O O O O O (1.6)(1.11)(1.4)O 第1章 Maple的基本量1.1数值类型whattype 0integerwhattype12fractionwhattype 0.floatconstants;false ,γ,N ,true ,Catalan ,FAIL ,πwhattype falsesymbolwhattype infinityextended_numericwhattype πsymbolwhattype undefinedextended_numericwhattype arcsin 1`*`whattype sqrt 2`^`whattype ln 2functionwhattype Icomplex extended_numericwhattype "ustc"stringwhattype 'ustc 'symbolwhattype ustcsymbolO (2.1)O (1.16)O (2.3)O (1.19)O O (2.2)O O O (1.21)O (1.20)O O (1.18)O O O (1.22)(1.17)类型转化convert 65535,hexFFFFconvert FFFF ,decimal ,1665535convert FFFF ,decimal ,88775Why?evalf π3.141592654evalf 20π3.1415926535897932385floor π,round π,ceil π3,3,4convert evalf π,string"3.141592654"1.2赋值x d 1x :=1y ,z d 2,3y ,z :=2,3z3y ,z d 2,3Error, illegal use of an object as a namey ,z d 2,3清除unassign xError, (in unassign) cannot unassign `1' (argument must be assignable)unassign "x"Error, (in unassign) cannot unassign `x' (argument must be assignable)unassign 'x 'x d 1; x d 'x ';x(2.8)(2.11)O O(2.9)(2.12)O O O (2.13)O (2.4)(2.7)(2.6)O O (2.10)O O (2.5)x :=1x :=x x替换x ,y d sqrt 2,sqrt 3x ,y :=2,3subs x =a ,y =b ,x y13a b Why?subs x =y ,y =x ,x y1Why?unassign 'x ','y 'subs x =a ,y =b ,x ya bsubs x =y 2,y =x 2,x yx 2subs y =x 2,x =y 2,x y1y2algsubs x C x 2=y ,1C x4x C 14algsubs x C x 2=y ,1C 2 x C x 221C 2 x C x 22algsubs x C x 2=y ,1C 4 x C 6 x 2C 4 x 3C x 41C 3 y C y 2C 1C 2 y x1.3定义O OO O O (3.5)(4.2)O O (4.3)(3.2)O O (3.1)(3.4)(4.4)O (3.7)(4.1)(3.3)O O (4.5)(3.6)O (3.8)a ,b ,cd 1,2,3a ,b ,c :=1,2,3f d x /a x 2C b x C c f :=x /a x 2C b x C cg d x ,y /x yg :=x ,y /x y注意:此处(x,y)的括号不可省。
调用f 'x 'x 2C 2 x g 'x ','y 'x yunassign 'f ','x ','y ','z ';map f ,x 1,x 2,x 3,x 4f x 1,f x 2,f x 3,f x 4map2f ,x ,y 1,y 2,y 3,y 4;f x ,y 1,f x ,y 2,f x ,y 3,f x ,y 4map 3f ,x ,y ,z 1,z 2,z 3,z 4f x ,y ,z 1,f x ,y ,z 2,f x ,y ,z 3,f x ,y ,z 41.4序列a d 1,2,3;b d 4,5,6;cd s1,s2;a :=1,2,3b :=4,5,6c :=1,2,3,4,5,6whattype cexprseqc 22c K 25seq c i ,i =3..5(4.12)(4.10)O O O O O (4.13)(4.14)O (4.18)O (420)(4.17)(4.15)O O (4.7)O (4.6)O (4.19)O (4.16)O (4.5)O (4.9)O (4.8)O (4.11)3,4,51$31,1,11,2$3Error, invalid input: `$` expects 1 or 2 arguments, but received 3列表a d 1,2,3;b d 4,5,6;cd a ,b ;a :=1,2,3b :=4,5,6c :=1,2,3,4,5,6whattype clistnops a ,nops c3,2c K 14,5,6c 1..2,K 13,6c K 1,K 16a $x Cb $y1,2,3 x C 4,5,6 y集合a d 1,2,1;b d 4,5,4;cd a ,b ;a :=1,2b :=4,5c :=1,2,4,5whattype csetnops a ,nops c2,2c K 14,5c 1..2,K12,5c K1,K 15a $x Cb $yO O (4.26)(5.1)(4.25)O (4.24)(4.20)O O (4.22)O O (4.21)(5.2)(4.28)(4.27)O O O (4.23)O 1,2 x C 4,5 ya union b1,2,4,5convert c ,list1,2,4,5convert1,2,3,4,5,6,set1,2,3,4,5,6向量和矩阵a d 1,2,3;whattype aa :=123Vector columna d 123;whattype aa :=123Vector rowa d12,34;whattype aa :=1234Matrixconvert a ,listError, (in convert/list) cannot convert rtable with more than one dimension having range greater than 0; try convert(A,listlist)convert a ,listlist1,2,3,4convert a ,set1,2,3,41.5a d sqrt 2C ln 3;evalf aa :=2C ln 32.512825851evalb 2! a !32!2C ln 3and2C ln 3!3(5.9)(5.8)O (5.10)(5.6)O (5.3)(5.5)O O O (5.4)O O O (5.7)evalb 2! evalf a !3truenops a ,op 0,a , op 1,a ,op 2,a2,`C `,2,ln 3expr d a xexpr :=2C ln 3xnops expr ,op 0,expr ,op 1,expr ,op 2,expr2,`^`,2C ln 3,xsubsop 1='a ',expra xa d 'a ';b d 1;a :=ab :=1eval a C 1,b =22 a C 4subs b =2,a C 12 a C 4Why ? 慎用eval()和subs()!。