Python : Laufzeit Warnung : Überlauf aufgetreten, die in Quadrat, addieren, multiplizieren, subtrahieren
Ich bin Anfang mit Python, damit ich vielleicht Fragen, eine nicht so subtile Frage, aber nach ziemlich viel recherche konnte ich nicht beheben dieser Fehler.
Ich bin wirklich versucht zu lösen, ein Physik-problem mit dem Grau-Scott-Modell, aber ich bin stecken, ganz am Ende des Codes : die Ergebnisse werden nicht als zahlen, und es ist ein überlauf aufgetreten im Quadrat, addieren, multiplizieren und subtrahieren.
Jemand hier der eine Ahnung von wo das kommt ?
Dank !
Dies sind die Anfangsbedingungen für das problem, das ich zu lösen versuche :
n = 192
Du, Dv, F, k = 0.00016, 0.00008, 0.035, 0.065
dh = 5/(n-1)
T = 8000
dt = .9 * dh**2 / (4*max(Du,Dv))
nt = int(T/dt)
uvinitial = numpy.load('./uvinitial.npz')
Uin = uvinitial['U']
Vin = uvinitial['V']
Nun, hier sind meine Funktionen :
def Nd1(U,V) :
return - U*(V)**2 + F*(1-U)
def Nd2(U,V) :
return U*(V)**2 -(F+k)*V
def gray_scott_solve(Du, Dv, dh, dt, nt, Uin, Vin, Nd1, Nd2):
Uplus = Uin.copy()
Vplus = Vin.copy()
for n in range(nt):
U = Uplus.copy()
V = Vplus.copy()
Uplus[1:-1,1:-1] = ( Nd1(U[1:-1,1:-1], V[1:-1,1:-1]) + Du/(dh**2) \
*(U[2:,1:-1] + U[:-2,1:-1] - 4*U[1:-1,1:-1]) \
+ U[1:-1,2:] + U[1:-1,:-2] )*dt \
+ U[1:-1,1:-1]
Uplus[:,-1] = Uplus[:,-2]
Uplus[-1,:] = Uplus[-2,:]
Uplus[:,0] = Uplus[:,1]
Uplus[0,:] = Uplus[1,:]
Vplus[1:-1,1:-1] = ( Nd2(U[1:-1,1:-1], V[1:-1,1:-1]) + Du/(dh**2) \
*(V[2:,1:-1] + V[:-2,1:-1] - 4*V[1:-1,1:-1]) \
+ V[1:-1,2:] + V[1:-1,:-2] )*dt \
+ V[1:-1,1:-1]
Vplus[:,-1] = Vplus[:,-2]
Vplus[-1,:] = Vplus[-2,:]
Vplus[:,0]= Vplus[:,1]
Vplus[0,:]= Vplus[1,:]
return U, V
Möchte ich nun die Ergebnisse gedruckt ich bin auf der Suche nach :
U, V = gray_scott_solve(Du, Dv, dh, dt, nt, Uin, Vin, Nd1, Nd2)
print(U[100,::40])
Und ich endlich diesen Fehler :
[ nan nan nan nan nan]
C:\Users\Anto\Anaconda3\lib\site-packages\ipykernel\__main__.py:2: RuntimeWarning: overflow encountered in square from ipykernel import kernelapp as app
C:\Users\Anto\Anaconda3\lib\site-packages\ipykernel\__main__.py:2: RuntimeWarning: overflow encountered in multiply from ipykernel import kernelapp as app
C:\Users\Anto\Anaconda3\lib\site-packages\ipykernel\__main__.py:5: RuntimeWarning: overflow encountered in square
C:\Users\Anto\Anaconda3\lib\site-packages\ipykernel\__main__.py:5: RuntimeWarning: overflow encountered in multiply
C:\Users\Anto\Anaconda3\lib\site-packages\ipykernel\__main__.py:11: RuntimeWarning: invalid value encountered in add
C:\Users\Anto\Anaconda3\lib\site-packages\ipykernel\__main__.py:11: RuntimeWarning: overflow encountered in multiply
C:\Users\Anto\Anaconda3\lib\site-packages\ipykernel\__main__.py:11: RuntimeWarning: invalid value encountered in subtract
C:\Users\Anto\Anaconda3\lib\site-packages\ipykernel\__main__.py:18: RuntimeWarning: invalid value encountered in add
C:\Users\Anto\Anaconda3\lib\site-packages\ipykernel\__main__.py:18: RuntimeWarning: overflow encountered in multiply
C:\Users\Anto\Anaconda3\lib\site-packages\ipykernel\__main__.py:18: RuntimeWarning: invalid value encountered in subtract
dt
ist klein genug, um sicherzustellen, dass die Euler-Methode ist stabil?Gut, ich wusste nicht, es hieß die Methode der Linien, aber ja, das ist es, was ich versuche zu tun. Ich habe in der Tat entledigte sich die Fehlermeldung mit einem kleineren
dt
, aber leider ist mein Lehrer (ich bin ein Physik-student) will mich, um Antworten zu finden, die mit diesem spezifischen dt. Ich werde weiter suchen und vielleicht versuchen, eine weniger instabile Methode, vielen Dank !
InformationsquelleAutor Reblochon Masqué | 2015-12-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Sie haben es geschrieben, Ihre räumliche Schritt
dh
, wird gleich null in python 2:Wenn Sie mit python 3 dann dh wird richtig behandelt werden als float.
Ansonsten, wie bereits von @WarrenWeckesser, Sie sind mit der Methode der Linien und die Integration in der Zeit mit dem Forward-Euler-Methode, die mit Ihrer Reihe von Einschränkungen (Sie sagte, dass Ihr Trainer seinen Zeitschritt und andere parameter-Werte) ist offenbar instabil. Aber, mit einem Runge-Kutta Zwei Methode funktioniert für Ihre
dt
(ich habe überprüft dies), aber dein Lehrer kann haben erwähnt, dass die Zeit der integration, die Sie verwenden sollten.Unabhängig, falls Runge-Kutta Zwei scheint entmutigend, verwenden Sie einen zweiten, um Mittel-space-Methode:
wo
f(t,u)
ist der rechten Seite undu_{n-1}
ist der Wert vonu
zum Zeitpunktt_{n-1}
oder die backward euler Methode.InformationsquelleAutor HAL 9001