Integral无法评估

时间:2017-06-22 07:47:43

标签: python sympy

我已将符号设置为正= True并且我已检查过Wolfram Alpha上的积分。积分应该是可行的,输出应该包含erfi函数。

 @font-face {
      font-family: 'FontAwesome';
      src: url('../font/fontawesome-webfont.eot');
    }

1 个答案:

答案 0 :(得分:2)

sympy非常有能力解决"这个积分使用有限的限制:

import sympy as sym

x, y, z = sym.symbols('x y z', real=True)
a3, a4, SPR1 = sym.symbols('a3, a4, SPR1', real=True, positive=True)

f2 = sym.Rational(63493635934241,1000000000000000)*sym.exp(3893/8)*sym.exp(-15*x)*sym.exp(x**2/2)*sym.exp(-17*y/4)*sym.exp(y**2/8)*sym.exp(-52*z)*sym.exp(2*z**2)

gx = sym.exp(-15*x)*sym.exp(x**2/2)
gy = sym.exp(-17*y/4)*sym.exp(y**2/8)
gz = sym.exp(-52*z)*sym.exp(2*z**2)

Gx = sym.integrate(sym.powsimp(gx), (x,SPR1, 100))
Gy = sym.integrate(sym.powsimp(gy), (y,-100, a4))
Gz = sym.integrate(sym.powsimp(gz), (z,-100, a3))

sym.pprint(Gx)
sym.pprint(Gy)
sym.pprint(Gz)

F2 = sym.Rational(63493635934241,1000000000000000)*sym.exp(sym.Rational(3893,8))*Gx*Gy*Gz

sym.pprint(F2)
sym.pprint(sym.simplify(F2))

请注意使用sym.Rational(3893,8)代替3893/8。这确保了sympy将这个数字视为理性数字。否则python会在将它传递给sympy之前将其评估为某个浮点数。

由于某种原因,同情不计算以下积分:

sym.pprint(sym.integrate(sym.exp(-x)*sym.exp(x**2),(x,0,100)))

但是,如果您在集成之前告诉sympy简化表达式,那么确实如此:

sym.pprint(sym.integrate(sym.powsimp(sym.exp(-x)*sym.exp(x**2)),(x,0,100)))

编辑:类似于japseow的评论,我发现了一种更简单的方法来进行整合。 Simpliy将以下内容添加到上面的代码中:

F2x = sym.integrate(f2.powsimp(), (x,SPR1, 100))
F2xy = sym.integrate(F2x.powsimp(), (y,-100, a4))
F2xyz = sym.integrate(F2xy.powsimp(), (z,-100, a3))

sym.pprint(F2xyz)

sym.pprint(sym.simplify(F2-F2xyz))

或作为一个衬垫(不太容易阅读,但仍然准确)

F2complete = sym.integrate(sym.integrate(sym.integrate(f2.powsimp(), (x,SPR1, 100)).powsimp(), (y,-100,a4)).powsimp(), (z,-100,a3))

sym.pprint(F2complete)

sym.pprint(sym.simplify(F2-F2complete))

最后一行显示两种方法都会产生完全相同的结果。