2013-06-03 69 views
0

有什麼辦法讓sympy來執行這個積分?積分涉及貝塞爾函數

x=var('x') 
L=var('L') 
Q.positive(1/L) 
integrate(besseli(1,x) * exp(-x**2/(4*L)-L),(x,0,inf)) 

Sympy剛剛返回積分:

Integral(exp(-L - x**2/(4*L))*besseli(1, x), (x, 0, +inf)) 

數學做的:

Integrate[BesselI[1, x] Exp[-(x^2/(4 L)) - L], {x, 0, Infinity}] 

結果:

ConditionalExpression[1 - E^-L, Re[1/L] > 0] 

編輯:使用下面提供的答案,更好方式執行這個我ntegral是:

L=var('L',real=True,positive=True) 
x=var('x',real=True,positive=True) 
integrate(besseli(1,x) * exp(-x**2/(4*L)-L),(x,0,oo)) 
+0

Sympy給了我正確的東西。你正在運行什麼版本? – Lucas

+0

'''$ python -c「import sympy; print sympy .__ version__」 0.7.2'''你使用的是哪個版本?也許我需要最新的開發版本? – keflavich

+1

SymPy中的Infinity是'oo',而不是'inf'。 – asmeurer

回答

2

的問題是,你正在使用inf,我的猜測是Float('inf')。你想要oo,象徵性的無限。 SymPy應該可以更智能地將Float('inf')轉換爲oo

In [1]: x=var('x') 

In [2]: L=var('L') 

In [3]: Q.positive(1/L) 
Out[3]: Q.positive(1/L) 

In [5]: integrate(besseli(1,x) * exp(-x**2/(4*L)-L),(x,0,oo)) 
Out[5]: 
⎧  ⎛ L ⎞ -L    │     ⎛  1   ⎞│ π 
⎪  ⎝ℯ - 1⎠⋅ℯ   for │periodic_argument⎜─────────────, ∞⎟│ < ─ 
⎪         │     ⎝polar_lift(L) ⎠│ 2 
⎪ 
⎪∞ 
⎪⌠ 
⎨⎮   2 
⎪⎮  x 
⎪⎮ -L - ─── 
⎪⎮  4⋅L 
⎪⎮ ℯ  ⋅besseli(1, x) dx     otherwise 
⎪⌡ 
⎩0 
+1

我爲https://code.google.com/p/sympy/issues/detail?id=3866打開了'inf'與'oo '東西。 – asmeurer

+0

謝謝!你如何生成漂亮的輸出? – keflavich

+0

'pprint',或者用'init_printing'自動執行。我正在使用'isympy',它會自動執行。 – asmeurer