主題
Search

頭條新聞


Mathematica 5 釋出

作者:Eric W. Weisstein

2003年6月23日——今日,總部位於伊利諾伊州香檳市的 , Inc. 宣佈釋出其強大的數學計算系統 Mathematica 的一個重要新版本。Mathematica 5 具有許多新的數學和程式設計函式,並對其數值引擎進行了全面改革,在任意精度算術以及閃電般快速的數值線性代數方面產生了令人印象深刻的速度提升。在擁有令人印象深刻的速度和功能增強的同時,Mathematica 5 構建於之前版本的堅實技術之上,這些技術在過去 15 年中已被全球數百萬人使用。

6 月 23 日對於這樣一個重要的新版本來說是一個特別合適的釋出日期,因為它也標誌著 成立 15 週年。正如公司歷史時間線所示,Mathematica 5 已經醞釀了四年,之前的點版本釋出於 1999 年 3 月。

的讀者將極大地受益於 Mathematica 5 的新增和增強功能,該版本已廣泛用於網站上出現的計算和推導,以及為 1000 多個單獨條目提供的可下載 Mathematica 筆記本中。以下示例僅展示了 Mathematica 5 中可用新功能的冰山一角。更詳細的列舉可以在 的“Version 5 新功能”頁面上找到。

內建統計函式

在版本 5 中,常見的統計函式,例如平均值, 方差,以及中位數現在已內置於核心中,不再需要透過軟體包載入。此外,便捷的新函式總和現在可以用來高效地新增數字列表。

SeedRandom[1234]; data = Table[Random[Integer, {1, 10}], {10}] {1, 4, 5, 5, 1, 9, 8, 4, 5, 9} Total[data] 51 Median[data] 5 Mean[data] 51/10 Variance[data] 749/90

內建向量和矩陣範數

在 Mathematica 5 中,向量和矩陣範數現在已內建。新函式Norm因此提供了一種方便的方法來計算各種數學範數。相同的命令也可用於計算複數範數。

Norm[Range[4], #]& /@ {1, 2, Infinity} {10, Sqrt[30], 4} Norm[Partition[Range[9], 3], #]& /@ {1, 2, Frobenius, Infinity} {18, Sqrt[(3*(95 + Sqrt[8881]))/2], Sqrt[285], 24} Norm[1 + 2I] Sqrt[5]

增強的積分功能

Mathematica 的Integrate功能在版本 5 中得到了簡化、改進和系統擴充套件。特別地,對於定積分中具有任意複數值的引數,條件生成得到了顯著改進。當與 Mathematica 5 增強的Assumptions和新的Assuming技術結合使用時,這為計算困難的積分(即使是那些具有複雜引數的積分)提供了堅實的框架,具有前所未有的準確性和嚴謹性。

Integrate[D[x Sqrt[Sin[x]], x], x] x*Sqrt[Sin[x]] Integrate[Sqrt[(x - y)^2], {x, 0, 1}, {y, 0, 1}] 1/3 Integrate[Abs[x - y], {x, 0, 1}, {y, 0, 1}] 1/3 Integrate[Sqrt[(x1 - x2)^2 + (y1 - y2)^2], {x1, 0, 1}, {x2, 0, 1}, {y1, 0, 1}, {y2, 0, 1}] (2 + Sqrt[2] + 5*ArcSinh[1])/15 Integrate[Log[x], {x, a, b}, Assumptions -> 0< a <b] a - b - a*Log[a] + b*Log[b] << Statistics`MultinormalDistribution`; p = PDF[MultinormalDistribution[{0, 0}, {{1, rho}, {rho, 1}}], {x1, x2}]; Integrate[p, {x1, -Infinity, 0}, {x2, -Infinity, 0}, Assumptions -> 0 < rho < 1] (Pi + 2*ArcSin[rho])/(4*Pi)

改進的遞推方程求解器

命令RSolve已針對 Mathematica 5 完全重寫並提升為核心函式。它包含一個最先進的求解器,可以解決大量常見的遞推方程。例如,RSolve現在可以找到 logistic 方程的三個精確可解情況的解

xn+1 = xn(1-xn). (1)
RSolve[{x[n+1] == # x[n](1-x[n]), x[0] == x0}, x[n], n]& /@ {-2, 2, 4} {{{x[n] -> (1 + 2*Cos[2^n*ArcCos[(-1 + 2*x0)/2]])/2}}, {{x[n] -> (1 - (1 - 2*x0)^2^n)/2}}, {{x[n] -> (1 - Cos[2^n*ArcCos[1 - 2*x0]])/2}}}

使用求解 Pell 方程Reduce

Pell 方程是二次丟番圖方程的一個簡單示例。Pell 方程是

x2 - d y2 = 1, (2)

由於 Mathematica 5 強大的新Reduce語法,可以使用以下命令輕鬆找到此方程在整數上的通解。

Reduce[x^2 - 61y^2 == 1, {x, y}, Integers] C[1] \[Element] Integers && C[1] >= 0 && x == (-(1766319049 - 226153980*Sqrt[61])^C[1] - (1766319049 + 226153980*Sqrt[61])^C[1])/2 && y == -((1766319049 - 226153980*Sqrt[61])^C[1] - (1766319049 + 226153980*Sqrt[61])^C[1])/(2*Sqrt[61]) || C[1] \[Element] Integers && C[1] >= 0 && x == (-(1766319049 - 226153980*Sqrt[61])^C[1] - (1766319049 + 226153980*Sqrt[61])^C[1])/2 && y == ((1766319049 - 226153980*Sqrt[61])^C[1] - (1766319049 + 226153980*Sqrt[61])^C[1])/(2*Sqrt[61]) || C[1] \[Element] Integers && C[1] >= 0 && x == ((1766319049 - 226153980*Sqrt[61])^C[1] + (1766319049 + 226153980*Sqrt[61])^C[1])/2 && y == -((1766319049 - 226153980*Sqrt[61])^C[1] - (1766319049 + 226153980*Sqrt[61])^C[1])/(2*Sqrt[61]) || C[1] \[Element] Integers && C[1] >= 0 && x == ((1766319049 - 226153980*Sqrt[61])^C[1] + (1766319049 + 226153980*Sqrt[61])^C[1])/2 && y == ((1766319049 - 226153980*Sqrt[61])^C[1] - (1766319049 + 226153980*Sqrt[61])^C[1])/(2*Sqrt[61])

這是通解,給出了此方程在指定域(整數)上所有可能解的完整引數化。要僅獲得達到某個限制的解,可以使用以下語法。

Reduce[x^2 - 61y^2 == 1 && x > 0 && 0 < y < 10^9, {x, y}, Integers] x == 1766319049 && y == 226153980

使用幾何證明Resolve

Mathematica 5 現在可以使用量詞消除來嚴格證明許多幾何恆等式和不等式。例如,來自三角形幾何的一個優美恆等式指出,邊長為 a、b 和 c,對應角為 A、B 和 C 的三角形的內切圓半徑 r 和外接圓半徑 R 之間存在以下關係:

1 + r/R = cos A + cos B + cos C. (3)

手動演示這個恆等式對於幾何學學生來說是一個很好的練習,但計算機並不擅長。但是,可以透過將問題表述為邏輯表示式“對於所有對應於三角形邊長的 a、b 和 c,恆等式 (3) 成立”,然後評估結果是否為(命題正確)或(命題不正確)。注意到三個數字作為三角形邊長的條件由下式給出:

a, b, c > 0, a + b > c, b + c > a, a + c > b. (4)

然後可以在 Mathematica 中編寫如下。

Resolve[ForAll[{a, b, c}, a > 0 && b > 0 && c > 0 && a + b > c && b + c > a && a + c > b, Cos[A] + Cos[B] + Cos[C] == r/R + 1 /.{ r -> Sqrt[(b + c - a)(c + a - b)(a + b - c)/(a + b + c)]/2, R -> a b c/Sqrt[(a + b + c)(b + c - a)(c + a - b)(a + b - c)], Sequence @@ Thread[{A, B, C} -> (ArcCos[(-#1^2 + #2^2 + #3^2)/(2#2#3)]&@@@NestList[RotateLeft, {a, b, c}, 2])] }]]

由於結果是, 該命題已得到證明。

參考文獻

, Inc. “Mathematica 5。” http://www.wolfram.com/mathematica/

, Inc. “Version 5 新功能。” http://www.wolfram.com/mathematica/newin5/