我在积分上得到了一个 nan 结果,Python

I'm getting a nan result on an integral, 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 的结果。

我该如何解决这个问题?

How do I fix this?

从某种意义上说,您没有:没有什么可解决的。你给出的函数在区间 (0, ∞) 内不可积(它既不是黎曼可积 也不是 勒贝格可积),即使有不正确积分的概念也是如此。

更详细地说,您尝试集成的函数未在 x=2 中定义;在 2 附近,它有一个 1/x 类型的奇点。如果存在有意义的积分值,则它应等于 f02 的积分与 f 从 [=13] 的积分之和=] 到 。这两个都可以定义为 不正确的 积分,但第一个发散为 -∞ 而第二个发散为 +∞。因此,总和不是 well-defined,任何实数都与任何其他数字一样有效。换句话说,NaN 或异常是 SymPy 在这里可以给出的唯一合理响应。

但是,并非一无所有!您 可以 在技术上定义一个 Cauchy principal value for this integral, and SymPy has support 来计算这些主要价值。这是一个例子:

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

如果您想要独立证实,请尝试将相同的积分提交给 Wolfram Alpha。这是我提交的 link。结果是“积分不收敛”,但也可能显示柯西主值。 (这里似乎存在一些不确定性:对我来说,主要价值有时出现有时不出现。)