我有一个函数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))
也许我是盲目的,并且遗漏了一些明显的东西。
答案 0 :(得分:0)
如果sympy无法象征性地评估它,那么它只返回一个Integral对象。您需要使用更强大的符号计算器,如maxima或Wolfram|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):
没有确切的分析答案,所以它给你它的内部表示。我在几年前使用过Mathematica它会做类似的事情,但它提供了解决方案的多项式近似。顺便说一句,答案大约是0.5456413607650471。
我使用http://www.codecogs.com/latex/eqneditor.php生成方程式图像。