# ------------------------------------------------------------------------- # # PYTHON for DUMMIES # Probleme 5 # # Solution detaillée # Vincent Legat # # ------------------------------------------------------------------------- from numpy import * # ------------------------------------------------------------------------- # # -1- Equations de Lorenz avec les paramètres de l'énoncé # # # # dudt(t) = 10 v(t) - 10 u(t) # dvdt(t) = 28 u(t) - v(t) - u(t)w(t) # dwdt(t) = u(t) v(t) - 8 w(t) / 3 # # def f(x,u): dudt = 10 * u[1] - 10 * u[0] dvdt = 28 * u[0] - u[1] - u[0] * u[2] dwdt = u[0] * u[1] - 8 * u[2] / 3 return array([dudt,dvdt,dwdt]) # ------------------------------------------------------------------------- # # -2- Schema de Runge-Kutta classique d'ordre 4 # def lorenz(Xstart,Xend,Ustart,n): X = linspace(Xstart,Xend,n+1) U = zeros((n+1,3)); U[0,:] = Ustart h = (Xend - Xstart)/n for i in range(n): K1 = f(X[i] ,U[i,:] ) K2 = f(X[i]+h/2,U[i,:]+K1*h/2) K3 = f(X[i]+h/2,U[i,:]+K2*h/2) K4 = f(X[i]+h ,U[i,:]+K3*h ) U[i+1,:] = U[i,:] + h*(K1+2*K2+2*K3+K4)/6 return X,U # -------------------------------------------------------------------------