モデルⅣ。
方法: E の関数として積分を実行し、使用される各電圧値の電流を出力します。これは、v_values の配列に対して繰り返されます。方程式は以下で見つけることができます。
この方程式の範囲は から-inf
までinf
ですが、極を避けるために (E+eV)^2-\Delta^2>0 および E^2-\Delta^2>0 となるように制限する必要があります。(\Delta_1 = \Delta_2)。したがって、現在 2 つの積分があり、範囲は-inf
から-gap-e*v
およびgap
までinf
です。
math range error
ただし、上記の制限を使用して厄介な E 値を除外したと思いますが、a を返し続けています。エラーの貼り付け: 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()