2017-03-29 25 views
-2

이 오류 RuntimeWarning: overflow encountered in exp이 표시되는 이유를 실제로 파악할 수 없습니다. 내가 구현하기 위해 노력하고있어 기능은 다음과 같습니다 값오버 플로우, 파이썬

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

:

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 

기능 Id 내가 룽게 - 쿠타-방법으로 해결하기 위해 노력하고 있어요 ODE의 일부입니다.

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 

Y [1] = 0이고 y [0] = 0 인 값으로 제. rk.py 파일은 단지 Runge-Kutta-Method의 구현 일뿐입니다.

+1

스택 오버플로에 오신 것을 환영합니다. [Minimal, Complete, Verifiable example] (https://stackoverflow.com/help/mcve)을 제공해주십시오. 나는이 문제를 재현 할 수 없다. 전체 추적을 제공하여 오류를 throw하는 행을 표시해야합니다. – roganjosh

+0

실제 값을 모두 제공하지 않았습니다. 가장 중요한 점은 문제를 일으킨 Id에 인수를 제공하지 않았기 때문입니다. – Prune

답변

1

Vin은 1.0으로 높은 값을 반환 할 수 있습니다. 그런 다음 무언가를 빼면 완전히 알려지지 않은 양이 생깁니다. 40을 곱하고 1을 뺀 다음 엡실론을 그 힘으로 올립니다. yp의 값에 따라이 프로세스에서 오버플로가 발생할 여지는 충분합니다. yp에 대해 충분히 음수 값을 지정하면 중간 계산을 참조하지 않고 문제가 발생합니다.

numpy.exp (n)은 700-800 범위의 일부 값에서 오버 플로우됩니다. yp는 아마도 < = -350 일 것입니다.