Ich bin ein Physiker, der versucht, die Strom-Spannungs-Eigenschaften eines Supraleiter-Supraleiter-Übergangs zu modellieren.
Die Gleichung für dieses Modell lautet:
Stromwerte ( oder im Code) werden berechnet, indem dieses Integral für gegebene Spannungen ( V oder im Code) ausgewertet wird .I
v
Ich habe dies in Python versucht. Der Code wird unten angezeigt.
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()
Ich erhalte jedoch OverflowError: math range error
. Hat jemand eine Idee, wie dies überwunden werden kann? Entschuldigung für die 10**n
und langen Integrale. Der Code wird ausgeführt, wenn die Exponentiale entfernt werden (gibt 0 zurück), und hier liegt das Problem.
Irgendwelche Ideen, wie dies in Python oder einer anderen Sprache modelliert werden kann?
python
numpy
integral-equations
Abfrage
quelle
quelle
Antworten:
Erstens ist es immer gut, das Problem weiter zu debuggen und genau zu sehen, woher (welcher Begriff, für welche Parameter) der Überlauf kommt. Dies war mir aus der Frage nicht klar.
Sobald Sie genau wissen, wo das Problem liegt, können Sie das Problem besser diagnostizieren. Nehmen wir zum Beispiel das Überlaufproblem. Dies ist irgendwo über 1e300, wenn ich mich richtig erinnere.
Viel Glück!
quelle