Benjamin Chien

「創新」不是等人家告訴你,他需要什麼,而是你自已去發覺他需要什麼! 汽車大王亨利‧福特曾說過:“如果我當年去問顧客他們想要什麼,他們肯定會告訴我‘一匹更快的馬’”

關於我

我的相片
人生沒有什麼大道理!過就對了!

分類

Archives

簡單來說,就是實際操作maxima來解微積分題目,而題目大多來自課本(當然,大家用的課本不儘相同),利用這種方式,來加深同學學習的意願。這也是本站與其它maxima教學文章的最大不同,它們大多在基礎中提及大量的maxima函數,由於大多是單獨使用該函數,造成很難從中了解,該實際運用是在何處,也造成同學們的誤解,誤以為要將maxima學習到很深的境界,才有辦法運用在課程上,事實上,只要了解本站前面介紹的幾個基本maxima函數,你就可以進行微積分的解題了,而一些前面沒介紹,後面會用到的maxima函數,也會在第一次出現時,進行說明,所以同學現在應該清楚,本站採取的是step by step 的教學方式。

不過,我並不是說,了解那些函數沒有意義,事實上,有些函數在某些地方是不可或缺的,所以同學在後面遇到新的maxima函數,也要深入了解其用處及意義。

最後說明,maxima可以解出答案,但不會有所謂的「解題過程」 ,想偷雞的同學要失望了,我還是那句老話,不要只用maxima來學微積分,應該是讓maxima輔助你,在學習過程中更加順利。所以已經把書丟到垃圾桶的同學,趕快撿回來吧!

在數學領域中,圖形佔有很重要的地位,很多公式都是由圖形推導出來的。一般公式看起來艱澀難懂,如果能夠轉化成圖形,常能幫助理解,這是我學習數學以來的深刻體會。

maxima提供plot2d(2D繪圖)和plot3d(3D繪圖),兩種繪圖函數,另外,在最近的版本中,還新增了draw繪圖套件(一樣是draw2d和draw3d),不管是plot還是draw,通通都是採用Gnuplot當做繪圖程式,簡單來說,plot和draw是負責maxima和Gnuplot之間的溝通工作,真正負責繪圖的Gnuplot。Gnuplot在自由軟體界非常有名,本身就是可單獨運作的數學繪圖軟體,也有許多需要使用到函數繪圖功能的軟體,選用Gnuplot當做它的繪圖程式。

但是這種兩個不同設計的軟體,彼此間是很難做到很完美的搭配,Gnuplot是相當強大的繪圖程式,但以使用plot等方式,很難完全發揮它的功能,這一點同學要有所了解,plot不是負責繪圖的,它是負責把Maxima的數據轉換成Gnuplot看的懂的數據,然後Gnuplot再將它畫出來。

Gnuplot不用再另外安裝,因為在安裝Maxima的時後,就已經包含了Gnuplot,如果要單獨開啟Gnuplot,請到 (安裝目錄)\Maxima-版本號\bin\ 底下開啟 wgnuplot.exe。不過gnuplot的操作不是我們的重點,現在我們就來看看使用maxima操作gnuplot的方式:

  1. plot2d (expr, x_range, ..., options, ...)
  2. plot2d ([expr_1, ..., expr_n], ..., options, ...)
  3. plot2d ([expr_1, ..., expr_n], x_range,..., options, ...)

plot2d (expr, x_range, ..., options, ...) 

提醒一點,如果要回到Maxima繼續你的操作,請記得要將gnuplot視窗關閉,因為maxima會等到gnuplot關閉了才會執行動作,可是問題是,沒有關閉,一樣可以進行輸入,所以筆者常常忘了這一點,在maxima打的很開心,按了Shift + Enter,卻沒反應,這時才想到忘了關gnuplot了。關閉的方法很簡單,有沒有看到右上角的「紅色打叉」按鈕,給它按下去就對了。

說明:

plot2d(sin(x),[x,-5,5],[nticks,100])$

第一個參數是要繪製函數,本例是繪製sin()正弦波形,第二個參數是x軸的顯示寬度,如果覺得x軸太小或太大,無法完整表現圖形的重點,可以視需要更改,要注意的是指定的數值是由小到大,以本例來說,你不可以寫成 [x,5,-5] 。函數的第1個跟第2個參數都是必須的。其它的參數是可選的,例如你也可以設定y軸的高度,如果不設定,則由系統決定適當的值,還有本例中的[nticks,100]:ntics是函數的取樣值,簡單來說,就是控制圖形的精細度,數值愈大,取樣愈多,圖形也就更精細,預設值是30,但是如果設的太多,運算時間也就愈長,這點同學要注意。

plot2d ([expr_1, ..., expr_n], ..., options, ...) 

你也可以一次繪製多個函數,函數用[ ](中括弧)括起來,函數之間用, (逗號)區隔開。

maxima會自動為不同的函數配上不同的顏色。

此外,plot還提供許多選項設定,如nticks就是其中之一,不過不是每個選項都是需要在程式中指定。在Gnuplot視窗中左上角的圖案,點選它,出現功能表,如下圖所示:

 

你可以在「Options」中,設定Background(背景色)、Choose Font(字型)、Line Style(線型),雖然不多,但有需要的話,還是很方便。

另外,使用功能列上的「Plot」也是方便的操作方式,點選「Plot」—>「Plot 2d ...」:

接著跳出Plot 2D 設定視窗:

這種設定方式,讀者應該會比較喜歡吧,在功能列上的大部分指令,都搭配了這種視窗來讓用戶輸入。從這張圖中,同學自已從前面的教學,找出對應的選項出來。

繪圖預設上,都是跳出gnuplot來顯示函數,但也可以選擇,在工作區上顯示,在「Format」:的下拉功能表中,選取「inline」:如下圖所示。

按下「OK」。現在不再跳出gnuplot視窗,而是直接在工作區上顯示圖形,如下圖所示:

另外,在「Options」也有許多選項可供設定,讀者可以自行去測試(後面的作業會考)。

最後是「File」選項,你可以將繪製的函數圖儲存為eps圖片檔,可惜並沒有辦法選擇一般的jpg,gif檔。注意一點,如果你有設定輸入,那麼就不會在工作區上顯示圖形。

總結:

本章介紹的都是2D繪圖的方法,3D部分,筆者要留到後面,有搭配需要3D圖形的函數時,再來介紹。同學目前有需要可以試著參照Help的說明來操作3D。另外,本章沒有討論到draw,是因為它和plot大致上是相同的,差別在於程式書寫的方式不同,同學一樣參照help中的說明,來區分不同之處。

作業:

  1. 。繪製左圖四個函數圖形,使用inline方式。(40%)
  2. (☆)求出x 趨近於無限大時的極限值,再將函數繪製成下圖,圖形顯示需與下圖相近,如果差別很大,同學必須調整,下圖中的x,y座標值,因為跟答案有關,所以我塗掉了,解答中必須出現x,y座標值:(60%)

 

提示:本題有點困難,首先同學要知道,函數圖形要表達的是什麼。本題函數圖形,要表達的是,當x 趨近於無限大時的,函數值會趨近於某個值,用圖形來說明的話,就是說當「青色線(x值)」一直往右跑時(愈來愈大),線段會接近於「紅色線(函數值)」,但不會重合,只會愈來感接近。本題就是希望你表達出這種感覺。

在本題會用到沒教到的plot函數(畫紅色線段用的), [discrete,x,y] ,為了不為難同學,提示再清楚一點,本題中應該是輸入成這樣: [discrete,[x1,x2],[y1,y2]]

題目不想弄的太困難,但是同學,如果可以加上更多效果,來突顯要表達的意義(如線段加粗、文字說明...等),會獲得加分。相關函數,自行到help尋找,但是不要偏離要表達的意義。

  1. limit (expr, x, val)
  2. limit (expr, x, val, dir)
  3. limit (expr)

limit (expr, x, val):

這裡解釋(%i2)的意義,還記得開頭加上一個「'(分號)」代表什麼嗎?開頭加上分號,後面的運算式將不會進行運算,直到遇到「=(等號)」,分號才失去作用,等號後的算式,如果沒有分號,則就會按正常進行運算,根據這樣的特性,我們可以製作出更接近手寫格式的顯示。如下圖所示:

眼尖的同學,會發現某一節的作業,有一題的解答,就是要求這樣,如果當時不會做,現在看起來,是不是很簡單啊!

limit (expr, x, val,dir): 

在極限,常常探討的是「趨近於0」或「無窮大」的結果。「趨近於0」,val 就是就是0,「無窮大」是「 inf(正無窮大) 」或「 minf(負無窮大) 」,第四個參數 dir 是指定要從正或負方向趨近(plusmInus),下圖是一些範例:

總結:

極限在微積分中是很重要的理論,雖然在微積分你會很少看到它,但的確是很重要,同學們對極限也應該要有所認識。

作業:

  1. 。計算左圖4道題目。 (50%)
  2. 。計算左圖四道題目。(50%)

雖然Maxima的基本函數還沒講完,但還是先介紹兩個微積分的函數,免得同學們跑光光。我知道很多人想學Maxima,是聽說Maxima可以解微積分,雖然筆者不認為光使用Maxima就可以學懂微積分,但用這來展現Maxima的強大威力,倒是不錯的切入點。

diff(expr,x)-微分

例題:求 的導函數。

解:

(圖1)

diff(arg1,arg2):使用方法很簡單第一個參數是欲微分的函數,第二個參數是微分的變數,這一部分聽不懂的話,請一定要回頭去看書,而不要執著於Maxima上。

有時後,我們不希望直接跑出計算結果,這時我們可以在開頭加上'(單引號):

再回到(圖1),如果我們希望把%o2指定給變數,例如g1,這部分沒有問題,但如果是指定給一個函數,例如g1(x),照之前教的來指定就會出現問題,如下圖所示:

不只微分是如此,只要函數指定的右邊,是屬於Maxima函數運算過後的結果,你就必須用兩個單引號和一對小括弧將它括起來,例如:

''(diff(f(x),x))

''(solve(f(x),x))

這樣運算結果才能正確指定給函數。

integrate(expr,x)-不定積分

有微分函數,當然少不了積分函數,用法與diff()相同。

當然integrate也可以計算定積分:

integrate(expr,x,a,b)-定積分

總結:

有關微積分函數,在後面會有更完整的介紹,目前同學只需要了解,基本操作方式即可。

作業:

(圖2)

  1. ☆請用文字說明(圖2)中 (%i1) 的意義。(10%)
  2. ☆請計算(圖2)中 x=5 時的值。(10%)
  3.  (圖3) 。(圖3)是微分基本定理,請用Maxima做出(圖3)的結果。提示: 會使用到兩個diff()。(20%)
  4. 。求出 y 對 t 的導函數。並計算 t=5 時導函數的值。(30%)
  5.  (圖4)  ,用Maxima展現方程式,如(圖4)所示。(20%)
  6. 對(圖4)進行定積分。(10%)

有些教學最後會有「家庭作業」,你可以做也可以不做,我並不強迫,但是因為筆者,有開放給同學發問問題,也會針對問題下去做教學,但是筆者不喜歡那一種,什麼都不看,就只知道說「我不會,救救我」的人,因此,有沒有繳交作業,就成了日後是否擁有這項權益的標準。

作業的難度,真的不高,只是驗收你學習的成效而已,大部分的解答,會在該教學文章得到解答,如果答案不是在文章,筆者會加註☆號,表示這一題,必須要看過之前的文章,可能才會解。

因為本站是教導Maxima,所以題目就是要你操作Maxima計算,不要手工求解,再掃描給我。

另外,筆者喜歡考申論題,沒錯,數學的題目考申論題,通常就是要你,用文字解釋為什麼要這麼做?這一段代表什麼意思?諸如此類的題目,請同學不要害羞,儘量回答,有時後是送分的,筆者只是想知道同學的看法而已,這可以做為筆者教學的參考,申論題不用寫太多,並且必須用Maxima寫,寫在註解Cell。

作業繳交格式:兩種檔案,Maxima檔案(*.wxm)是必須的,另外同學最好再附上圖片檔(Gif、Jpg…),方便筆者整理,大小要適中,如果解答有多張圖,請自行加上流水號(1,2,3…),有附上圖片檔的同學,有加分。

考卷格式:不用抄題目,但需註明為第幾題,如遇不會作答的題目,也一樣要註明第幾題。

Picture-47

E-Mail:請將解答寄到designforest@yahoo.com.tw,通常大概要等一個禮拜,筆者才會通知成績,請耐心等候

評分標準:各項分數,在題目後都會註明,此外,你真的不用太擔心,分數並不是唯一。

solve是Maxima最基本的求解函數,舉凡求多項次的解,解聯立方程式,都可以使用solve來求解。簡單的東西不用說的太複雜,現在我們就用幾個實例來說明solve的使用時機。

1:解二元一次方程式

本例中,只有一個變數x,使用solve可以不指定第二個參數solve(%,x),但習慣上還是建議加上去,沒必要省這種工夫。

2:解多變數方程式,求x

本例有兩個變數x和y,所以一定要指定第二個參數。

3.解聯立方程式

Solve:

說明:

第一行的看起來好像只有(%i1),事實上第一行包含兩個Input(%i1和%i2),還記得前面說過,每一行的輸入是以; (分號)做為結束嗎,所以(%i1)只到 為止,而下一段的 則是屬於(%i2),所以(%i2)是存在的,同學可以試著輸入%i2,看看結果。

此外,還要再說明一點,每個Input一定會對應一個Output,以%i1來說,它對應的就是%o1,所以你也可以從Output得知有幾個Input。

另外我們再複習一下變數的指定,的意思是說,我們把賦給了f1變數,同學可以輸入f1看看會有什麼結果,而f2也是一樣,這樣做的好處,是方便我們後面使用,畢竟用鍵盤輸入數學式,不是一件很容易的事,如果每次我們要用到就重打一遍,既不方便也不聰明。筆者建議同學們,要養成將算式指定給變數的好習慣。

接著來到%i3,本例是解聯立方程式,所以第一個參數會是一個以上的方程式,要注意是以[](方框號)把方程式括起來,而方程式之間是以「」(逗號)做區隔,而第二個參數,我們要求兩個不同變數的解,也是要用[](方框號)括起來,「」(逗號)做區隔。接著直接看%o3,我們得到

在%i3和%o3之間的一堆 'rat' replaced xxxxxxx,是因為浮點數轉換產生的訊息,不影響計算,但如果想關閉的話,你可以使用ratprint函數(預設是true),將它改為false。如下圖所示:

現在那些訊息不會出現了。

總結:

有關solve()函數,就是這三種用法,當然你可以計算的更複雜,例如計算3個方程的聯立,或是更多,隨你高興。

另外在例3提供一些概念,讀者要注意,反覆思考,這一些對你在往後的Maxima操作都會有所幫助。

作業:

.小明身上恰有23枚硬幣,共180元;其中5元硬幣有x枚,10元硬幣有y枚。

  1. 列出聯立方程式,並將其指定給var1和var2。(30%)
  2. 請想像,原先指定var1和var2變數的Input不見了,我們只知道這兩個變數確實存在,但不知道各自代表什麼,請問在Maxima,你會怎麼做,來知道var1和var2代表的意義?(20%)
  3. 求出5元硬幣有幾枚,10元硬幣又有幾枚?(20%)
  4. ☆請將先前指定的var1和var2變數刪除,並證明刪除成功。(30%)

提到Maxima函數,就令我有點頭痛,所謂的Maxima函數與數學所說的函數是有所不同的,也許有些人會建議特地用兩個不同的名稱來稱之,但筆者認為,其實都叫函數是恰當的,因為本質上是相同的,用不同的名稱來稱之,反而會令同學產生混淆,不過筆者還是儘量(有時會忘記)用「函數(指數學上)」和「Maxima函數(指程式語言)」來區分。

所謂Maxima函數,指的是將一連串Maxima指令(程式),集合成一個可執行特定動作的功能。下圖示範「factor(因式分解)」函數。

以上圖來說,使用factor(exp),可以對方程式進行因式分解,如果該方程式為不可分解,則保持原狀不變。

我不想把函數說的太複雜,簡單來說,就是你可以「簡單」的運用相同多的Maxima函數,來進行各種數學運算和操作,往後還會介紹到許多同學的最愛,微積分函數。

上面我們對二元一次方程式進行了因式分解,從%o2我們可以知道x=5或x=-3,但是有沒有辦法,可以使Maxima直接算出答案來呢?有的!

solve函數是maxima最基本的「求解」函數,使用solve來求解上面的題目,我們可以輕易的得到答案。

使用方式:solve(exp,variable)

說明:

使用solve,需要兩個參數,第一個是欲求解的方程式,第二個是要求出方程式中的哪個變數,很明顯的本題是要求x,以本題來說,因為只有一個變數,所以你也可以省略第二個參數x,但如果有兩個以上的變數,則第二個參數不可省略,如下圖所示:

有關solve函數,後面會再詳細說明。

Maxima函數非常多,很難從中快速找到想要的函數,所幸,Maxima已經幫我們做好了分類,以factor來說,Maxima將其分類成Simplify(簡化),你可以在功能列上找到Simplify,點選它,在選單中都是Maxima分類好為「簡化」類的函數。

而solve函數,則是屬於「Equations(方程式)」。

除了以手打和功能列兩種方式外,另外Maxima還建立了一些快速按鈕,在wxMaixma畫面下方。

然而,Maxima的函數實在是太多了,功能列和快速按鈕的方式雖然方便,但仍無法涵蓋所有函數,因此,正確的Maxima操作方式,還是以手動輸入為正統,其次為功能列,有些函數,我會建議使用功能列,因為在功能列的函數,通常會加上視窗,在輸入上會更人性化,往後有機會,會特別強調,而快速按鈕,只能說是聊備一格,在操作上,請以手動輸入和功能列方式為主。

筆者的教學是以微積分、工程數學為主,所以會有很多你需要用到,可是筆者沒介紹到的函數,這部分,就需要讀者,自行到Maxima的幫助說明(F1)尋找,想要的函數。

Maxima的目錄

Maxima入門
  1. 0.8.X版wxMaxima,安裝方式
  2. 界面介紹
  3. 基本操作
  4. 認識(符號運算軟體),和基本四則運算
  5. 基礎-1-(特殊符號-π-Ω....)
  6. 函數和變數的定義
  7. Maxima函數
  8. solve()-基本求解函數
  9. diff-微分;integrate-積分
  10. limit()極限
  11. plot-函數繪圖基礎
Maxima在微積分的運用
  1. 章節說明(微積分運用)
編寫Maxima函數
  1. 初級(1)-Maxima函數


在MAXIMA我們可以用 「 : 」來定義一個變數,上圖表示我們將 3y 定義給 x, 在%i2 我們直接呼叫x,maxima 跑出 3y,因為我們前面已經定義了 x=3y, 要清除變數我們可以使用 kill():


要清除所有變數,可以輸入 kill(all)。

要查詢設定了哪些變數,可以使用 values:

前面是定義變數,接著我們要定義一個「函數」;


跟定義「變數」不同,使用的是「:= 」。

我們也可以定義一個函數有兩個變數


要清除函數,一樣是使用 kill( )。

變數和函數的名稱,是區分大小寫的,在使用的時後要注意。

Recent Posts

Recent Comments

訪客