跳轉到內容

楓葉/入門

來自華夏公益教科書

第一章:楓葉入門

[編輯 | 編輯原始碼]

開始之前

[編輯 | 編輯原始碼]

所有輸入給楓葉的命令都在標記為 > 的區域中。
這些是輸入區域。
按回車鍵執行命令。

> 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]);
華夏公益教科書