我有两个接受多个参数的函数:
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
作为它们的乘积并计算它的积分,但是这听起来有点混乱,我更喜欢一种更干净的方法
如果内联函数更吸引您,则不必定义新的独立函数:
也就是说,我们use partial application将
fermi
和DoS
的乘积转换成一个新的Pythonlambda
只是为了从数学上证明需要这样做
从数学上讲,只能积分(可积)函数(或从可积函数导出的函数空间元素)。要集成两个函数的乘积,我们必须说明哪个函数是它们的乘积。过了一段时间,这可能感觉很明显,但我认为值得注意的是,人类定义了
(fg)(x):=f(x)g(x)
同样,我们必须给函数的乘积赋予数学意义,我们必须给两个Python函数的乘积赋予意义。尤其是因为Python函数可以返回各种各样的内容,其中许多内容对于乘法来说毫无意义,所以不可能有一个通用的定义
相关问题 更多 >
编程相关推荐