【问题标题】:The integral is probably divergent, or slowly convergent积分可能是发散的,或缓慢收敛的
【发布时间】:2020-03-14 07:12:39
【问题描述】:
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 的分母中添加了内容,但几乎得到了相同的结果。

有谁知道我是否犯了错误,或者我只是无法做到这一点。

谢谢!

【问题讨论】:

  • 什么是integrate.quad?
  • Coth 未定义为零,这可能会导致数值积分出现问题
  • 嗨,integrate.quad 来自 scipy 包
  • 你知道正确答案是什么吗?我得到 4.598332106511304e-20
  • 如果你看一下 cot(????) 的图形,你会发现它是一个周期函数,从正无穷大到负无穷大。不管价值有多大??????得到,它将继续以这种方式重复,并且永远不会倾向于任何一个值????。因此,这里的问题是无穷大而不是 0。

标签: python numerical-integration


【解决方案1】:

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

那是因为您的w01971327996035.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的情节:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2013-08-01
    • 2012-05-21
    • 2017-11-17
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多