2009-02-03 59 views
19

我extreamly數學和編程和計劃開始符號數學項目從零開始感興趣。符號數學Python?

  1. 這是不錯的項目想法?

  2. 從哪裏開始?

  3. 應該如何處理這個 項目?

  4. 任何良好的資源?

在此先感謝。

回答

19
  1. 這是一個很好的項目練習編程技能。但是,如果你想創建其他人將要使用這是你不想開始allone,並從頭開始一個項目真正的圖書館......

  2. 從哪裏開始:看一看解決方案那已經在那裏,想想你想做什麼不同。你的項目與其他項目有何不同?

  3. 資源:SymPy is a Python library for symbolic mathematics

+4

另一個圖書館選項是使用賢者(http://www.sagemath.org/) – 2009-02-03 22:10:34

4

@Resources:你可以看看pythonica--這是一個嘗試在Python中實現Mathematica類型的程序(源代碼可供下載)。

3

這個pySym Blog也可能讓你感興趣的獲取想法和初學者,並學習其他人在做什麼與Python &符號數學。

1

更多資源的方式:SympyCore

的SympyCore項目的目的是尋求新的高性能解決方案,在Python編程語言來表達和處理符號表達式,並嘗試新的符號模型來達到基本一致和足夠一般的符號模型,這將很容易擴展到計算機代數系統(CAS)。

7

符號數學是一個有趣的項目。無論是否有人使用它,在你的問題中似乎都沒有問題,所以潛入。

我已經寫了兩年這些年。最酷的是SQL語句中的一個 - 它在SQL上做了一些簡單的符號操作來摺疊一些額外的AND條件。不是一個完整的「求解器」或「優化器」或其他任何東西,只是可能的任何SQL where子句的一些符號操作。調試器不太酷;它做了複雜的數學計算(符號)變量的堆棧偏移量。操作數,運算符,函數等

你必須決定什麼操縱這些對象都參與 -

通過定義一個數學表達式的元素開課。爲表達式獲得具體價值是一件容易而明顯的事情。從所有變量都具有綁定的情況開始。

然後處理一些變量保持未綁定的情況,並且您只能評估表達式的一部分。

然後處理將表達式重新排列爲規範形式。即,你已經完成了部分評估並且有Add(Variable(x), Add(Variable(x), Lit(3)))。您需要編寫規則將其轉換爲Add(Multiply(Lit(2), Variable(x)), Lit(3))

一個非常酷的練習是優化括號,以便打印輸出具有捕獲含義所需的最少圓括號。

有很多很多其他的「表達式轉換」規則,我們都在學校學習做代數操作。其中很多。

特別是,在某些情況下,重新排列方程以隔離變量可能非常困難。

做衍生變換很容易,但符號集成對於大量特殊情況確實非常困難。

基本很有趣。取決於你想走多遠,它逐漸變得更難。

10

1.這個好項目的想法是什麼?

是的;我期望它能提供一個有趣的工作源泉,它將很快測試和擴展你的編程能力。

2.從哪裏開始?

我其他的建議,你應該看看現有的工作。 SAGE非常令人印象深刻,如果你問我的建議,我建議你首先編寫一個用數字和符號進行算術的基本系統;然後看看SAGE並編寫一個模塊來擴展系統,換句話說就是成爲一個更大的貢獻者,而不是試圖獨自完成這一切。還請看看Mathematica和Maple,Macsyma和Axiom。後者2是免費的(我認爲),但它們在網上都有很好的文檔記錄,是思想和挑戰的重要來源。

3.如何接近這個項目?

一個人會接近吃大象。一次咬一口。更嚴重的是,我認爲存在一些核心問題,比如表達式的表示,以及一些基本的功能(多項式算術),這些功能可以削減你的牙齒。

4.任何好的資源?

很多和很多。谷歌爲「計算機代數」,「術語重寫」。看看亞馬遜上有什麼可用的。並且,如果您有權訪問,請查看ACM數字圖書館

祝您好運。

1

我認爲這對任何技能水平的程序員來說都是一個很棒的項目。實現一個功能強大的符號計算器非常簡單,非常有用。如果你繼續在廣度上工作,那麼有很多有趣的功能需要添加,以至於你可以長期使用它。如果你選擇深入,你會發現很快就會得到很難。如果這就是你喜歡的,你可以無限地挑戰自己。

有很多很好的資源。我推薦zur Gathen和Gerhard編寫的「現代計算機代數」一書,雖然它比一般的符號操作更關心特殊形式(多項式,整數,矩陣)的算術。當你剛開始的時候,你可能通過查看一些Lisp或Scheme教程得到更好的幫助,因爲符號數學在Lisp中的概念上非常簡單,並且在Python中構建一個符號引擎時,你或多或少必須實現一個mini-Lisp作爲基礎。

正如其他人指出的,你可以看看SymPy和sympycore的靈感或具體算法。任何一個項目的源代碼都有點複雜(但從中學習起來並不難)。 (如果我可能會插入一點,我回到wrote a tiny symbolic engine(作爲一個週末的項目 - 這是非常小的,我從來沒有工作過),它在大約200行代碼中實現了一個通用的符號引擎,然後有300行代碼實現了符號算術和符號布爾代數,並進行了一些非常簡單的簡化,或許比SymPy更容易挖掘,但是其中的一切都是你可以輕易發現的,並且可能更有趣這樣做。)