Jestem fizykiem, który próbuje modelować charakterystykę prądowo-napięciową złącza nadprzewodnik-nadprzewodnik.
Równanie dla tego modelu to:
Wartości prądu ( lub w kodzie) oblicza się, oceniając tę całkę dla danych napięć ( lub w kodzie).I
v
Próbowałem tego w Pythonie. Kod pokazano poniżej.
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()
Jednak otrzymuję OverflowError: math range error
. Czy ktoś ma jakieś pomysły, jak to rozwiązać? Przepraszamy za 10**n
całki i długie. Kod jest uruchamiany, gdy wykładnicze są usuwane (zwraca 0), i na tym polega problem.
Wszelkie pomysły, w jaki sposób można to modelować w języku Python lub innym języku?
python
numpy
integral-equations
pytanie
źródło
źródło
Odpowiedzi:
Po pierwsze, zawsze dobrze jest debugować problem i zobaczyć dokładnie, skąd (jaki termin, dla jakich parametrów) pochodzi przepełnienie. To pytanie nie było dla mnie jasne.
Gdy dokładnie wiesz, na czym polega problem, możesz lepiej zdiagnozować problem. Weźmy na przykład problem z przepełnieniem. To jest gdzieś powyżej 1e300, jeśli dobrze pamiętam.
Zauważ, że wyraźnie prosisz kod o wykonanie niepoprawnej całki (-inf, inf), więc musisz upewnić się, że integra, w którą wpisujesz, jest dobrze zachowana dla liczb w całej tej domenie! Pomoże to spróbować skrócić całkę przy najmniejszej możliwej wartości, nazwijmy to , gdzie fizycznie wiesz, że nie oczekujesz żadnego wkładu w całkę od do inf.Emax Emax
Powodzenia!
źródło