首页 > 解决方案 > 积分可能是发散的,或缓慢收敛的

问题描述

from scipy import integrate
import numpy as np
from mpmath import coth

DvDc = 6.5
dens = 5.65
Vs = 4.6e3
a = 3.3e-9
w0 = np.sqrt(2)*Vs/a
T = 50 
kb = 1.38064852e-5  # in eV`
j0 = (DvDc)**2 / ((2*np.pi)**2 *dens*Vs**5)

def func(x):
    return x*np.exp(-(x/w0)**2)*coth(x/(2*kb*T))
S = j0*integrate.quad(func, 0, np.inf)[0]
print(S)

嗨,所以我没有使用数值积分的经验,但我想知道是否有人可以提供帮助。在这里,我定义了一些变量,并且有一个我想要集成的函数。但是我回来了“积分可能是发散的,或者是慢慢收敛的。” 尽管我在 coth 的分母中添加了内容,但几乎得到了相同的结果。

有谁知道我是否犯了一个错误,或者我只是不能做这个积分。

谢谢!

标签: pythonnumerical-integration

解决方案


你的被积函数有一些困难。首先,虽然功能没有发散,但对于集成方案来说可能看起来很像。只需绘制它:

在此处输入图像描述

那是因为你的w0is 1971327996035.2234,所以exp(-x**2)抑制只发生在右边。使用变量替换y = x / w0使其正确。其次,函数没有定义在x=0(因为你除以 tanh),但可以用2 * kb * T.

from scipy import integrate
import numpy as np
import matplotlib.pyplot as plt

DvDc = 6.5
dens = 5.65
Vs = 4.6e3
a = 3.3e-9
w0 = np.sqrt(2) * Vs / a
T = 50
kb = 1.38064852e-5  # in eV`
j0 = (DvDc) ** 2 / ((2 * np.pi) ** 2 * dens * Vs ** 5)


def func(x):
    return x * np.exp(-((x / w0) ** 2)) / np.tanh(x / (2 * kb * T))


def func2(y):
    return np.where(
        y > 0,
        y * w0 * np.exp(-(y ** 2)) / np.tanh(y * w0 / (2 * kb * T)),
        2 * kb * T
    )

val, err = integrate.quad(func2, 0, np.inf)
val *= w0  # y = x / w0  =>  dx = dy * w0
print(val)
1.943067033976125e+24

的情节 func2

在此处输入图像描述


推荐阅读