Python:集成指数函数和高斯函数的乘积

时间:2017-09-21 21:42:41

标签: python sympy exponential integral

我有一个函数y,它是y1 = exp(-x)和exp(-x ^ 2)的乘积:

  

y1 = exp(-x)

     

y2 = exp(-x ** 2)

     

y = y1 * y2 = exp(-x)* exp(-x ** 2)= exp(-x ** 2-x)

使用sympy集成函数y1或y2可以正常工作:

>>> import sympy as sy
>>> import numpy as np
>>> x = sy.Symbol('x')
>>> y1 = sy.exp(-x)
>>> sy.integrate(y1, (x, 0, np.inf))
1

>>> y2 = sy.exp(-x**2)
>>> sy.integrate(y2, (x, 0, np.inf))
0.5*sqrt(pi)

但是,每当我尝试整合产品y1 * y2 = y时,不接受积分:

>>> y = y1*y2
>>> sy.integrate(y, (x, 0, np.inf))
Integral(exp(-x)*exp(-x**2), (x, 0, np.inf))

也许我是盲目的,并且遗漏了一些明显的东西。

2 个答案:

答案 0 :(得分:0)

如果sympy无法象征性地评估它,那么它只返回一个Integral对象。您需要使用更强大的符号计算器,如maximaWolfram|Alpha (link to solution)),否则需要使用数值积分。以下是一些用于数字整合的选项:

import sympy as sy
import numpy as np
import scipy as sp
import scipy.integrate

x = sy.Symbol('x')
y1 = sy.exp(-x)
y2 = sy.exp(-x**2)
y = y1*y2

# Pure scipy without sympy
print(sp.integrate.quad(lambda x: np.exp(-x) * np.exp(-(x**2)), 0, np.inf))

# Mix of scipy and sympy
print(sp.integrate.quad(lambda x_arg: y.subs(x, x_arg).evalf(), 0, np.inf))

# Without using scipy
print(sy.mpmath.quad(sy.lambdify([x], y), [0, np.inf]))

答案 1 :(得分:0)

我相信积分 被接受,它会给你一个有效的同情结果。我使用了this site并且它表示(我还不够数学家来验证它)答案中有错误函数(erf):

enter image description here

没有确切的分析答案,所以它给你它的内部表示。我在几年前使用过Mathematica它会做类似的事情,但它提供了解决方案的多项式近似。顺便说一句,答案大约是0.5456413607650471。

我使用http://www.codecogs.com/latex/eqneditor.php生成方程式图像。