我正在得到一个积分的 nan 结果,Python



我正在编写一段代码,试图生成积分的答案

我有

import math
import sympy as sy
def f(x):
nume = (x**2)
denom = (((x**2)-4)*((x**2)+9))
y = nume/denom
return y
xInit = 0
xFin = math.inf
x = sy.Symbol("x")
print(sy.integrate(f(x), (x, xInit, xFin)))

然而,当运行此代码时,当我期望((3*pi(/26(作为打印结果时,我得到了nan的结果。

我该如何解决这个问题?

如何修复此问题?

从某种意义上说,你没有:没有什么可修复的。你给出的函数在区间(0, ∞)上是不可积的(它既不是Riemann可积的也不是Lebesgue可积的(,即使有不正当积分的概念。

更详细地说,您试图集成的函数并没有在x=2中定义;在2附近,它具有1/x型奇异性。如果积分存在一个有意义的值,它应该等于f02的积分与f2的积分之和。这两个积分都可以定义为不适当的积分,但第一个积分发散到-∞,而第二个积分发散成+∞。因此,这个和不是定义明确的,任何实数都是有效的答案。换句话说,NaN或异常是SymPy在这里可以给出的唯一合理的响应。

然而,一切都没有失去!您可以从技术上定义该积分的Cauchy主值,SymPy支持计算这些主值。这里有一个例子:

Python 3.10.4 (main, Mar 25 2022, 07:25:23) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from sympy import Integral, oo
>>> from sympy.abc import x
>>> Integral(x**2 / ((x**2 - 4)*(x**2 + 9)), (x, 0, oo)).principal_value()
3*pi/26

如果你想要独立的确证,试着把同样的积分提交给WolframAlpha。这是我提交的链接。结果是";积分不收敛";,但是也可以示出柯西主值。(这里似乎有一些不确定性:对我来说,主要价值有时会出现,有时不会。(

最新更新