2017-03-29 2 views
-2

ne peut pas vraiment comprendre pourquoi cette erreur RuntimeWarning: overflow encountered in exp apparaît. La fonction que je suis en train de mettre en œuvre est:débordement dans exp, python

Id = lambda t_u, yp: Is * (np.exp((Vin(t_u) - L*yp)/(n_Ut*Ut)) - 1.0) 

avec des valeurs:

Vin = lambda t: Vo * np.sin(2*np.pi*w*t) 

L = 50e-3 # 50 mH 
Vo = 5 # 5 V 
w = 50 # 50 Hz 
Is = 1e-9 # 1 nA 
Ut = 25e-3 # 25 mV 
n_Ut = 1.0 

La fonction Id fait partie d'un ODE que je suis en train de résoudre avec Runge-Kutta-Méthode.

EDIT:

Methoden\Serien\6>python circuit.py 
Traceback (most recent call last): 
    File "circuit.py", line 148, in <module> 
    perform_experiment(exrk_o5(), "exrk_o5") 
    File "circuit.py", line 48, in perform_experiment 
    t, y = run_method(method, label) 
    File "circuit.py", line 69, in run_method 
    t, y = method.__call__(circuit_rhs, y[0, :], t_end, n_steps) 
    File "C:\Users\-\numerical_methodes\6\rk.py", line 49, in __call__ 
    t[k+1],y[k+1, :] = self.step(f, y[k, :], t[k], dt) 
    File "C:\Users\-\numerical_methodes\6\rk.py", line 102, in step 
    dydt[:, i] = rhs(t + c[i] * dt, y0 + dt * np.dot(A[i, :].T, dydt.T)) 
    File "circuit.py", line 38, in circuit_rhs 
    dydt= np.array ([y[1] , Id(t, y [1]) /(C*L) - y [1]/(R*C) - y [0]/(C*L)]) 
    File "circuit.py", line 27, in <lambda> 
    Id = lambda t_u, yp: Is * (np.exp((Vin(t_u) - L*yp)/(n_Ut*Ut)) - 1.0) 
FloatingPointError: overflow encountered in exp 

où y [1] = 0 et y [0] = 0, en tant que premières valeurs. Le fichier rk.py est juste l'implémentation de la méthode Runge-Kutta.

+1

Bienvenue dans Stack Overflow. Veuillez fournir un [exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve). Je ne peux pas reproduire ce problème. Vous devez également fournir une trace complète pour montrer quelle ligne renvoie l'erreur. – roganjosh

+0

Vous n'avez pas fourni toutes les valeurs réelles. Plus particulièrement, vous n'avez pas fourni les arguments à Id qui ont causé le problème. – Prune

Répondre

1

Vin peut renvoyer une valeur aussi élevée que 1,0; alors vous soustrayez quelque chose, résultant en une quantité totalement inconnue. Vous multipliez cela par 40, soustrayez 1, et élever epsilon à ce pouvoir. Selon la valeur de yp, il y a beaucoup de place pour le débordement dans ce processus. Une valeur suffisamment négative pour yp provoquera le problème sans référence aux calculs intermédiaires.

numpy.exp (n) déborde pour une valeur comprise entre 700 et 800. Cela suggère que yp est peut-être < = -350.