Python中的模型IV

876*_*674 6 python integration physics numpy scipy

模型四.

方法:执行积分,作为E的函数,为每个使用的电压值输出电流.对于v_values数组重复此操作.该等式可以在下面找到.

在此输入图像描述

尽管该等式中的极限范围-inf为0 inf,但是必须限制极限以使(E + eV)^ 2- \Δ^ 2> 0和E ^ 2- \Δ^ 2> 0,以避免极点.(\ Delta_1 =\Delta_2).因此,目前有两个积分,从限制-inf-gap-e*vgapinf.

但是,我一直回来,math range error虽然我相信我已经通过使用上述限制排除了麻烦的E值.错误的偏见:http://pastie.org/private/o3ugxtxai8zbktyxtxuvg

对这个问题的模糊性表示歉意.但是,任何人都可以看到明显的错误或代码滥用吗?

我的尝试:

from scipy import integrate
from numpy import *
import scipy as sp
import pylab as pl
import numpy as np
import math

e = 1.60217646*10**(-19)
r = 3000
gap = 400*10**(-6)*e
g = (gap)**2
t = 0.02
k = 1.3806503*10**(-23)
kt = k*t

v_values = np.arange(0,0.001,0.0001)

I=[]
for v in v_values:
    val, err = integrate.quad(lambda E:(1/(e*r))*(abs(E)/np.sqrt(abs(E**2-g)))*(abs(E+e*v)/(np.sqrt(abs((E+e*v)**2-g))))*((1/(1+math.exp((E+e*v)/kt)))-(1/(1+math.exp(E/k*t)))),-inf,(-gap-e*v)*0.9)
    I.append(val)
I = array(I)

I2=[]
for v in v_values:
    val2, err = integrate.quad(lambda E:(1/(e*r))*(abs(E)/np.sqrt(abs(E**2-g)))*(abs(E+e*v)/(np.sqrt(abs((E+e*v)**2-g))))*((1/(1+math.exp((E+e*v)/kt)))-(1/(1+math.exp(E/k*t)))),gap*0.9,inf)
    I2.append(val2)
I2 = array(I2)

I[np.isnan(I)] = 0
I[np.isnan(I2)] = 0

pl.plot(v_values,I,'-b',v_values,I2,'-b')
pl.show()
Run Code Online (Sandbox Code Playgroud)

876*_*674 1

最终解决这个问题的最好方法是使用 heaviside 函数来防止E变量超过\Delta变量。