sympy:如何评估绝对值的积分
Posted
技术标签:
【中文标题】sympy:如何评估绝对值的积分【英文标题】:sympy: how to evaluate integral of absolute value 【发布时间】:2016-09-19 07:57:56 【问题描述】:当我尝试简化sympy
中的以下积分时,它不会计算,即输出为 $\int_-1^1 |z| dz$ 而我期望的输出是 1。
z = symbols('z', real=True)
a = integrate(abs(z), (z, -1, 1))
simplify(a)
将计算z
上没有绝对值的相似积分。
如何让sympy
评估这个积分?
【问题讨论】:
我的印象是 sympy 的简化还没有达到应有的水平。 simpy 中还有其他几种简化方法(trigsimp、ratsimp、powsimp、combsimp,...),但我不指望它们能够简化积分。有时简化会失败,即使它看起来很简单。在这种情况下,您也可以使用 .evalf() 方法。也可以在这里看看:docs.sympy.org/latest/tutorial/simplification.html 【参考方案1】:integrate
已经尽其所能评估积分。如果你得到一个 Integral
对象,这意味着它无法评估它。唯一可能有帮助的是以 SymPy 可以识别的方式重写被积函数。
查看this issue,看起来一种解决方法是将其重写为Heaviside:
In [201]: z = symbols('z', real=True)
In [202]: a = integrate(abs(z).rewrite(Heaviside), (z, -1, 1))
In [203]: a
Out[203]: 1
【讨论】:
【参考方案2】:我相信你应该使用 Sympy 内置的 Abs() 函数。
享受吧!
【讨论】:
您好,感谢您的回复。不幸的是,我已经尝试过内置的sympy.Abs
功能,但没有成功。另外,我相信abs
和sympy.Abs
是同一个功能。
abs 是正确的,因为它只是调用 z.__abs__
方法,该方法为每个对象(浮点数或 sympy 符号等)定义不同。以上是关于sympy:如何评估绝对值的积分的主要内容,如果未能解决你的问题,请参考以下文章