0

有没有办法让同情来执行这个积分?

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

2 回答 2

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
于 2013-06-04T16:24:30.917 回答
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))
于 2019-04-27T17:48:16.317 回答