枫叶/入门
所有输入给枫叶的命令都在标记为 > 的区域中。
这些是输入区域。
按回车键执行命令。
> sample code;
代码行必须以分号或冒号结尾。注意它们之间的区别
> p - ln( p );
> p - ln (p ):
如果代码行以分号结尾,则验证顺序并软件在输出区域显示答案。如果代码行以冒号结尾,则验证顺序,但答案不显示。
> (1-1/7)*(1+2/3)^2;
> (25)^(1/2);
> factorial(15);
> 15!;
> sqrt(81);
> sqrt(56.81);
> %^2;
与任何其他编程语言一样,枫叶允许我们将值分配给命名变量。这通常使程序更具可读性,并且它允许我们保存结果以供以后在计算中使用。在这里,2.14 被分配给变量 p。然后我们可以计算 使 p 评估(替换为)2.14
> p:=2.14;
> p - ln(p);
您也可以在单个表达式中使用多个变量
> x := 2*a-p;
> x-sqrt(a*p);
> expr := a*x^2 + b*x + c = 0;
枫叶拥有广泛的命令来帮助您操作表达式
> f := (a+b)^6;
> expand(f);
> factor(%);
> %%;
> sin(x)^2+cos(x)^2;
> simplify(%);
这里,%符号表示 Maple 最后一次计算的结果。%%表示倒数第二次计算的结果。%%%表示倒数第三次计算的结果。如果你想查看更早的计算结果,需要将它们分配给变量。
你也可以使用subs命令和带两个参数的eval命令来将表达式中的变量替换为值。
> subs( x=2, x^2+x+1 );
> eval( x^2+x+1,x=2 );
subs命令进行语法替换,
> subs( y=0, sin(y) );
而eval命令则进行替换后计算
> eval( sin(y), y=0 );
> eval(f, a=c);
> eval(f, [a=2, b=4/5]);
subs命令替换绑定(虚拟)变量,而eval命令不替换。
> subs(x=u,int(f(x),x=0..1) );
> eval(int(f(x),x=0..1),x=u );
eval命令进行同步替换,而subs命令则进行顺序替换。
> subs( x=y, y=x, [x,y] );
> eval([x,y], {x=y, y=x});
以下等价:
同步替换
> subs( [x=y, y=x], [x,y] );
> eval([x,y], {x=y, y=x});
以及
顺序替换
> subs( x=y, y=x, [x,y] );
> eval(eval([x,y], x=y), y=x);
evalf命令计算表达式的浮点数(数值)近似值。你也可以指定所需的精度。
> evalf(sqrt(3));
> evalf(sqrt(3), 50);
> evalf[50](sqrt(3));
print、lprint和printf命令用于显示数学表达式。print命令使用当前的漂亮打印方法显示表达式。lprint命令以 1D 格式(没有漂亮打印)显示表达式,就像在 Maple 中输入一样。printf命令与 C 或 C++ 语言中使用的相同,你可以在其中使用格式显示变量:%d 表示整数变量,%f 表示浮点数,\n 表示换行符。
> f:=a-3/a+1/(a*a+1);
> print(f);
> lprint(f);
a-3/a+1/(a^2+1)
> printf("%d %f \n",123,1234/567);
123 2.176367
使用 Maple 定义函数
[edit | edit source]定义函数的最简单形式是使用箭头(映射)运算符 ->
> f := t -> sin(t) - t;
> f(3*x + 2);
注意
> f := x->2*x+2;
定义 f 作为函数,即
> f(u);
> f(x):=2*x+2;
定义 f 作为带有“记忆表”的过程,该表仅针对参数 x:
> f(u);
以及
> f(x)=2*x+2;
是一个方程。
使用 Maple 进行微积分
[edit | edit source]可以使用 diff 命令对表达式进行求导
> diff(f(t), t);
可以将多个偏导数作为列表给出。要对 g 相对于 u 然后相对于 v 求导,可以使用以下命令
> diff(g(u,v,w), [u,v]);
Maple 也可以使用 D 运算符对函数进行求导
> D(f);
如果函数有多个变量,可以将变量指定为索引
> D[1](g);
注意 diff 和 D 之间的区别:diff 对表达式进行操作,并返回一个表达式,而 D 对函数进行操作,并返回另一个函数。
Maple 可用于查找表达式的原函数、不定积分或反导数。例如,要获得 f(t) 函数关于 t 的不定积分和 g(u,v,w) 函数关于 v 的不定积分,可以输入以下命令
> Int(f(t), t) = int(f(t), t);
> Int(g(u,v,w), v) = int(g(u,v,w), v);
注意 Int 和 int 命令之间的区别。前者是惰性形式,它只显示积分。后者是活动形式,并计算其值。
Maple 也可以计算定积分
> Int(f(t),t=0..Pi)=int(f(t),t=0..Pi);
要计算惰性积分,可以使用 value 命令
> value(Int(f(t), t));
惰性形式的另一个用途是对定积分进行数值逼近
> evalf(Int(f(t),t=0..Pi));
这应该与 evalf(int(f(t), t=0..Pi)) 给出相同的答案,但计算方式不同。当使用积分的惰性形式时,Maple 会使用定积分的定义来计算曲线下方区域的近似值。然后,当使用 int 形式时,将计算定积分的精确值,然后对该值进行数值逼近。使用惰性形式直接计算逼近值对于大型问题可能快得多。
使用 Maple 进行求极限、求和和求积
[edit | edit source]您还可以分别使用 sum、limit 和 product 函数找到和、极限和积的数值和符号值
> limit((2*t-3)/(3*t+4),t=infinity);
> limit((2*t-3)/(3*t+4),t=-4/3,right); #right-bound of the limit
> Sum(i^2,i=1..10)=sum(i^2,i=1..10);
> Product(1/i,i=1..10)=product(1/i,i=1..10);
命令 Sum 和 Product 是惰性的,它们实际上并不计算求和或乘积。
用 Maple 求解方程
[edit | edit source]函数 solve(eqn,x) 尝试在 eqn 中找到 x 的值。您还可以使用更多变量或更多方程,使用 solve({eqn1,eqn2,...},{x,y,...}):
> solve(2*t+3=-t+6*sqrt(2));
> solve(t-15/4*u=5/2*(u-t)+3,u);
> solve({a-b=2,a+3*b=7},{a,b});
有时,可能无法找到方程的精确解。然后您可以使用 fsolve() 获取数值近似值
> fsolve(cos(t)=t);
> fsolve({t^3+u=1,u-(t-1)^3=t},{t,u});
为解命名
[edit | edit source]解可以存储在一个变量中,就像任何其他表达式一样
> solution := solve({a-b = x, a+b = 1/x}, {a, b});
在示例中,变量 solution 被分配了值,然后可以在后续计算中使用。有时,值得将解的一部分保留在独立变量中。这可以通过适当的替换来完成。为了能够复制微积分的每一步,最好不要替换用于编写原始方程的变量 (a,b),而是创建新的名称,例如,solutiona" 和 "solutionb":
> solutiona := eval(a, solution)
> solutionb := eval(b, solution)
然后,可以通过一些图或未来的计算中的标识符访问这些表达式。
用 Maple 绘制函数
[edit | edit source]要绘制函数 f(x),请使用命令 plot(f(x),x)
> plot(sin(t)/t,t=-20..20,title="function t ---> sin t / t");
> plot3d(x*exp(-x^2-y^2),x=-2..2,y=-2..2,color=x,orientation=[120,75]);