python - 积分可能是发散的,或缓慢收敛的
问题描述
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 的分母中添加了内容,但几乎得到了相同的结果。
有谁知道我是否犯了一个错误,或者我只是不能做这个积分。
谢谢!
解决方案
你的被积函数有一些困难。首先,虽然功能没有发散,但对于集成方案来说可能看起来很像。只需绘制它:
那是因为你的w0
is 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
:
推荐阅读
- python - 对我来说,自动补全不起作用 jupyter notebook 并且内核经常崩溃
- vue.js - Quasar vue-i18n-loader 错误:最终加载程序没有返回缓冲区或字符串
- javascript - Javascript 在本地主机上工作,但在部署 github 页面或 vercel 时停止
- typescript - TypeScript:如何使用 const 断言来处理函数的参数
- xml - 我可以使用什么 XSLT 根据节点内的字段将重复出现的复杂节点转换为单独的字段?
- git - 在 Jenkins 上自动化 Git 参数
- fragment-shader - 在顶点和片段着色器之间传递值时着色器值转换错误
- r - 使用时间戳保存 rdata 环境
- java - 为什么在并发环境中读取值时需要(读取)锁?
- r - 在 SummarizedExperiment 对象中设置子集时出错