fis*_*oni 1 python numerical-integration
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)
Run Code Online (Sandbox Code Playgroud)
嗨,所以我没有使用数值积分的经验,但我想知道是否有人可以提供帮助。在这里,我定义了一些变量,并有一个要集成的函数。但是我得到了“积分可能是发散的,或者慢慢收敛的。” 尽管我在 coth 的分母中添加了内容,但几乎得到了相同的结果。
有谁知道我是否犯了一个错误,或者我只是不能做到这一点。
谢谢!
您的被积函数存在一些困难。首先,虽然函数不发散,但对于集成方案来说可能看起来很像。只需绘制它:
那是因为你w0是1971327996035.2234,所以exp(-x**2)抑制只发生在右边很远的地方。使用变量替换y = x / w0使其正确。其次,该函数未定义 at 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)
Run Code Online (Sandbox Code Playgroud)
1.943067033976125e+24
Run Code Online (Sandbox Code Playgroud)
情节 func2: