Ich versuche, den FTCS-Algorithmus für die 1-dimensionale Wärmeleitungsgleichung in Python zu implementieren.FTCS-Algorithmus für die Wärmegleichung
import numpy as np
L = 1 #Length of rod in x direction
k = 0.3 #Thermal conductivity of rod
tmax = 5 #how many seconds
nx = 100 #number of spacial steps
nt = 100; #number of time steps
xi = np.linspace(0,L,nx)
ti = np.linspace(0,tmax,nt)
dx = L/(nx-1)
dt = tmax/(nt-1)
r = k*dt/(dx)**2
r2 = 1-2*r
u=np.zeros((nt,nx))
#IC
phi = 100;
for x in range(0,nx):
u[0][x] = phi
#BC
for t in range(0,nt):
u[t][0] = 0;
u[t][nx-1] = 0
#FTCS Algorithm
for t in range(0,nt-1): #timestep
for x in range(1,nx-2):
u[t+1][x] = r*(u[t][x-1]+ u[t][x+1]) + r2*(u[t][x])
aber ich bin nicht plausible Werte für u bekommen [t] [x] = u (x, t) unter Berücksichtigung meiner Anfangsbedingungen von 100. dh sie sprengen und geben Sie mir dumme Werte wie ‚4.11052068e + 221 'gibt es eine schlechte Programmierpraxis, an der ich teilnehme, die den Algorithmus zerstört? Oder habe ich den Algorithmus gerade falsch implementiert?
EDIT: Ich denke, ich habe herausgefunden, dass es ist, weil der Algorithmus stabil ist, wenn und nur wenn r < 1/2. Die Zahlen explodieren einfach, weil mein r etwa 2,5 oder so ist, aber wenn jemand andere Fehler sehen kann, lass es mich wissen !!