E. Hanert, E. Deleersnijder et V. Legat MEMA/MECA/FSA – ASTR/PHYS/SC
Modèle de Stommel dans l’Atlantique Nord
S. Legrand E. Deleersnijder et V. Legat MEMA/MECA/FSA – ASTR/PHYS/SC
A quoi servent les méthodes numériques ?
Problème de Cauchy
Questions théoriquesExistence, unicité et régularité d'une solutionStabilité d'une équation différentielle
Méthodes numériques Stabilité d'une méthodePrécision d'une méthode Approximation numérique
Valeur exacte
Applications :très nombreuses dans tous les domaines
u'(x) = u(x)
J = 1 instable
u'(x) = -u(x)
J = -1 stable
u'(x) = f(x)
J = 0 écart constant
Bilan
u'(x) = -10(x-1)u(x)
J > 0 si x<1 instableJ < 0 si x>1 stable
Méthodes de Taylor d'ordre n
Euler explicite (Taylor n=1)Ordre de précision linéaireMise en œuvre facileStabilité ?
Taylor n quelconque Ordre de précision arbitrairement élevé, Mise en œuvre fastidieuse si n élevéStabilité ?
Exemple
u'(x) = u(x)
J = 1 instable
u'(x) = -u(x)
J = -1 stable
u'(x) = f(x)
J = 0 écart constant
Bilan
u'(x) = -10(x-1)u(x)
J > 0 si x<1 instableJ < 0 si x>1 stable
Solution numérique
Euler explicite ou Taylor d’ordre un
Exercice conseillé :
Ecrire la formule de récurence pour une méthode de Taylor d’ordre quatre !La programmer sous Matlab !Calculer l’erreur entre solution analytique et numérique !Comparer prédictions théoriques et observations de l’expérience numérique !
Cas général dans le plan complexe
Taylor n quelconque Ordre de précision arbitrairement élevé, Mise en œuvre fastidieuse si n élevéConditionnellement stables
Nombre complexe
Problème modèle correspondant à la linéarisation en un point
Comment améliorer la stabilité ?Euler implicite et explicite
IdéeIl existe d'autres manières d'estimer la hauteur du rectangle !
La douce illusion de l'inconditionnellement stable...
IdéeOn estime la hauteur du rectangle par f(Xi+1,Ui+1)
Exemple : u'(x) = sin(u(x))
Euler impliciteOrdre de précision linéaireEquation à résoudre à chaque pas de temps
(équation non-linéaire, si f non-linéaire !)Inconditionnellement stable
Difficile, difficile, très difficile
Méthodes explicitesde Runge-Kutta
Heun (Runge-Kutta n=2) "le classique" (Runge-Kutta n=4)
Euler explicite (Runge-Kutta n=1)
Runge-Kutta n quelconque Ordre de précision arbitrairement élevé, Facile à mettre en oeuvreConditionnellement stables (comme Taylor)
Il faut la précision requise…
Identification des termes3 relations à satisfaire4 paramètres à choisir
Il existe plusiseurs possibilités !
Runge-Kutta-Fehlberg
Calcul simultané et efficace de deux approximations de la valeur
Pi+1 une approximation d’ordre 4Ui+1 une approximation d’ordre 5
La différence permet d’obtenir une estimation de l’erreur locale commise
Comment choisir un nouveau pas hi+1 ?
Estimation de l’erreur que l´on commettraau pas suivant : elle doit satisfaire le critère
Estimation de l’erreurlocale que l’on vient de commettreau pas précédent hi
ToléranceErreur acceptable
Relationsheuristiques
On construit une stratégie adaptative basée sur des arguments heuristiques peu rigoureux...
Stratégie prudente ou intrépideselon votre caractère
Idée 2 des méthodes prédicteurs-correcteurs
Obtenir une estimation de Ui+1pour les formules des méthodes implicites
Méthodes d'Adams
Adams-Bashfort-Moulton n quelconque Ordre de précision arbitrairement élevé, Prédicteur explicite à pas liés,Correcteur (semi-)implicite à pas liés,Conditionnellement stables
Idée 1 des méthodes prédicteurs-correcteurs
Obtenir une estimation de l’erreur locale commise
On utilise n+1 valeurs précédentes :Méthodes à pas liés
Idée des méthodes à pas liés
On souhaite exploiter la connaissance des valeurs passées.
Méthodes de Gear
Gear n quelconque Ordre de précision arbitrairement élevé, Implicites à pas liésTrès stables (ok pour problèmes raides)
C’est exactement la même histoire !
Méthode d'Euler explicite
Tableau à deux indicesOn calcule la j-ème composante du vecteur des inconnues à la i-ème abscisse temporelle
VecteurOn calcule la j-ème composante du vecteur des inconnues.
Notation compacte :les vecteurs sont en gras.
Implémentation dans QuadLab
package quadlab;
public abstract class OdeIntegrator {private int size;public OdeIntegrator(int size);abstract double [] f(double [] x, double [] fx);public void setSolution(int i, double a);public void solve (double h, int n, int nsub);
double [] k1 = new double[size];double [] k2 = new double[size];double [] k3 = new double[size];double [] k4 = new double[size];
Blas.set(x,xprev); Blas.set(estimate,0,x);fx[0] = 1.0;
for(int i=1; i<=n; i++) {Blas.set(k1,f(x,fx),h); Blas.set(xprev,x,k1,0.5); Blas.set(k2,f(xprev,fx),h); Blas.set(xprev,x,k2,0.5); Blas.set(k3,f(xprev,fx),h);Blas.set(xprev,x,k3,1);Blas.set(k4,f(xprev,fx),h);
Blas.add(x,k1,1.0/6.0);Blas.add(x,k2,1.0/3.0);Blas.add(x,k3,1.0/3.0);Blas.add(x,k4,1.0/6.0); }