gpt4 book ai didi

具有复杂积分界限的 Python scipy.integrate.quad

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:59 25 4
gpt4 key购买 nike

我正在使用 Python 的 mpmath.gammainc 计算上部不完全 Gamma 函数:

import numpy as np
from mpmath import gammainc

z = 0 # define power of t as t^(-1)
a = 0.5+0.4j # integral lower limit
b = np.inf # integral upper limit

myfun = np.array([gammainc(z,a,b,regularized=False)], dtype=complex)

它是 mpmath 文档中定义的一维积分。我想使用 scipy 的 quad 比较这个结果 myfun功能:

myfun2 = scipy.integrate.quad(exp(-t)/t, a, inf)[0]

但是我认为 quad 不接受积分上限/下限的复杂参数。我不知道是否可以将问题分成实部/虚部。有什么想法吗?

最佳答案

积分应该取自 a 向右的水平半线。 (如果 a 是一个负实数,这将失败,但无论如何这是一个分支切割区域)。这条半线由 a+t 参数化,其中 t 是实数,从 0 到无穷大。因此,对 exp(-(a+t))/(a+t) 从 0 到无穷大进行积分。

此外,SciPy 中的 quad 需要实值函数,因此将其分为实部和虚部。并且不要忘记该函数必须作为可调用对象传递,例如 lambda t: np.exp(-t),而不仅仅是 exp(-t)

from scipy import integrate
myfun2_re = integrate.quad(lambda t: np.real(np.exp(-(a+t))/(a+t)), 0, np.inf)[0]
myfun2_im = integrate.quad(lambda t: np.imag(np.exp(-(a+t))/(a+t)), 0, np.inf)[0]
myfun2 = myfun2_re + 1j*myfun2_im
print(myfun2)

这打印

(0.3411120086192922-0.36240971724285814j)

myfun相比,

array([ 0.34111201-0.36240972j])

顺便说一句,如果您只想转换单个数字,则无需将 myfun 包装到数组中:complex(gammainc(...)) 即可。

关于具有复杂积分界限的 Python scipy.integrate.quad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51746726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com