#!/usr/bin/env python # -*- coding: utf-8 -*- """ KdV_UnSolitonAnalytique.py Résolution de l'équation de Korteweg de Vries ut + mu uux + nu uxxx = 0 mu = coefficient de non linéarité nu = coefficient de dispersion Etude de l'influence des termes non-linéaire et dispersif mu et nu """ __author__ = "Dominique Lefebvre" __copyright__ = "Copyright 2020 - TangenteX.com" __version__ = "1.0" __date__ = "27 novembre 2020" __email__ = "dominique.lefebvre@tangentex.com" from scipy import cosh, sqrt, linspace from matplotlib.pyplot import figure,plot,xlim,grid,title,xlabel,ylabel,show import matplotlib.animation as animation # Fonction sécante hyperbolique def sech(x): y = 1./cosh(x) return y # Solution analytique de l'équation KdV def KdVAnalytique(x,t,c,x0, mu ,nu): u = (3.*c/mu)*sech((sqrt(c/nu)/2.)*(x - c*t - x0))**2 return u # coefficients de l'équation KdV mu = 12. # poids du terme non-linéaire nu = 1. # poids du terme dispersif # Définition du domaine spatial L = 80.0 # période spatiale Nx = 512 # nombre de pas de discrétisation du domaine spatial x0 = 0 x = linspace(x0, L, Nx) # parametres temporels t0 = 0 dt = 0.1 # Paramètres du soliton initial c1 = 0.5; shift1 = 0.1*L # fonction de tracé de l'animation def KdV(i): t =i*dt y = KdVAnalytique(x,t,c1,shift1, mu, nu) line.set_data(x,y) return line, # tracé de l'évolution fig1 = figure(figsize=(8,6)) line, = plot([],[]) xlim(0,L) grid(True) title("Soliton de Korteweg de Vries - mu = %1.2f nu = %1.2f" % (mu, nu)) xlabel("X") ylabel("U(x,t)") # lancement animation ani = animation.FuncAnimation(fig1,KdV,frames=3000, interval= 1, repeat=False) show()