電腦代數與符號計算

電腦代數系統(computer-algebra system)

/ no special pronunciation /

大多數計算機給你數字。電腦代數系統給你的是數學:輸入 x^2 + 2x + 1,它能因式分解成 (x + 1)^2;要求 sin(x^2) 的導數,它答 2x cos(x^2);要求 1/(1 + x^2) 的積分,它回 arctan(x),而非一個小數。它是這樣一種軟體:像一位細心的學生那樣——用符號、精確地——做代數與微積分,而非碾壓近似的數。

在底層,電腦代數系統把每個表達式表示成一棵由運算與符號組成的樹(一個加法節點底下接乘法節點,再接葉子 x,如此類推),把數保存為任意大小的精確整數與分數(任意精度算術),並施加以規則為本的變換:合併同類項、把表達式化為標準形使相等之物看起來相等、執行歐幾里得演算法求多項式最大公因式、計算葛羅布納基底以解多項式方程組、機械式地微分、以及透過里施演算法積分。著名的系統有 Mathematica、Maple、開源的 SageMath 與 SymPy,以及 Maxima。實質上,它們是代數中繁瑣記帳部分的自動化數學家。

電腦代數系統在精確答案、封閉形式公式,以及捨入會致命的任務上大放異彩——推導方程式、驗證恆等式、從符號模型生成最佳化的程式碼。它誠實的限制是真實存在的:精確的中間表達式可能爆炸性膨脹,因此在數值函式庫瞬間完成的問題上,電腦代數系統可能卡死;自動化簡確實有歧義(sin^2 + cos^2 寫成 1 才算「較簡」嗎?);而回傳的公式可能正確卻大到毫無用處。把它當成強大但會犯錯的助手,而非神諭——並永遠做合理性檢查,因為連成熟的系統也曾有過化簡的臭蟲。

在電腦代數系統中,指令 integrate(1/(1 - x^2), x) 回傳 (1/2) log((1 + x)/(1 - x))——一個精確的反導數,你可以對它微分以還原被積函數。相對地,數值函式庫只會給你某區間上的定積分小數值,完全沒有公式。

電腦代數系統回傳封閉形式公式;數值常式只回傳一個數。

電腦代數系統並非萬無一失:化簡的選擇可能藏起分支切割與定義域的問題(它可能把 sqrt(x^2) 寫成 x,忘了 x 可能為負),而歷史上每個主流系統都曾出過化簡的臭蟲。可信任,但要查證。

又稱
CASsymbolic algebra system符號運算系統計算機代數系統