我遇到了一些使用sympy的问题,这是我的代码:
from sympy import integrate as inter
import sympy as sp
from sympy import symbols
def f(x):
f1 = (sp.exp(-x ** 2)) / (1 + x ** 2)
f2 = (2 * (sp.cos(x)) ** 2) / (1 + (x - 4) ** 2)
f = f1 + f2
return(f)
def integrate_f_from0(b):
x = symbols('x')
a = inter(f(x), (x, 0, b))
return(a)
运行integrate_f_from0
函数时出现的错误是:
AttributeError: module 'sympy' has no attribute 'polys'
导致此错误的原因是什么?
答案 0 :(得分:3)
在SymPy 1.1.1中,您的代码按预期工作:integrate_f_from0(3)
返回
Integral((2*x**2*exp(x**2)*cos(x)**2 + x**2 - 8*x + 2*exp(x**2)*cos(x)**2 + 17)*exp(-x**2)/((x**2 + 1)*(x**2 - 8*x + 17)), (x, 0, 3))
这意味着,SymPy找不到该积分的符号表达式,因此它返回未评估的值(尽管在搜索反导数的过程中进行了转换)。
使用Wolfram Alpha快速检查确认在基本功能方面没有反衍生物。
建议:
如果您有两个复杂函数的总和,请尝试一次整合一个术语。在这种情况下它没有帮助,但总的来说,你至少知道表达的哪个部分没有基本的反衍生物。
要找到积分数字,请使用N(Integral(f(x), (x, 0, 3)))
(返回1.24063 ...),当然,对于数字积分,更有可能使用SciPy。