积分涉及贝塞尔函数

时间:2013-06-03 20:15:53

标签: 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))

Mathematica做到了:

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

结果:

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

编辑:使用下面提供的答案,更好的方法是执行此操作:

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))

2 个答案:

答案 0 :(得分: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 :(得分:0)

原始表达式现在可以在SymPy中使用,因为inf会自动重铸为oo:

>>> inf=float('inf')
>>> x=var('x')
>>> L=var('L')
>>> Q.positive(1/L)
Q.positive(1/L)
>>> integrate(besseli(1,x) * exp(-x**2/(4*L)-L),(x,0,inf))
Piecewise(
((exp(L) - 1)*exp(-L), Abs(arg(L)) < pi/2),
(Integral(exp(-L - x**2/(4*L))*besseli(1, x), (x, 0, oo)), True))