有没有办法在Python中以数字方式集成两个函数的乘积?

2024-04-29 08:42:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个接受多个参数的函数:

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进行积分,因为在documentation中没有提到它

我想我可以定义另一个函数integrand作为它们的乘积并计算它的积分,但是这听起来有点混乱,我更喜欢一种更干净的方法


Tags: 函数importreturndefnpfloatgammaev
1条回答
网友
1楼 · 发布于 2024-04-29 08:42:39

如果内联函数更吸引您,则不必定义新的独立函数:

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

也就是说,我们use partial applicationfermiDoS的乘积转换成一个新的Python lambda

只是为了从数学上证明需要这样做

从数学上讲,只能积分(可积)函数(或从可积函数导出的函数空间元素)。要集成两个函数的乘积,我们必须说明哪个函数是它们的乘积。过了一段时间,这可能感觉很明显,但我认为值得注意的是,人类定义了

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

同样,我们必须给函数的乘积赋予数学意义,我们必须给两个Python函数的乘积赋予意义。尤其是因为Python函数可以返回各种各样的内容,其中许多内容对于乘法来说毫无意义,所以不可能有一个通用的定义

相关问题 更多 >