2013-02-07 24 views
4

在SymPy中,是否可以對不確定積分應用限制並對其進行評估?SymPy - 將限制應用於不確定積分

import sympy 
from sympy.abc import theta 

y = sympy.sin(theta) 

Y_indef = sympy.Integral(y) 
Y_def = sympy.Integral(y, (theta, 0, sympy.pi/2)) 

Y_def.evalf()產生一個數字。

我正在尋找類似Y_indef.evalf((theta, 0, sympy.pi/2))的東西來獲得相同的答案。

+0

爲什麼不直接在積分間隔的邊界上評估不定積分,然後將這兩個值相減? –

+0

我想我更想弄清楚上面的Y_indef和Y_def對象之間的區別,是否有可能對Y_indef做些什麼來使其行爲像Y_def。 –

+1

@DavidZwicker那種天真的方法一般不會工作。如果在集成領域有兩極,你會得到錯誤的答案。此外,通常可以計算定積分,但不定積分不能(如果你只對數值評估感興趣,這肯定是真的)。 – asmeurer

回答

6

我不知道一個直接的方式,但是你可以以創建一個定積分從Y_indef提取信息:

>>> indef = Integral(x) 
>>> to_be_integrated, (free_var,) = indef.args 
>>> definite = Integral(to_be_integrated, (free_var, 1, 2)) 

.args是包含構建最SymPy對象需要什麼的一般屬性。

編輯:解決對問題的意見。

  1. SymPy可能成功評估定積分,同時無法解決它們的不確定版本。這是由於存在應用於定積分的附加算法。

  2. 定積分和不定積分都是同一類的實例。唯一的區別是它們包含在.args中。由於SymPy主要使用Integral作爲標誌來表示它不能解決積分(即當所有實現的算法失敗時integrate函數返回Integral),所以還不需要不同的類。

+0

這是正確的。做到這一點的唯一方法是創建一個新的Integral並對其進行評估,這可以通過一個簡單的幫助函數來完成。 – asmeurer

+0

謝謝。這正是我所期待的。 –