Maple基础教程(修订稿)
- 格式:doc
- 大小:578.50 KB
- 文档页数:58
Part 3:命令和程序包西希安工程模拟软件(上海)有限公司,20083.0 介绍第三部分:命令和程序包,学习如何使用Maple的顶层命令和程序包中的命令,以及学习如何使用帮助系统。
为了获得更好的学习效果,请打开一个空白Maple文件。
按照表格左侧中的操作步骤描述,在表格右侧空白处完成操作。
3.1 使用命令和程序包Maple内置5,000多个计算命令,深度覆盖广泛的数学和编程主题。
在前面的两节教程中,你已经体验了一些Maple命令,包括 sin, taylor, int, exp, dsolve, solve, fsolve, rhs, 和 eval,并且你已经通过关联菜单使用了更多的命令。
Maple中的命令分为两类:主函数库(main library)和程序包(packages)。
主函数库包含最常用的Maple命令,也称为顶层(top-level)命令。
其他的命令,按照学科组成程序包,如微积分教育包,统计,微分几何,等。
例如,Optimization 程序包收集了数值求解优化问题的命令。
Maple命令一些常用的命令归类为顶层命令,如前面介绍的 sin, taylor, int, exp, dsolve, solve, fsolve, rhs, eval, factor, expand, simplfiy 等。
你可以随时使用顶层命令,更多信息,请参阅Maple的顶层命令列表 Index of Functions。
使用顶层命令:如果你希望交互式使用Maple命令,仅需要使用2-D数学输入命令。
注意,这些命令和变量名显示为斜体。
Maple命令的结构类似于 command(arguments),具体的命令名和调用格式取决于你使用的命令。
教程 6-Data Structures 包含更多使用这些命令的范例。
关于如何识别一个命令是否执行在内核中,参阅 type/builtin。
程序包Maple中一些常用的程序包有:参看完整的Maple程序包,参阅 Index of Packages.如何使用程序包中的命令,有两种调用格式:长格式和短格式。
Maple 基础一Maple 的基本运算1 数值计算问题在应用Maple 做算术运算时, 只需将Maple 当作一个“计算器”使用, 所不同的是命令结束时需加“;”或“:”.在Maple 中, 主要的算术运算符有“+”(加)、“–”(减)、“*”(乘)、“/”(除)以及“^”(乘方或幂,或记为**),值得注意的是, “^”的表达式只能有两个操作数, 换言之, c b a ^^是错误的, 而“+”或“*”的任意表达式可以有两个或者两个以上的操作数. 2.1.1 有理数运算作为一个符号代数系统, Maple 可以绝对避免算术运算的舍入误差.如果要求出两个整数运算的近似值时, 只需在任意一个整数后加“.”(或“.0”), 或者利用“evalf ”命令把表达式转换成浮点形式, 默认浮点数位是10 (即: Digits:=10, 据此可任意改变浮点数位, 如Digits:=20). > 9/1;;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); #求x1,x2,…,x n中的最大值min(x1,x2,…,xn); #求x1,x2,…,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--510Iarctan2π- +()1) 绝对值函数…命令格式: abs(expr);当expr为实数时,返回其绝对值,当expr为复数时,返回复数的模.2)复数的幅角函数命令格式: argument(x); #返回复数x的幅角的主值3)共轭复数命令格式: conjugate(x); #返回x的共轭复数初等数学<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));)33)三角函数/双曲函数命令格式: 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 2}5)对数函数命令格式: 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 1a由上述结果可以看出, 用赋值方法定义的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 类型-12e x 121e x2.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 求 值赋值在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);变量代换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 p,求值规则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 x}4) 使用浮点算法求值命令格式为: 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 lim→ x 0()sin x x> value(%);1[另外, 将惰性函数的大写字母改为小写字母亦即可求值. 如下例:> Limit(sin(x)/x,x=0)=limit(sin(x)/x,x=0);= lim→ x 0()sin x x1 4 数据结构Maple 中有许多内建的与FORTRAN 、C 或Pascal 不同的数据结构. 主要的数据结构有序列(sequence)、列表(list)、集合(set)、代数数( algebraic number)、未求值或惰性函数调用、表(table)、级数(series)、串(string)、索引名(index)、关系(relation)、过程体(process)以及整数(integer)、分数(fraction)、浮点数(float)、复数(complex number)等数据结构, 而矩阵(matrix)在Maple 中表示为阵列, 是一种特殊的表.数据类型查询在Maple 中, 用whattype 指令来查询某个变量的数据类型或特定类型, 命令格式为: whattype(expr) # 查询expr 的数据类型`type(expr, t) # 查询expr 是否为t 类型, 若是则返回true, 否则返回false序列, 列表和集合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);x3y3z3,,获得一个序列中的特定元素选用操作符[ ], 如:> seq(ithprime(i),i=1..20);235711131719232931374143475359616771,,,,,,,,,,,,,,,,,,,> %[6],%[17];1359,4.2.2 列表>列表(list), 就是把对象(元素)放在一起的一种数据结构, 一般地, 用方括号[ ]表示列表. 如下例:> l:=[x,1,1-z,x];1z xx1 -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)};1827641252163435127291000:=,,,,,,,,,A{},,,,,,,,,149162536496481100B{}:=`> A intersect B;,164{}数组和表在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 函数的极限和连续函数和表达式的极限)(lim x f ax →命令格式为: limit(f,x=a);求)(lim x f ax +→时的命令格式为limit(f, x=a, right); 求)(lim x f a x -→时的命令格式为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→ +x 0x x 1> 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}));⎛⎝ ⎫⎭⎪⎪lim it ,()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);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);true`1.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);' {} + 1313_Z1函数round 为“四舍五入”函数,上例并非一目了然,对其进一步理解可借助于函数plot 或下面给出的fdiscont 例子。
Maple 软件使用教程目录序言 0第一章Maple概述 (2)第二章基本命令 (4)第三章作图 (11)§3.1 .二维曲线图 (13)§3.2三维图形 (16)§3.3数据图 (17)实验一第四章微积分 (20)§4.1函数 (18)§4.2极限 (19)§4.3导数 (20)§4.4积分 (21)§4.5方程求解 (22)§4.6极值与最值 (23)§4.7微分方程与差分方程 (24)§4.8级数 (25)实验二第五章线性代数 (32)实验三第六章概率统计 (35)§6.1描述性数据分析discribe (28)§6.2拟合回归分析 (29)§6.3数据形式变换transform (30)§6.4按分布产生随机数random (30)§6.5分布的数据计算statevalf (31)§6.6统计绘图statplots (32)§6.7方差分析anova (32)第七章线性规划.................... ............................... .. (40)第八章程序语句 (41)实验四附录一 ..................................................................................................... .. (43)附录二...…...…………..……..……………………………………………. .43.第一章Maple概述Maple以其良好的使用环境、超强的符号计算、高精度的数值计算、方便的图形处理和简洁而高效的编程功能,越来越受到大家的喜爱和重视。
为了让同学们了解什么是Maple以及Maple能解决什么问题,我们先来介绍Maple的初步知识、基本功能及简单的历史发展。
maple 教程
Maple是一种数学建模和计算软件,用于进行高级数学运算和数据分析。
它被广泛应用于科学研究、工程设计和教育教学等领域。
在使用Maple进行数学建模时,我们首先需要了解变量的定义和使用。
可以使用等号将数值或表达式赋值给变量。
例如,我们可以使用以下语句定义一个变量x,并将其赋值为3:
x := 3;
接下来,我们可以使用已定义的变量进行数学计算。
Maple支持各种基本数学操作,如加减乘除和幂运算。
例如,我们可以使用以下语句计算x的平方:
x^2;
除了基本的数学运算,Maple还支持各种复杂的数学函数和操作。
例如,我们可以使用以下语句计算x的正弦值:
sin(x);
此外,Maple还提供了丰富的数学函数库,包括三角函数、对数函数、指数函数等等。
可以使用这些函数来进行更复杂的数学计算。
在进行数据分析时,Maple提供了强大的数据处理和可视化功能。
可以使用Maple的数据结构和函数来处理和分析数据,
并使用图表来可视化数据结果。
总之,Maple是一种功能强大的数学建模和计算软件,具有广泛的应用领域。
通过学习Maple的基本语法和功能,我们可以进行高级数学运算和数据分析,从而更好地理解和应用数学知识。
Maple基础和实践教程Maple基础和实践教程Maple是应用最为广泛的科学计算软件之一,具有非常强大的符号计算和数值计算功能。
Maple 提供智能界面求解复杂数学问题和创建技术文件,用户可在易于使用的智能文件环境中完成科学计算、建模仿真、可视化、程序设计、技术文件生成、报告演示等,从简单的数字计算到高度复杂的系统,满足各个层次用户的需要。
与传统工程软件不同,甚至有别于旧版本的Maple,新版本Maple 为工程师提供了大量的专业计算功能,庞大的数学求解器可用于各种工程领域,如微分方程、矩阵、各种变换包括FFT、统计、小波、等等,超过5,000个计算命令让用户通常只需要一个函数就可以完成复杂的分析任务。
本章主要介绍Maple的基本功能,包括:数值和符号计算计算、求解方程、微积分计算、向量及矩阵计算、微分方程求解等。
Maple是一个全面的系统,提供多种方式完成同一个任务。
在本章中,我们将通过简单、易于重复的方式求解常见的问题,但它不是唯一的操作方式。
当用户熟悉本章中的各种操作方式后,用户可以通过帮助系统了解如何使用相似的技术完成各种任务。
Maple环境Maple的用户界面是一个典型的Windows或Mac风格的操作环境。
工作环境界面如图2-1所示。
图2-1:Maple工作界面在图2-1的工作界面中,窗体的主要部分包括:●主文档,即主工作区。
事实上,用户大可以把它想象成包含有各种数学和绘图工具的Microsoft Word。
●面板区。
汇集了数学工具和特殊的数学符号,用户可以将它们直接拖拽到工作区中使用。
面板区中最重要的面板当属Expressions,Matrix,Common Symbols和Greek。
Maple提供了总共约30个面板,用户可以在面板区空白处单击鼠标右键,并单击Arrange Palettes 来进行选择。
●工具条。
Maple提供了两个主要的工具条。
默认状态下,标准工具条含有保存、缩放等通用按钮和一些Maple特定用途的按钮。
计算机代数系统第⼀章Maple基础(修订稿)第⼀章Maple基础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 MathNotation). Maple语⾔是⼀种结构良好、⽅便实⽤的内建⾼级语⾔, 它的语法和Pascal或C有⼀定程度的相似, 但有很⼤差别. 它⽀持多种数据操作命令, 如函数、序列、集合、列表、数组、表, 还包含许多数据操作命令, 如类型检验、选择、组合等. 标准数学记法就是我们常⽤的数学语⾔.启动Maple, 会出现新建⽂档中的“[>”提⽰符, 这是Maple中可执⾏块的标志, 在“>”后即可输⼊命令, 结束⽤“;”(显⽰输出结果)或者“:”(不显⽰输出结果). 但是, 值得注意的是, 并不是说Maple的每⼀⾏只能执⾏⼀句命令, ⽽是在⼀个完整的可执⾏块中健⼊回车之后, Maple 会执⾏当前执⾏块中所有命令(可以是若⼲条命令或者是⼀段程序). 如果要输⼊的命令很长, 不能在⼀⾏输完, 可以换⾏输⼊, 此时换⾏命令⽤“shift+Enter”组合键, ⽽在最后⼀⾏加⼊结束标志“;”或“:”, 也可在⾮末⾏尾加符号“\”完成.Maple 7有4种输出⽅式: Maple语⾔、格式化⽂本(Character Notation)、固定格式记法(Typeset Notation)、标准数学记法(Standard Math Notation). 通常采⽤标准数学记法.Maple会认识⼀些输⼊的变量名称, 如希腊字母等. 为了使⽤⽅便, 现将希腊字母表罗列如下,输⼊时只需录⼊相应的英⽂,要输⼊⼤写希腊字母, 只需把英⽂⾸字母⼤写:有时候为了美观或特殊需要,可以采⽤Maple中的函数或程序设计⽅式控制其输出⽅式,如下例:> for i to 10 doprintf("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 andi^(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 andi^(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 doprintf("i=%+2d and i^(1/2)=%+6.3f\n", 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再看下例:将输⼊的两个数字⽤特殊形式打印:> niceP:=proc(x,y)printf("value of x=%6.4f, value of y=%6.4f",x,y);end proc;:= niceP proc ()end proc ,x y ()printf ,,"value of x=%6.4f , value of y=%6.4f "x y> 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 的完整帮助信息. ⼀般帮助信息都有实例, 我们可以将实例中的命令部分拷贝到作业⾯进⾏计算、演⽰, 由此可了解该命令的作⽤.2 Maple 的基本运算2.1 数值计算问题算术是数学中最古⽼、最基础和最初等的⼀个分⽀, 它研究数的性质及其运算, 主要包括⾃然数、分数、⼩数的性质以及他们的加、减、乘、除四则运算. 在应⽤Maple 做算术运算时, 只需将Maple 当作⼀个“计算器”使⽤, 所不同的是命令结束时需加“;”或“:”.在Maple 中, 主要的算术运算符有“+”(加)、“–”(减)、“*”(乘)、“/”(除)以及“^”(乘⽅或幂,或记为**), 算术运算符与数字或字母⼀起组成任意表达式, 但其中“+”、“*”是最基本的运算, 其余运算均可归诸于求和或乘积形式. 算述表达式运算的次序为: 从左到右, 圆括号最先, 幂运算优先, 其次是乘除,最后是加减. 值得注意的是, “^”的表达式只能有两个操作数, 换⾔之, c b a ^^是错误的, ⽽“+”或“*”的任意表达式可以有两个或者两个以上的操作数.Maple 有能⼒精确计算任意位的整数、有理数或者实数、复数的四则运算, 以及模算术、硬件浮点数和任意精度的浮点数甚⾄于矩阵的计算等等. 总之, Maple 可以进⾏任意数值计算.但是, 任何软件或程序毕竟只是⼈们进⾏科学研究的⼀种必要的辅助, 即便它有很多优点, 但也有它的局限性, 为了客观地认识数学软件、认识Maple, 下⾯通过两个简单例⼦予以说明.第⼀个简单的数值计算实例想说明Maple 数值计算的答案的正确性:> 3; 26012189435657951002049032270810436111915218750169457857275418378508356311569473822406785779581304570826199205758922472595366415651620520158737919845877408325291052446上述运算结果在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 , 即:0)42)(42)(2)(2()8)(8(2233=+++--+=-+x 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;1197504873125> 123456789/987654321;13717421> evalf(%); .1249999989> 10!; 100*100+1000+10+1; (100+100)*100-9;36288001101119991> big_number:=3^(3^3);:= big_number 7625597484987> length(%);13上述实验中使⽤了⼀个变量“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 的商数, 并将余数赋给r83> q; #显⽰q19> iquo(2002,101,'r'); # 求2002除以101的商, 将余数赋给r19> r; #显⽰r83> irem(x,3);()irem ,x 32)素数判别(isprime)素数判别⼀直是初等数论的⼀个难点, 也是整数分解问题的基础. Maple 提供的isprime 命令可以判定⼀个整数n 是否为素数. 命令格式: isprime(n);如果判定n 可分解, 则返回false, 如果返回true, 则n “很可能”是素数.> isprime(2^(2^4)+1);true> isprime(2^(2^5)+1);false上述两个例⼦是⼀个有趣的数论难题。
实验一 MAPLE 基础、向量代数与行列式一、实验目的1、了解MAPLE 的基础知识,熟悉并掌握Maple 的界面以及操作方法。
2、熟习并掌握Maple 的初等代数运算、处理表达式以及三角函数运算。
二、实验内容在MAPLE 上求解下题: 1、12×266;2、sin15°+cos15°;3、设a =1+2i ,b =3-4i ,分别计算a +b 、a -b 、a ×b 以及a 的模长和幅角。
484-的值;5、求解1/2,1/3,….,1/100的和与积;6、求解11(13)x∞+∑>> >>>>>>三、实验原理1、Maple基础(1)常用符号说明(2)变量命名规则变量名由字母、数字和下划线组成,其中第一个字符必须是字母或下划线,长度限制是499个字符。
在Maple中要区分字母的大小写,一些保留字不可被用作变量名,如by、do、done、elif、fi、if、for、from、in、local、od、option、options、proc、quit、read、save、stop、then、to、while、D以及Maple中的内部函数等均不能被用作变量名而赋予新的意义。
(3(3)Maple中的数学常数2、初等代数运算基本运算符(1)实数运算eval()系列函数eval()系列函数用来获得一个确定的数值,它包括eval、evala、evalb、evalc、evalf、evalhf、evalm、evalr等。
sum()和product()函数也可写成Sum()和Product(),区别在于前者直接计算出数值,后者用公式显示结果。
(2)复数运算复数是Maple中的基本数据类型,虚数单位在Maple中用I表示,所有的算术运算符均复数可以通过convert函数转换为极坐标形式。
3、处理表达式(1(2)表达式的形式变换convert函数可以对表达式进行变换,如坐标变换、拉普拉斯变换(Laplace)、贝赛尔变换(Bessel)、傅立叶变换(Fourier)、矩阵变换等。
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)的括号不可省。
Maple教程Maple是一款强大的数学软件,它被广泛用于科学研究、工程设计、教育等领域。
本教程将为你介绍Maple的基本使用方法和一些常用功能,帮助你快速上手和利用Maple解决数学问题。
一、Maple的安装与启动1. 安装MapleMaple的安装非常简单,你只需要从官方网站下载Maple 的安装程序,然后按照提示进行安装即可。
2. 启动Maple安装完成后,你可以在桌面或开始菜单中找到Maple的启动图标,双击它即可启动Maple。
二、Maple的基本功能1. Maple的界面Maple的界面非常直观和友好,主要包括以下几个部分:•菜单栏:包含了各种功能和工具的菜单选项;•工具栏:提供了常用功能的快捷操作按钮;•输入框:可以输入和编辑Maple代码;•输出区:显示Maple执行代码的结果。
2. Maple的基本操作在Maple中,你可以通过输入和执行代码来完成各种数学运算和数据处理。
下面是一些常用的基本操作方法:•输入代码:在输入框中输入Maple代码,然后按下回车键执行;•注释代码:使用#符号可以在代码中添加注释,注释的内容将被忽略;•查看帮助:通过菜单栏的帮助选项或使用?键,可以查看Maple的帮助文档和函数说明。
3. Maple的数学计算Maple支持各种数学计算,包括基本运算、符号计算、数值计算等。
下面是一些常用的数学计算方法:•基本运算:Maple可以进行各种基本运算,如加减乘除、幂运算、取余等;•符号计算:Maple可以处理符号表达式,进行符号计算、方程求解、微分积分等;•数值计算:Maple可以进行数值计算,如数值积分、方程数值求解、函数拟合等。
三、Maple的扩展功能除了基本功能外,Maple还提供了许多强大的扩展功能,帮助用户进行更复杂的数学运算和数据处理。
1. 绘图功能Maple具有强大的绘图功能,可以绘制各种类型的图形,如曲线图、散点图、三维图等。
你可以使用Maple提供的绘图函数来创建自定义的图形,并对图形进行样式设置。
maple教程1. 介绍Maple:Maple是一款广泛应用于数学、科学和工程领域的计算软件。
它可以进行数值计算、符号计算、可视化和建模等功能,被广泛用于教育、研究和工程设计等领域。
2. 安装Maple:首先,下载Maple的安装文件并运行。
按照安装向导的指示完成安装过程。
安装完成后,可以打开Maple并开始使用。
3. Maple基础:Maple中的基本对象是表达式(expression)。
可以输入表达式并进行计算,也可以定义变量、函数和方程等。
Maple的语法与一般数学符号相似,所以非常易于学习和使用。
4. 数值计算:Maple可以进行各种数值计算,例如求解方程、数值积分、数值微分等。
可以使用内置的函数或编写自定义的函数来实现不同的数值计算任务。
使用数值计算可以快速得到数学问题的近似解。
5. 符号计算:Maple的强大之处在于符号计算。
可以进行代数运算、求解方程、化简表达式等。
Maple能够处理复杂的代数表达式,并给出精确的结果。
对于数学研究、理论推导和数学建模等领域非常有用。
6. 绘图功能:Maple提供了丰富的绘图功能,可以创建二维和三维图形来可视化数学和科学问题。
可以绘制函数图像、数据图表、散点图、曲线图等。
通过调整参数,可以自定义图形的外观和样式。
7. 建模与仿真:Maple还提供了建模和仿真功能,可以通过输入方程或条件来建立模型,并进行仿真和分析。
可以用于工程设计、物理模拟、控制系统设计等领域。
Maple可以帮助用户更好地理解和解决实际问题。
8. 扩展功能:Maple具有丰富的扩展功能,可以使用包(package)来扩展Maple的功能。
可以通过安装和加载包来添加新的函数、命令和工具。
这些包可以提供额外的数学、统计、优化、图论等功能。
9. Maple应用领域:Maple广泛应用于数学教育、科学研究和工程设计等领域。
在教育方面,它可以帮助学生理解和掌握数学概念,同时也是教师教学和练习的重要工具。
Maple入门教程A11-程序设计基础A11: Maple 初级编程知识西希安工程模拟软件(上海)有限公司,2009 11.0 介绍在前面的教程中,大部分内容提供了交互式(点击式)方法解决问题,程序命令实际上是Maple编程语言的重要部分。
如果您看过关于老版本Maple的资料,或者咨询有多年Maple使用经验的用户,他们通常更多地将Maple视为一个数学语言。
Maple内置完整的程序语言,编写Maple程序实际上是非常简单的。
Maple系统中含有数以千计的内置函数,其中的大部分是用Maple语言编写的,用户浏览和修改它们,满足自己的需要,或者扩充它们来解决新的问题。
Maple内置了代码调试工具,方便程序的测试与修改。
当您熟悉基本编程后,您可以充分使用Maple内置的功能解决各种工程和科学问题,甚至可以使用Maple开发完成的应用程序。
Maple的系统结构Maple 的系统结构采用模块化设计,让数学计算更快、更容易编程、能够适应各种不同的操作系统。
Maple系统最重要的三个部分:内核:Maple系统的“心脏”,只占系统的一小部分,是用C或C++语言编写的。
由于它们是编译的,速度非常快,因此所有Maple 底层操作或者任何需要速度最大化的计算通过内核实现。
此外,内核能够理解Maple程序语言,换句话说,内核是Maple程序语言的库函数:Maple系统的“大脑”,这部分比较庞大,是用Maple语言编写的。
Maple语言是面向数学的优化代码,吸收了其他一些语言(如Java和C)的技术特征,大大缩短了编程时间。
由于它是一种解释性语言(而不是编译),更容易编写“快速和随性”的程序,以及调试程序。
用户可以在Maple系统中编程,扩充预置的库程序。
用户界面:Maple系统的“脸”,是用Java编写的,方便图形化互动。
在最近的几个版本中(Maple 10以后版本),用户可以通过简单的编程自定义用户界面。
(1.3.2)(1.3.1)事实上,Maple中的大部分数学知识来自于库函数,由Maple语言编写。
目录第二章MAPLE基础 (1)2.1与M APLE对话 (1)2.2使用命令和函数包 (18)2.3微积分 (23)2.4线性代数 (28)2.5微分方程 (35)2.6优化 (45)2.7动态系统 (53)2.8基础编程知识 (58)2.9M APLE使用中常犯的错误 (78)第二章Maple基础Maple是目前应用非常广泛的科学计算软件之一,具有非常强大的符号计算和数值计算功能。
Maple 提供智能界面求解复杂数学问题和创建技术文件,用户可在易于使用的智能文件环境中完成科学计算、建模仿真、可视化、程序设计、技术文件生成、报告演示等,从简单的数字计算到高度复杂的系统,满足各个层次用户的需要。
与传统工程软件不同,甚至有别于旧版本的Maple,新版本Maple为工程师提供了大量的专业计算功能,庞大的数学求解器可用于各种工程领域,如微分方程、矩阵、各种变换包括FFT、统计、小波、等等,超过5000个计算命令让用户通常只需要一个函数就可以完成复杂的分析任务。
本章主要介绍Maple的基本功能,包括:数值和符号计算计算、求解方程、微积分计算、向量及矩阵计算、微分方程求解等。
Maple是一个全面的系统,提供多种方式完成同一个任务。
在本章中,我们将通过简单、易于重复的方式求解常见的问题,但它不是唯一的操作方式。
当用户熟悉本章中的各种操作方式后,用户可以通过帮助系统了解如何使用相似的技术完成各种任务。
2.1 与Maple对话2.1.1 Maple环境Maple的用户界面是一个典型的Windows或Mac风格的操作环境。
工作环境界面如图2-1所示。
图2-1:Maple工作界面在图2-1的工作界面中,窗体的主要部分包括:●主文档,即主工作区。
事实上,用户大可以把它想象成包含有各种数学和绘图工具的Microsoft Word。
●面板区。
汇集了数学工具和特殊的数学符号,用户可以将它们直接拖拽到工作区中使用。
面板区中最重要的面板当属Expressions,Matrix,Common Symbols和Greek。
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 的余数, 并将商赋给qiquo(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); #求x1,x2,…,x n中的最大值min(x1,x2,…,xn); #求x1,x2,…,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 0n a k x k> sum(k/(k+1),k=RootOf(x^2-3));33)三角函数/双曲函数命令格式: 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 1a 由上述结果可以看出, 用赋值方法定义的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 b ac > 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;sin x()cos x2cos x()6():=expr + +> op(expr);sin x()cos x26()cos x(),,> 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、cosconvert指令所提供的三角函数、指数与函数的转换共有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 类型 - 12e x 121e x2.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 x x > value(%);e x> f:=Limit(sin(x)/x,x=0);:= f lim→ x 0()sin x x> value(%); 1另外, 将惰性函数的大写字母改为小写字母亦即可求值. 如下例:> Limit(sin(x)/x,x=0)=limit(sin(x)/x,x=0);= lim → x 0()sin x x1 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,,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);,,x 3y 3z 3获得一个序列中的特定元素选用操作符[ ], 如: > seq(ithprime(i),i=1..20);,,,,,,,,,,,,,,,,,,,235711131719232931374143475359616771> %[6],%[17];,13594.2.2 列表列表(list), 就是把对象(元素)放在一起的一种数据结构, 一般地, 用方括号[ ]表示列表. 如下例: > l:=[x,1,1-z,x];:= l [],,,x 1 - 1z x> whattype(%);list4.2.3 集合集合(set)也是把对象(元素)放在一起的数据结构,一般地, 用花括号表示集合. > s:={x,1,1-z,x};:= s {},,1x - 1z> whattype(%);set空集定义为{ }.Maple 中集合的基本运算有交(intersect)、并(union)、差(minus): > A:={seq(i^3,i=1..10)};B:={seq(i^2,i=1..10)};:= A {},,,,,,,,,1827641252163435127291000:= B {},,,,,,,,,149162536496481100> A intersect B;{},1644.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 ax +→时的命令格式为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→ +x 0x x 1> 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}));⎛⎝ ⎫⎭⎪⎪lim it ,()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);{} + 1313_Z1 函数round 为“四舍五入”函数,上例并非一目了然,对其进一步理解可借助于函数plot 或下面给出的fdiscont 例子。