Mathematica 是怎麼做不定積分的?能不能用幾個簡單的例子,簡述一下求不定積分的演算法?


除了risch algorithm那一系列之外還有匹配現有公式。

不過一直覺得(Log[x]+1)*Sqrt[1+(x Log[x])^2]積分無法計算挺有趣,問他們的technical support也是不給正面回答。

關於risch algorithm,可以在這本書里看到詳細演算法(我記得是12章)http://www.amazon.com/Algorithms-Computer-Algebra-Keith-Geddes/dp/0792392590

簡單的例子裡面也有(習題)

向你推薦一個在mma平台上一個專門用rule來進行不定積分的package,rubi4.7 ,現在裡面已經有接近6000條的rule

http://www.apmaths.uwo.ca/~arich/ 這個有的時候比mma有效,而且還可以顯示步驟,詳情請見網站上的數據對比(不適合學習積分使用,學習還是用wolframalpha的step by step吧)

如果你想看技術細節的話直接參考sage,reduce之類的源代碼好了


補一個官方文檔的說明:

Some Notes on Internal Implementation

  • For indefinite integrals, an extended version of the Risch algorithm is used whenever both the integrand and integral can be expressed in terms of elementary functions, exponential integral functions, polylogarithms, and other related functions.
  • For other indefinite integrals, heuristic simplification followed by pattern matching is used.
  • The algorithms in the Wolfram Language cover all of the indefinite integrals in standard reference books such as Gradshteyn–Ryzhik.

怎麼個 extended 法就不知道了。


我們學校Lab μ協會曾經造過一個可替換Mathematica內核的輪子,叫mathμ,是一個完整的CAS(Computer Algebra System),其中也實現了符號積分的功能。你可以參考他們的文檔:http://mathmu.cn/doc/Integration.html

符號積分主要參考書:Symbolic Integration I


Risch algorithm


推薦閱讀:

程序員如何通過《演算法導論》學習?這本書適不適合演算法基礎薄弱的程序員?
如何生成多個互不重疊的不同半徑圓?
stl partition演算法有兩種寫法,哪種效率高?
演算法導論第三版的翻譯水平如何?

TAG:演算法 | WolframMathematica |