.
Maple基础
一Maple的基本运算
1 数值计算问题
在应用Maple做算术运算时, 只需将Maple当作一个“计算器”使用, 所不同的是命令结束时需加“;”或“:”.
在Maple中, 主要的算术运算符有“+”(加)、“–”(减)、“*”(乘)、“/”(除)以及“^”(乘方或幂,或记为**),值得注意的是, “^”的表达式只能有两个操作数, 换言之, a^b^c是错误的, 而“+”或“*”的任意表达式可以有两个或者两个以上的操作数. 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);
true
3) 确定第i个素数(ithprime)
Word 资料
.
若记第1个素数为2,判断第i个素数的命令格式: ithprime(i);
4) 一组数的最大值(max)/最小值(min)
命令格式: max(x1,x2,…,xn); #求x1,x2,…,xn中的最大值 min(x1,x2,…,xn); #求x1,x2,…,xn中的最小值
5)随机数生成器(rand) 命令格式:
rand( ); #随机返回一个12位数字的非负整数
rand(a..b); #调用rand(a..b)返回一个程序, 它在调用时生成一个在范围[a, b]内的随机数 > rand();
427419669081
> myproc:=rand(1..2002):
> myproc(); > myproc();
19161204
注意, 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);
complex_number := -5???10I
> Re(%);Im(%%);conjugate(%%%);argument(complex_number);
-5 10 -5???10I ?arctan(2)????
1) 绝对值函数
命令格式: abs(expr);
当expr为实数时,返回其绝对值,当expr为复数时,返回复数的模. 2)复数的幅角函数
命令格式: argument(x); #返回复数x的幅角的主值 3)共轭复数
命令格式: conjugate(x); #返回x的共轭复数
Word 资料
.
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); #计算k关于1..10的连乘
213168189440000
> product(k^2,k); #计算k的不确定乘积
2?(k)2
> product(a[k],k=0..5); #计算ai(i=0..5)的连乘
a0a1a2a3a4a5
> Product(n+k,k=0..m)=product(n+k,k=0..m); #计算(n+k)的连乘, 并写出其惰性表达式
mk???03?(n???k)????(n???m???1)
?(n)> product(k,k=RootOf(x^3-2)); #计算x?2的三个根的乘积
2
2)指数函数
计算指数函数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);
1111232 k???(n???1)???(n???1)???n????3266k???1> Sum(1/k!,k=0..infinity)=sum(1/k!,k=0..infinity);
n Word 资料
.
k???0??1???e k!> sum(a[k]*x[k],k=0..n);
k???0?nakxk
> sum(k/(k+1),k=RootOf(x^2-3));
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(?)???0
4)反三角函数/反双曲函数
命令格式: 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(1???2)
> cos(arcsin(x));
1???x2
5)对数函数
命令格式: ln(x); #自然对数
log[a](x); #一般对数 log10(x); #常用对数
一般地, 在ln(x)中要求x>0. 但对于复数型表达式x, 有:
ln(x)?ln(abs(x))?I*argument(x) (其中, ???argument(x)??)
> log10(1000000);
ln(1000000)
ln(10)> simplify(%); #化简上式
6
2.2.2 函数的定义
试看下面一个例子:
Word 资料
.
> f(x):=a*x^2+b*x+c;---并不是函数,而是一个表达式
f(x) := ax2???bx???c
> f(x),f(0),f(1/a);
1?ax2???bx???c,f(0),f???a?? ??由上述结果可以看出, 用赋值方法定义的f(x)是一个表达式而不是一个函数
在Maple中, 要真正完成一个函数的定义, 需要用算子(也称箭头操作符): > f:=x->a*x^2+b*x+c;
f := x???ax2???bx???c
> f(x),f(0),f(1/a);
ax2???bx???c,c,> f:=(x,y)->x^2+y^2;
1b??????c aaf := (x,y)???x2???y2
> f(1,2);
5
> f:=(x,y)->a*x*y*exp(x^2+y^2);
f := (x,y)???axye22(x???y)
另一个定义函数的命令是unapply,其作用是从一个表达式建立一个算子或函数. 命令格式为: f:=unapply(expr, x); 命令格式为: f:=unapply(expr, x, y, …); > f:=unapply(x^4+x^3+x^2+x+1,x);
f := x???x4???x3???x2???x???1
借助函数piecewise可以生成简单分段函数: > abs(x)=piecewise(x>0,x,x=0,0,x<0,-x);
?x?x?????0????x?清除函数的定义用命令unassign.
0???xx???0 x???0 Word 资料