Python:以数字方式查找积分的主值

标签 python scipy integration sympy

我正在使用 python 以数值方式求解积分:

enter image description here

其中 a(x) 可以取任何值; [-1;1] 的正数、负数、内部或外部,eta 是无穷小的正量。有第二个外积分改变了a(x)的值

我正在尝试使用 Sokhotski–Plemelj theorem 解决这个问题: enter image description here

然而,这涉及确定原则值,我在 python 中找不到任何方法。我知道它是在 Matlab 中实现的,但有谁知道在 python 中确定主值的库或其他方法(如果存在主值)?

最佳答案

您可以使用 sympy 直接计算积分。它的 eta->0 的实部是主值:

from sympy import *
x, y, eta = symbols('x y eta', real=True)
re(integrate(1/(x - y + I*eta), (x, -1, 1))).simplify().subs({eta: 0})
# -> log(Abs(-y + 1)/Abs(y + 1))

Matlab 的符号工具箱 int 给你同样的结果,当然(我不知道 Matlab 中与此相关的其他相关工具——如果你知 Prop 体的请说明)。

您询问了主值的数值计算。答案是,如果您只有一个函数 f(y),您不知道其分析形式或行为,通常不可能用数值计算它们。您需要知道诸如被积函数的极点在哪里以及它们的顺序之类的事情。

另一方面,如果您知道积分的形式为 f(y)/(y - y_0),则 scipy.integrate.quad 可以计算主体对您的值(value),例如:

import numpy as np
from scipy import integrate, special

# P \int_{-1}^1 dx 1/(x - wvar) * (1 + sin(x))
print(integrate.quad(lambda x: 1 + np.sin(x), -1, 1, weight='cauchy', wvar=0))
# -> (1.8921661407343657, 2.426947531830592e-13)

# Check against known result
print(2*special.sici(1)[0])
# -> 1.89216614073

参见 here了解详情。

关于Python:以数字方式查找积分的主值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19275657/

相关文章:

Android 和 Paypal API 集成

c# - DotnetNuke 模块集成

Python wget 保存文件。如何获取变量中的数据

python - python中的递归函数

python - 使用单个 os.mkdir 函数生成超过 1 个目录 (Python)

python - 从 scipy 稀疏矩阵中提取非主对角线?

python - 在 64 位 Windows 上安装 NumPy 和 SciPy(使用 Pip)

python - 是否有基于浏览器的 Python IDE,例如 R 的 RStudio 服务器?

python - scipy.stats.maxwell 中的 loc 和 scale 参数是什么?

java - 积分贝叶斯概率分布