我是一位试图对超导体-超导体结的电流-电压特性进行建模的物理学家。
该模型的等式为:
通过评估给定电压(或代码中)的积分来计算电流值(或代码中)。I
v
我已经在Python中尝试过了。代码如下所示。
from scipy import integrate
from numpy import *
import pylab as pl
import math
ec = 1.6021764*10**(-19)
r = 2500
gap = 200*10**(-6)*ec
g = (gap)**2
t = 0.04
k = 1.3806503*10**(-23)
kt = k*t
v_values = arange(0,0.001,0.00001)
I=[]
for v in v_values:
result, error = integrate.quad (lambda E:(abs(E)/sqrt((E**2-g)))*(abs(E+ec*v)/(sqrt(((E+ec*v)**2-g))))*(math.exp(-E/kt)*(math.exp(-ec*v/kt)-1)),(-inf),(-gap*0.9-ec*v))
I.append(result)
I = array(I)
I2=[]
for v in v_values:
result2 = integrate.quad(lambda E:(abs(E)/sqrt((E**2-g)))*(abs(E+ec*v)/(sqrt(((E+ec*v)**2-g))))*(math.exp(-E/kt)*(math.exp(-ec*v/kt)-1)),(gap*0.9),(inf))
I2.append(result2)
I2 = array(I2)
pl.plot(v_values,I,'-b',v_values,I2,'-r')
pl.xlabel(r'Voltage ($V$)')
pl.ylabel(r'Current ($A$)')
pl.title('Theoretical I(V) curve')
pl.grid(True)
pl.savefig('IVcurve.png')
pl.show()
但是,我收到了OverflowError: math range error
。有人有什么想法可以克服吗?对10**n
和积分很抱歉。删除指数(返回0)后,代码将运行,这就是问题所在。
有什么想法可以用Python或其他语言建模吗?
就像jeffdk在下面的回答中提到的那样:请检查您的值->从E的平方中减去g = E从-inf变为+ inf !并且出于调试目的,最好定义一个函数F来定义您的被积数(而不是使用lambda形式),以便您可以按其因子/项/部分对其进行拆分,以找出罪魁祸首(尽管在这种情况下,您所有的因素都有麻烦)。
—
GertVdE