数值积分问题:IntegrationWarning 积分可能是发散的,或缓慢收敛的

计算科学 Python 数字 scipy 一体化
2021-12-05 07:18:43

我正在尝试使用scipy's integrate.quad如下方法对函数进行数值积分。

G(α)=4απ0xeαx2(π/2+tan1[Y0(x)/J0(x)])dx

import numpy as np
from scipy import integrate
from scipy.special import k0,j0,y0,k1
def G(alpha=743711.5,T=5.5e-5,sw=10.65):
    pi = 3.14
    fun = lambda x: x*np.exp(-1*alpha*x**2)*(pi/2+np.arctan(y0(x)/j0(x)))
    val,err = integrate.quad(fun,0, np.inf)
    return val,err
val,err = G()
print (val,err)

但是,我得到“积分可能是发散的,或者是慢慢收敛的。” 我试图设置一个非常大的限制,例如limit = 10000000. 但是,同样的警告是。有谁知道如何解决这个问题?

https://doi.org/10.1029/TR033i004p00559 编辑:添加方程式源

1个回答

问题可能是α与的值相比是大的x2数值积分器可能正在选择。对于任何值x1/α被积函数将接近于零(对于足够大的值,它的浮点数正好为零)。被积函数在x=0. 因此,将限制设置为较大的值是没有意义的。相反,尝试将其设置为类似10/α,20/α,...并检查结果的收敛性。

也许最好的方法是定义一个新变量u=x/α并整合关于u. 那么数值积分器应该可以工作。