電腦代數系統

敬告讀者:這份文件大約反應 2004 年的狀況,目前我並沒有更新這份網頁的計畫, 您自己決定是否有必要讀下去。 對於真正的新手,我相信它至少還是一份不錯的入門文件。

我為了想要在《計算機概論 16 講》那本書的第 B 講介紹幾個免費的電腦代數系統 (CAS: Computer Algebra System),就上網做了一點研究。 那一點研究後來花掉我一整天的時間, 卻只換來第 B 講裡面的 3.5 列文字。 為了讓那一天浪費得更值得一點,我順便記下了當天找到的東西。

我的個人感想:如果一天的功力可以換來 3.5 列文字, 那麼《計算機概論 16 講》 全部 128 頁,每頁約 30 列, 就是大約需要 1100 天的準備才能寫完。 就算我一年花 1/4 的時間在計算機相關知識的閱讀和思考上面, 只有大約 90 天,所以需要十二年。花十二年的功夫換來這一本書所需的知識? 仔細想想,其實這也差不多。這就是我打從來到中央大學被指派去教計概、 程式語言、 Unix 系統等課程、並且管理計算實驗室至今的時日。 所以,真的需要十二年。

商業產品

談 Open Source 的 CAS 之前,先紀錄四個商業軟體和三個「半商業」軟體吧。

Maple http://www.maplesoft.com

最初大約是 1988 年在 Penn State 看到同學使用:多半是學數論的同學在用。 他們有人用 Maple,但是更多人用 Mathematica。 後來在 Brown 大學遇到全任重老師,當時他比較喜歡用 Mathematica, 而我都還沒使用。再後來,透過 email 的聯繫,全老師跟我說他換成 Maple 了, 因為越來越不喜歡 Mathematica 的介面。另外我發現邱博源老師也在用 Maple。 其實我不曾真的比較過 Mathematica 和 Maple,只是因為這兩位老師的影響, 我就挑選了 Maple。用慣了,也就沒必要更換。

最近的心得是,Maple 提供給教師和課程的協助很多、很好, 看起來他們很重視基礎教育市場,雖然我不確定品質如何,但是至少看起來很歡心。

Mathematica http://www.wolfram.com

其實 CAS 的真正老牌子是 Mathematica,它的創造者 Wolfram 是個天才兼英雄。 我在 Penn State 的博士班同學們多數使用這個軟體, 在中大遇過夏良忠、李宗元老師使用這個軟體,而我也曾請他們幫我完成一點計算, 頗為成功。利用 Mathematica 實現的藝術創作更是令人驚豔, 我利用了一些圖片組成《數學觸發的視覺藝術》那篇演講稿。 不過,這些都還是不夠讓我從 Maple 改變軌道去使用 Mathematica, 純粹是個人懶惰的關係 (而且還不曾發生真正的需求)。 可見習慣入人之深啊。這些軟體公司應該更積極地搶攻學校市場才對, 特別是對老師們慷慨一點。一個人在學生時代用了什麼軟體,大概就會用一輩子。

Wolfram 的 1280 頁巨著《 A New Kind of Science》聽說很有說服力, 其基礎理念事實上也是我自己的理念,因此我很想看看他怎麼說的。 不過還沒有時間去讀。現在這整本書都上線了,但是還挺不方便讀的。

MathCAD http://www.mathcad.com

這也是個老牌子的 CAS (從 1984 開始),它一直維持在 Microsoft 的環境內。 我記得當初它的特色之一是採用 IBM PC extended code 當作輸出符號, 雖然稍微難看一點, 但是因為全部使用字碼而非圖形,所以顯示得非常快速而且容易剪貼。

在 2001 年之前,MathCAD 幾乎要倒閉了,然後被收購,改組為 MathSoft。 這家公司的首頁把主要市場眼光放在工程本位的企業上, 而他們的主要訴求是自動化數學計算和數學、圖片、文字敘述整合在同一份文件上, 這兩者其實是 CAS 的基本功能嘛,但是被他們說得很神, 叫做 Calculation Management System, 說是可以大幅減少重複計算和計算錯誤所造成的浪費。 我想,這的確是一個不錯的市場切入點。 Maple 和 Mathematica 都太「專業」了一點,MathCAD 想要賺企業的錢,這個點子倒也實際。

MathSoft 為了教育市場另開網頁 http://education.mathsoft.com 從那裡看來, 它的教育客戶仍然以工程系所為主。

Derive http://education.ti.com

Derive 可能真的是 (個人電腦上的) 第一個 CAS,它甚至比 PC 還要老。 它以前的名字是 muMATH,第一個版本是 1979 年開始銷售的, 在 Z80 和 Radio Shack TRS-80 上面執行,只要 48K 的記憶體! 真不知道那是什麼樣子?然後在 1980 年出了 Apple II 版本, 在 1983 年出了 IBM-PC XT 版本,那時候成長到需要 300K 的記憶體。 而我個人的首次 CAS 經驗,其實就是 1984 年全任重教授表演的 muMath! 他那時候展示了幾個反導函數的符號計算,在一個陰暗的冬天下午。 那真是一個震撼的經驗啊,忽然覺得人生中似乎少了什麼 (以前一直以為求反導函數是需要「智慧」的)。 全教授當時附加了一句註腳:『這個軟體告訴我們,如果連反導函數都做不出來, 那你還配叫做個人嗎?』不過,多年以後的今天,我們都不這樣認為了。 如今我們認為,這種軟體告訴我們數學老師,該要重新考慮數學課應該教些什麼?

muMATH 是用一種叫做 muSIMP 的語言寫成的。 muSIMP 是一種稍微改進設計的 LISP 語言,後來發展成 muLISP。 LISP 是經常用來寫人工智慧軟體的語言。後來 muMATH 經過改版, 直接以 LISP 語言撰寫,改名為 Derive 而在 1988 年上市。 這個軟體的主要撰寫者都不在美國和加拿大,而是在歐洲和澳洲, 但是它後來卻被美國的德州儀器公司 (TI: Texas Instruments) 買下, 如今是德儀的教育產品線上之一員。 大家都知道德儀是個硬體廠商, 他們真正要賣的是掌上型計算器。 這些新一代的計算器要有 CAS 功能還要有測繪 (plot) 功能, 可以想像 TI 買下 Derive 是需要它的 know-how, 並直接把它改寫成掌上型計算器的程式。 因此也不難理解,Derive 和 TI 的各類掌上型計算器有著方便的溝通功能。

Derive 和 TI 的掌上型計算器都主攻「中段」的教育市場,大約是從高中到大一這 個範圍吧。很明顯地 Derive 的介面設計受此影響,的確比較簡單一點,還特別設計了「 顯示一步一步的計算過程」的特色。

可能是為了同一個目的,TI 還買下了 Cabri Geometry II 的版權。

muPAD http://www.mupad.de

我們大約可以想像這是個德國版本的 Maple,而最近看起來它好像跟法國的 SciLab (提供像 Matlab 那樣的硬體數值計算功能) 結合了,也許跟歐盟的政策有關吧。 因為比 Maple 新,所以使用的 algorithms 據稱比較可靠又比較快, 提供一套物件導向的語言, 可以在 muPAD 裡面定義自己的資料型態。

這個軟體想要賣錢,但是又不太認真,搞不太清楚他們的動態。 目前看來 2.5 版 (PC, Mac, Unix) 可以在簽約後免費獲得, 而 3.0 版至少 PC 版本要賣,沒找到價錢,只是宣稱它自己很便宜。 而 3.0 版的 UNIX 和 Mac 版本還沒看到。 據說 muPAD 的研發者 (學術界人士) 想要讓它變成開放軟體,我們等著瞧。

Magma http://magma.maths.usyd.edu.au/magma

它的前身是 Cayley,其目的本來像 GAP 一樣是針對群論等代數結構的符號運算。 改名之後繼續加入數論、組合學、幾何、多項式、lattice 和線性代數的符號演算法, 發展成一個比較針對這些數學專業領域的 CAS。 他們自稱非營利機構,但是必須自負研發與維護費用,所以要收費。 但是,針對學術工作者和學生,有許多優惠方案,不過採購和認證程序看來有點複雜。

也是因為研發時間較晚,據稱實作了最近的演算法,所以功能比較好。 也自建了一個物件導向的語言,更接近自然的數學語言。

Reduce http://www.zib.de/Symbolik/reduce

就像 Mathematica,Reduce 基本上也是一份「個人創作」, 作者也是一位物理學家:Anthony Hearn,1962 年的牛津理論物理博士。 Reduce 已經有 30 年的發展歷史,據稱非常一般性而且品質可靠。 可能因為 Hearn 不像 Walfram 那樣全力經營自己的軟體, 所以五六年才更新一回合,而且賣得很「便宜」,有人說是最便宜的全功能 CAS。 有多種販售合約,最單純的個人版,的確便宜,大約只要 3,500 元台幣。 而且,在某種合約與費用之下,它就連原始碼都可以賣, 所以它有點像是介於商業軟體和開放軟體之間的樣子。

雖然便宜不見得沒好貨,但是我們不能期望它的操作介面太好看, 也不能要求比較花俏的測繪圖像。它可以畫圖,但是只有 ASCII 文字介面。 除了操作介面與繪圖功能以外,我倒是覺得 Reduce 似乎跟 Maple 可以比, 至少就我需要的功能而言。完整的手冊有幾乎 500 頁,但是似乎都還沒整理好, 也許付錢之後才會看到吧。幾乎所有存在的和已經死去很久的硬體系統, Reduce 都有支援。

開放軟體

然後紀錄開放的 CAS 軟體。

GNU TeXmacs http://www.texmacs.org

TeXmacs 其實不是 CAS,它是一個 WYSIWYG 的數學排版軟體。 它企圖將 TeX 和 Emacs 兩個超級軟體合而為一,法國人的作品。 它使用 TeX 字型,因此宣稱可以保持 TeX/LaTeX 的排版水準。 如果不信任 TeXmacs,也可以將它用來當作 TeX/LaTeX 的圖形操作介面, 在編輯後輸出 TeX/LaTeX 原始碼。他們還計畫能夠輸出 HTML, MathML 和 XML。

順便,TeXmacs 也可以用來當作 CAS 的圖形操作介面,而將 CAS 單純地用作背景引 擎。如今可以與 TeXmacs 互通訊息的 CAS 包括 Axiom, Giac, GTybalt, Macaulay, Maxima, Pari 和 Yacas。

GiNaC http://www.ginac.de

看起來原先是一套為了高能物理研究而做的軟體,具備一些基本的 CAS 功能, 但是缺了一些特殊的數學計算功能 (例如多項式因式分解)。 GiNaC 比起一般 CAS 的特色是可以處理非常非常大的物件。 例如它的作者說 Maple 不能處理具有 217 項以上的多項式, GiNaC 可以;Maple 遇到 2001!/2000! 這種問題會出錯,GiNaC 不會。

GiNaC 沒有自己的 GUI。一般來說,它是設計給 C++ 程式設計師使用的, 看來 GiNaC 可以被視為一套 C++ 的 CAS 函式庫, 提供了一系列的 types, classes 和 method。

GiNaC 這個奇怪名字來自 GNU 的啟發,它的無意義之意義是 GiNaC is Not a CAS。

GIAC http://www-fourier.ujf-grenoble.fr/~parisse/english.html

GIAC 拿來了 GiNaC 又連結了包括 Pari 在內的其他開放 CAS 軟體, 因此 GIAC 繼承了 GiNaC 的優點,又利用其他原始碼補充了 GiNaC 的不完整性, 造成比較完整的 C++ 之 CAS 函式庫, 因此它改名叫做 GIAC: GIAC Is A CAS. GIAC 仍然可以被視為一系列的 C++ types, classes 和 methods,也可以這樣子使用。但是它也有一套自己的 GUI, 稱為 Xcas,有 MS, Mac 和 UNIX/X 版本。

GIAC 有一個線上 Web 介面可以當場操作: http://www-fourier.ujf-grenoble.fr/~parisse/cgi-bin/giac.pll 需要安裝 MathML 解讀器,因為其輸出用的是 MathML 排版。 據稱,Xcas 還有一個 Maple 相容介面選項,而且據稱它的設計是以教育用途為導向, 值得留意它的發展。

LinBox http://www.linalg.org

LinBox 也是一套 C++ 函式庫,這個計畫並沒有想要做一般用途的 CAS, 而是特別針對線性代數的計算。 例如它可以處理 200,000x200,000 的整數矩陣之逆矩陣, 而且答案用真確的有理數顯示。此計畫似乎停擺了一陣子,尚未完成。 但是他們已經有一份 Maple 組件 LinBox package 供人下載。

GAP http://www.gap-system.org

GAP 的意思是 Groups, Algorithms and Programming。它也不是一個一般用途的 CAS, 而是特別針對群論 (Group Theory) 所設計的符號計算軟體。其實除了「群」以外, GAP 也支援許多其他的代數結構。基本上提供一個文字操作介面, UNIX 版本還有一個 X 視窗介面,但是那並不一定是大家想像的 GUI。

PARI http://pari.math.u-bordeaux.fr

PARI 是一個專門針對數論 (Number Theory) 需求而設計的符號計算軟體, 包括了整係數多項式、代數數論、橢圓曲線等比較特殊的計算功能, 也順便囊括某些線性代數、冪級數、超越數之演算法。 所以 PARI 像 GAP 和 LinBox 一樣,也是比較屬於特殊數學專業用途的 CAS。

PARI 本身是一套 C 函式庫,基本上是讓人自己寫主程式呼叫它來幫忙計算的。 但是後來發展出它自己的操作介面,叫做 gp,而 gp 提供自己的語言, 那個語言叫做 GP。透過 Cygwin 這個在 MS-Windows 中模擬 Unix 的動態連結函式庫, PARI 和 gp 也可以在微軟的環境中運行。 有了 GP,使用者可以不必用 C 寫主程式,而改用 GP 寫腳本程式在 gp 內執行。 又有人寫了 gp2c 將 GP 腳本程式轉譯成 C 原始碼。

Singular http://www.singular.uni-kl.de

Singular 又是一個有特殊目標的 CAS。 它的主要功能是處理交換代數與代數幾何中所需的多項式符號計算。 Singular 是用 C/C++ 語言寫的,它有自己的文字介面, 也可以利用 Emacs 來當作文字介面。 Singular 設計了一套與 C 相似的語言 (稱為 AG), 內設環、多項式、ideal、矩陣、向量、module 這些物件。

Macaulay 2 http://www.math.uiuc.edu/Macaulay2

Macaulay 2 就好像是美國版的 Singular,由 NSF 資助發展, 也是一個以服務交換代數與代數幾何研究社群為主要目的的特殊功能 CAS。 它也是提供自己的文字介面,又可以從 Emacs 裡面執行。 但是 TeXmacs 可以充當 Macaulay 2 的圖形介面。

Axiom http://www.nongnu.org/axiom

Axiom 是歷史最悠久、參與的研究人力可能最多的一份 CAS。從 1971 年就開始了, 當初是 IBM 的計畫,產品名字是 Scratchpad。IBM 的產品居然會失敗? 這倒是有點稀奇的事。據說這個產品失敗在太龐大複雜了。 其實 IBM 也不算失敗,他一直把 Scratchpad 視為內部研究計畫,沒有真的上市。 1990 年代 IBM 營收下降,所以放棄了 Scratchpad 計畫, 賣給 NAG (Numerical Algorithms Group),改名為 Axiom。而 NAG 也賣不起來, 最後在 2001 年收攤,被 Tim Daly 接收轉型為開放軟體。 Daly 是 IBM Yorktown 實驗室的研究員,長年實際參與 Scratchpad 計畫。

Axiom 自己有一個文字介面,而 TeXmacs 可以成為它的圖形介面。

Maxima http://maxima.sourceforge.net

這也是個有悠久歷史的 CAS,據稱是所有開放軟體的 CAS 中功能最完整的一個。 原本是美國能源部 (Department of Energy) 委託 MIT 的研究案, 比 IBM 的 Scratchpad 更早兩三年開始,原名叫做 Macsyma。 不知道為什麼,1982 年 William Schelter (德州 大學 Austin 校區數學系教授) 向能源部要來了 Macsyma 原始碼,並於 1998 年獲准將它改成開放軟體。 2001 年 Schelter 去世之後,James Amundson 接手了這份工作。

Maxima 是用 LISP 語言寫的,更精細地說,是 GCL (GNU Common LISP)。 它有 MS-Windows 和 UNIX 版本。 Maxima 有自己的圖形與文字介面,也可以利用 TeXmacs 做它的 GUI。 Amundson 說現階段主要是繼續鞏固 Maxima 的原始碼,使得它「非常強軔」, 而不會花很多時間增加新功能。

Yacas http://www.xs4all.nl/~apinkus/yacas.html

Yet Another CAS: 又一個 CAS。它本身是用 C++ 寫的,作者說, 重點是它提供了一個引擎和一套語言, 這套與 C 相近的語言可以讓用戶「很輕易地」發展自己的符號計算程序。 那恐怕真的要寫很多,因為就目前的手冊來看,沒有微積分的功能。


[ 發表感想或意見 ] ‧ [ 讀者推薦課外讀物 ]

BCC16 Home Up Chap 0 Chap 1 Chap 2 Chap 3 Chap 4 Chap 5 Chap 6 Chap 7 Chap 8 Chap 9 Chap A Chap B Chap C Chap D Chap E Chap F Copyright Pool User
製作人、
修改記錄
單維彰 (2004/02/21) ---