我在积分上得到了一个 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
类型的奇点。如果存在有意义的积分值,则它应等于 f
从 0
到 2
的积分与 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。结果是“积分不收敛”,但也可能显示柯西主值。 (这里似乎存在一些不确定性:对我来说,主要价值有时出现有时不出现。)
我正在编写一个代码,试图生成积分的答案
我有
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
类型的奇点。如果存在有意义的积分值,则它应等于 f
从 0
到 2
的积分与 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。结果是“积分不收敛”,但也可能显示柯西主值。 (这里似乎存在一些不确定性:对我来说,主要价值有时出现有时不出现。)