0

我有两个带有多个参数的函数:

import numpy as np
from scipy.integrate import quad

gamma_s=0.1 #eV
gamma_d=0.1 #eV
T=298 #K
homo=-5.5 #eV
Ef=-5 #eV
mu=0 #eV just displaces the function

#Fermi-Dirac distribution
k=8.617333262e-5 #eV/K
def fermi (E:float, mu:float, T:float) -> float:
    return 1/(1+np.exp((E-mu)/(k*T)))

#Lorentzian density of states
gamma=gamma_d+gamma_s
def DoS (E:float, gamma:float, homo:float, Ef:float) -> float:
    epsilon=homo-Ef
    v=E-epsilon
    u=gamma/2
    return gamma/(np.pi*((v*v)+(u*u)))

我知道如果我只想整合其中一个,比如说fermi,那么我会使用

quad(fermi, -np.inf, np.inf, args=(mu,T))

fermi*DoS但是我需要他们的产品相对于他们的公共变量的积分E,我无法想象如何使用它,因为文档quad中没有提到它。

我想我可以将另一个函数定义integrand为他们的乘积并计算它的积分,但这听起来有些混乱,我更喜欢更简洁的方法。

4

1 回答 1

1

如果内联的东西对你更有吸引力,你不必定义一个新的、独立的函数:

quad(lambda e: fermi(e, mu, T) * DoS(e, gamma, homo, T), -np.inf, np.inf)

也就是说,我们使用部分应用程序fermi将和的乘积DoS变成一个新的 Python lambda

只是为了给需要做这样的事情提供一些数学上的理由......

从数学上讲,只能积分(可积)函数(或从可积函数派生的函数空间的元素)。要整合两个功能的乘积,我们必须说它们的乘积是指哪个功能。一段时间后,这可能会感觉很明显,但在这里我认为值得注意的是,人类定义

(fg)(x) := f(x)g(x)

以同样的方式,必须为函数的乘积赋予数学意义,必须为两个 Python 函数的乘积赋予意义。尤其是因为 Python 函数可以返回各种各样的东西,其中很多东西相乘是没有意义的,所以不可能有一个通用的定义。

于 2021-04-23T15:59:52.793 回答