跳转到内容

枫叶/入门

来自维基教科书,开放世界中的开放书籍

第一章:枫叶入门

[编辑 | 编辑源代码]

开始之前

[编辑 | 编辑源代码]

所有输入给枫叶的命令都在标记为 > 的区域中。
这些是输入区域。
按回车键执行命令。

> 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));


printlprintprintf命令用于显示数学表达式。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);

注意 diffD 之间的区别: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);

注意 Intint 命令之间的区别。前者是惰性形式,它只显示积分。后者是活动形式,并计算其值。

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]

您还可以分别使用 sumlimitproduct 函数找到和、极限和积的数值和符号值

> 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);

命令 SumProduct 是惰性的,它们实际上并不计算求和或乘积。

用 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]);
华夏公益教科书