【发布时间】:2021-02-19 20:05:53
【问题描述】:
我想对离散数据集(给定的广告熊猫系列)进行数值积分 - 此处为橙色 - 乘以给定的分析指数函数(费米-狄拉克分布的导数)-此处为蓝色-。但是,当指数变大(例如对于小 T)以及导数 fermi_dT(E, mu, T)explodes 时,我会失败。我找不到以适当的方式重写fermi_dT(E, mu, T)来完成它的方法。
下面是一个最小的例子(不是熊猫系列),我用高斯模拟了数据集。
如果 T
import numpy as np
from scipy import integrate
import matplotlib.pyplot as plt
scale_plot = 1e6
kB = 8.618292134831462e-5 #in eV
Ef = 2.0
def gaussian(E, amp, E0, sig):
return amp * np.exp(-(E-E0)**2 / sig)
def fermi_dT(E, mu, T):
return ((np.exp((E - mu) / (kB * T))*(E-mu)) / ((1 + np.exp((E - mu) / (kB * T)))**2*kB*T**2))
T = 100.0
energies = np.arange(1.,3.,0.001)
plt.plot(energies, (energies-Ef)*fermi_dT(energies, Ef, T))
plt.plot(energies, gaussian(energies, 1e-5, 1.8, .01))
plt.plot(energies, gaussian(energies, 1e-5, 1.8, .01)*(energies-Ef)*fermi_dT(energies, Ef, T)*scale_plot)
plt.show()
cum = integrate.cumtrapz(gaussian(energies, 1e-5, 1.8, .01)*(energies-Ef)*fermi_dT(energies, Ef, T), energies)
print(cum[-1])
【问题讨论】:
标签: python numpy scipy integer-overflow