使用 scipy.integrate.nquad 对结果为复数的积分进行积分

问题描述 投票:0回答:1

我想尝试对

1/(1+x**2+y**2)
的积进行数值积分,其中
y
是从
0
sqrt(16-x**2)
x
是从
0
5

问题是结果是一个复数。

scipy.nquad
可以处理吗或者还有其他功能吗?

使用

scipy.nquad
flip, a, b = b < a, min(a, b), max(a, b)
会给出错误,因为它无法比较复数。

python numpy scipy complex-numbers
1个回答
0
投票

不,

nquad
无法按照书面说明执行此操作,并且 SciPy 中没有其他函数可以做到这一点。我认为你需要变换积分。请检查我的数学,但我认为这是一个有效的方法。 (如果有什么需要为后代修复的地方,请在评论中留言。)

Integral transformation math

所以第一个完全真实的部分是:

from scipy.integrate import dblquad

def f1(y, x):
    return 1 / (1 + x**2 + y**2)
pt1 = dblquad(f1, 0, 4, 0, lambda x: (16 - x**2)**.5)
pt1  # (2.2252005569348934, 8.0419480812278e-09)

第二个虚部类似于:

def f2(v, u):
    return 1 / (1 + (u + 4)**2 - v**2)
pt2 = dblquad(f1, 0, 1, 0, lambda u: (8*u + u**2)**.5)
pt2  # (0.8624184444044698, 1.75401093649441e-09)
© www.soinside.com 2019 - 2024. All rights reserved.