我想尝试对
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)
会给出错误,因为它无法比较复数。
不,
nquad
无法按照书面说明执行此操作,并且 SciPy 中没有其他函数可以做到这一点。我认为你需要变换积分。请检查我的数学,但我认为这是一个有效的方法。 (如果有什么需要为后代修复的地方,请在评论中留言。)
所以第一个完全真实的部分是:
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)