Intégration d'un système d'équations différentielles ordinaires par la méthode de Runge-Kutta-Merson

Le système à résoudre peut s'écrire sous forme vectorielle dY/dt = F(t,Y). Cette page effectue son intégration en autorisant, au plus, huit composantes. Décomposé en 8 équations différentielles ordinaires du premier ordre, ce système s'écrit alors :

dy1/dt = f1(t,y1,y2,y3,y4,y5,y6,y7,y8)
dy2/dt = f2(t,y1,y2,y3,y4,y5,y6,y7,y8)
dy3/dt = f3(t,y1,y2,y3,y4,y5,y6,y7,y8)
dy4/dt = f4(t,y1,y2,y3,y4,y5,y6,y7,y8)
dy5/dt = f5(t,y1,y2,y3,y4,y5,y6,y7,y8)
dy6/dt = f6(t,y1,y2,y3,y4,y5,y6,y7,y8)
dy7/dt = f7(t,y1,y2,y3,y4,y5,y6,y7,y8)
dy8/dt = f8(t,y1,y2,y3,y4,y5,y6,y7,y8)

L'algorithme employé appartient à la famille des méthodes de Runge-Kutta. Il est du cinquième ordre et effectue une évaluation de l'erreur locale qui permet de faire varier le pas d'intégration pour contrôler l'erreur. Il est ici implémenté d'une manière simple favorisant la rapidité d'exécution au détriment du contrôle d'erreur, un peu assoupli. Au besoin, ceci peut être compensé en réduisant un peu la valeur de précision relative spécifiée dans les données d'entrée ci-dessous. Pour maîtriser la convergence et la qualité du résultat, l'utilisateur doit encadrer la variation du pas en fournissant une borne inférieure et une borne supérieure pour la valeur du pas.

La progression du calcul est manifestée par une barre d'avancement, au fur et à mesure de l'intégration. A la fin du calcul, les résultats numériques sont écrits dans la section "Affichage des résultats de simulation" qui s'insère avant l'annexe ci-dessous. La représentation graphique n'est tracée que lorsque le calcul est fini (les intervalles de variation étant inconnus a priori).

A la première ouverture de cette page, le formulaire est rempli avec un exemple fonctionnel (dont le résultat est à comparer à la solution exacte y1=sin(2πt), y2= 2πcos(2πt)) ; il est possible de cliquer tout de suite sur le bouton "lancer la simulation" pour expérimenter le fonctionnement du logiciel.

Pour garder une trace complète de la simulation, le plus simple est "d'imprimer" cette page en PDF. Il est aussi possible d'enregistrer les tracés sous forme d'images individuelles (au format png, de préférence).

Le bon fonctionnement de l'application a été testé sous Firefox 45.0 et Ubuntu Web browser 0.23 (sous Ubuntu 14.04 LTS), sous Firefox 43.0.1 ou 45.0.1 et sous IE 11 (sous Windows 7), ainsi que sous Chrome 47.0 (sous Android). Des versions plus anciennes des navigateurs peuvent être insuffisantes.

Donner (en utilisant LE POINT et NON LA VIRGULE comme séparateur décimal) :

→ les composantes du second membre du système d'équations différentielles
avec la notation javascript des constantes, opérateurs et fonctions et
en notant t la variable et y1, y2, y3, y4, y5, y6, y7 et y8 les fonctions :
Exemple : 2.0*Math.cos(t)… Système de Lorenz : 10.0*(y2-y1)
y1*(28-y3)-y2
y1*y2-8.0*y3/3
la première composante du second membre, f1(t,y1,y2,y3,y4,y5,y6,y7,y8) =
la deuxième composante du second membre, f2(t,y1,y2,y3,y4,y5,y6,y7,y8) =
la troisième composante du second membre, f3(t,y1,y2,y3,y4,y5,y6,y7,y8) =
la quatrième composante du second membre, f4(t,y1,y2,y3,y4,y5,y6,y7,y8) =
la cinquième composante du second membre, f5(t,y1,y2,y3,y4,y5,y6,y7,y8) =
la sixième composante du second membre, f6(t,y1,y2,y3,y4,y5,y6,y7,y8) =
la septième composante du second membre, f7(t,y1,y2,y3,y4,y5,y6,y7,y8) =
la huitième composante du second membre, f8(t,y1,y2,y3,y4,y5,y6,y7,y8) =

→ les paramètres numériques de la simulation :
ATTENTION : seuls des nombres figurent ci-dessous
(pas d'expression de calcul ni de notation JavaScript des constantes)
Le champ devient vert si la forme est correcte, rouge en cas d'erreur.
le premier instant, t0 = (0 par exemple pour Lorenz)
le dernier instant, tN = (10 par exemple pour Lorenz)
la borne inférieure du pas d'intégration, hmin = (0.01 par exemple pour Lorenz)
la borne supérieure du pas d'intégration, hmax = (0.5 par exemple pour Lorenz)
la précision relative souhaitée, ε = (0.5e-4 par exemple pour Lorenz)
la valeur initiale de la première composante de la solution, y10 = (4 par exemple pour Lorenz)
la valeur initiale de la deuxième composante de la solution, y20 = (10 par exemple pour Lorenz)
la valeur initiale de la troisième composante de la solution, y30 = (10 par exemple pour Lorenz)
la valeur initiale de la quatrième composante de la solution, y40 =
la valeur initiale de la cinquième composante de la solution, y50 =
la valeur initiale de la sixième composante de la solution, y60 =
la valeur initiale de la septième composante de la solution, y70 =
la valeur initiale de la huitième composante de la solution, y80 =

→ les deux variables pour la représentation paramétrique :
la première coordonnée =
Abscisse: t  | y1  | y2  | y3  | y4  | y5  | y6  | y7  | y8  |
la seconde coordonnée =
Ordonnée: t  | y1  | y2  | y3  | y4  | y5  | y6  | y7  | y8  |

puis cliquer sur le bouton pour .

Progression de la simulation :    Arrêter le calcul !

 

 Facultatif : NON nécessaire pour relancer une simulation. Ce bouton ne modifie pas les données entrées dans le formulaire.

Graphique de toutes les composantes en fonction de la variable

Pour enregistrer le tracé: clic droit puis "Enregistrer l'image sous…". Le format png (par défaut) exporte le tracé avec une marge transparente.

Représentation graphique paramétrique à deux composantes

Changement
Abscisse: t  
y1  
y2  
y3  
y4  
y5  
y6  
y7  
y8  
sans recalcul
Ordonnée: t  
y1  
y2  
y3  
y4  
y5  
y6  
y7  
y8  

Pour enregistrer le tracé: clic droit puis "Enregistrer l'image sous…". Le format png (par défaut) exporte le tracé avec une marge transparente.

Annexe

Retour au début
OpérateurDescription
+addition
-soustraction
*multiplication
/division
%modulo (reste de la division entière)
(pour l'élévation à la puissance, utiliser la fonction Math.pow)
ConstanteDescription
Math.Ele nombre d'Euler e (environ 2.718)
Math.LN2le logarithme népérien de 2 (environ 0.693)
Math.LN10le logarithme népérien de 10 (environ 2.302)
Math.PILe nombre pi (environ 3.14)
Math.SQRT1_2la racine carrée de 1/2 (environ 0.707)
Math.SQRT2la racine carrée de 2 (environ 1.414)
FonctionDescription
Math.abs(x)Renvoie la valeur absolue de x
Math.acos(x)Renvoie l'arccosinus de x en radians
Math.asin(x)Renvoie l'arcsinus de x radians
Math.atan(x)Renvoie l'arctangente de x, compris entre -PI/2 and PI/2 radians
Math.atan2(y,x)Renvoie l'arctangente du quotient de ses arguments
Math.ceil(x)Renvoie l'arrondi supérieur de x
Math.cos(x)Renvoie le cosinus de x (x exprimé en radians)
Math.exp(x)Renvoie ex
Math.floor(x)Renvoie la partie entière de x
Math.log(x)Renvoie le logarithme népérien de x
Math.max(x,y,z,...,n)Renvoie la plus grande valeur
Math.min(x,y,z,...,n)Renvoie la plus petite valeur
Math.pow(x,y)Renvoie la valeur de x à la puissance y
Math.random()Renvoie un nombre aléatoire entre 0 et 1
Math.round(x)Arrondi x à l'entier le plus proche
Math.sin(x)Renvoie le sinus de x (x exprimé en radians)
Math.sqrt(x)Renvoie la racine carrée de x
Math.tan(x)Renvoie la tangente de x (x exprimé en radians)

Version 1.1.5 (stable).

INFORMATION : cette page (RKM_method.htm) peut être téléchargée (faire enregistrer sous...) pour être exécutée localement mais il faut aussi télécharger et placer dans le même dossier le fichier compagnon traceXY.js qui contient des fonctions de tracé graphique. Par ailleurs, ce code requiert un navigateur récent.

© Sellig Zed, mars 2016. Logiciel libre diffusé sous licence CeCILL ; le module graphique traceXY.js est placé sous licence CeCILL-C (pour en savoir plus, voir le code source de la page et celui du module graphique).


logo html 5  Validé avec le vérificateur du W3C