Soy un físico que intenta modelar las características de voltaje de corriente de una unión superconductor-superconductor.
La ecuación para este modelo es:
Los valores de corriente ( o en el código) se calculan evaluando esta integral para los voltajes dados ( V o en el código).I
v
He intentado esto en Python. El código se muestra a continuación.
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()
Sin embargo, recibo OverflowError: math range error
. ¿Alguien tiene alguna idea de cómo se puede superar esto? Disculpas por las 10**n
integrales largas. El código se ejecuta cuando se eliminan los exponenciales (devuelve 0), y aquí radica el problema.
¿Alguna idea de cómo se puede modelar esto en Python o en cualquier otro idioma?
python
numpy
integral-equations
consulta
fuente
fuente
Respuestas:
Primero, siempre es bueno depurar aún más el problema y ver exactamente de dónde (qué término, para qué parámetros) proviene el desbordamiento. Esto no me quedó claro a partir de la pregunta.
Una vez que sepa con precisión cuál es el problema, puede diagnosticarlo mejor. Por ejemplo, tomemos el problema de desbordamiento. Esto está en algún lugar por encima de 1e300 si no recuerdo mal.
¡Buena suerte!
fuente