在涉及int()的函数上使用sympy.integrate
我正在尝试用Python集成函数。scipy.integrate.quad似乎工作正常;但请确保我想对照其他集成代码检查结果。有人建议我试试sympy.integrate。现在,我要集成的函数的代码包含int(),我使用它将浮点转换为int。这对于quad是可以的,但对于sympy.integrate则不行 下面是一个简单的示例,再现了错误:在涉及int()的函数上使用sympy.integrate,sympy,Sympy,我正在尝试用Python集成函数。scipy.integrate.quad似乎工作正常;但请确保我想对照其他集成代码检查结果。有人建议我试试sympy.integrate。现在,我要集成的函数的代码包含int(),我使用它将浮点转换为int。这对于quad是可以的,但对于sympy.integrate则不行 下面是一个简单的示例,再现了错误: import sympy def f(x): return sympy.exp(int(x)) sympy.symbols('x') prin
import sympy
def f(x):
return sympy.exp(int(x))
sympy.symbols('x')
print(sympy.integrate(f(x),(x,0,2)))
这会产生错误:TypeError:无法将符号转换为int
那么,有没有一种方法可以将涉及int()的函数与scipy.integrate进行集成
感谢使用
integrate
f
必须是一个SymPy符号函数,不允许您使用int
int(x)
其中x
是符号
将始终产生类型错误,但是您可以使用floor
功能以符号方式表示:
def f(x):
return sympy.exp(sympy.floor(x))
但是,首先使用floor
可能会挫败使用Symphy的某些目的,因为它可能会阻止发现分析解决方案,如下面的python会话所示:
>>> from sympy import *
>>> x = symbols("x")
>>> integrate(exp(floor(x)), (x, 0, 2)) # use of floor prevents evaluated result
Integral(exp(floor(x)), (x, 0, 2))
尽管您可以使用evalf
方法计算数值结果(最终由mpmath执行):
(也许这个结果表明Symphy可以更好地处理这个积分?Wolfram Alpha将其计算为1+e=3.71828…
,所以我想这里也至少有一个浮点精度错误-请参见注释re天花
)
在任何情况下,我不知道你是否认为适当的结果考虑了<代码> f <代码>没有<代码>楼层< /代码>:
>>> integrate(exp(x), (x, 0, 2))
-1 + exp(2)
>>> _.evalf()
6.38905609893065
奇怪的是,
integrate(exp(天花板(x)),(x,0,2)).evalf(100)
似乎在Symphy的浮点计算中至少导致了一个精度错误(它打印为1.e+1
),实际上只是一个分段常数函数的定积分,因此Symphy应该能够计算出一个精确的结果-看起来有一些未解决的问题
>>> integrate(exp(x), (x, 0, 2))
-1 + exp(2)
>>> _.evalf()
6.38905609893065