Résolution d'équations différentielles

Dans cette partie, on programme les différentes méthodes numériques de résolution des équations différentielles que nous testerons par la suite. Ces algorithmes sont tous des méthodes à un pas, de la forme suivante :

$$y_{n+1} = y_n + h_n \Phi(y_n,t_n,h_n)$$

Les algorithmes reprenant tous le même principe, il est possible de répondre à une grande partie des questions sans programmer toutes les méthodes demandées, pour y revenir plus tard lorsqu’elles auront été vues en cours.

  1. Définissez la façon dont vous allez représenter un problème de Cauchy dans votre code. Il s’agit de fixer la façon dont vous allez représenter la condition initiale et la fonction différentielle représentant l’équation, afin d’unifier le code écrit dans chacune des parties suivantes.

$$\begin{cases} y(t_0) = y_0 \\ y’(t) = f(y(t),t) \end{cases}$$

Votre représentation doit pouvoir prendre en compte des équations différentielles en dimension arbitraire.

  1. Programmez les méthodes de résolution suivantes :
    • la méthode d’Euler $\Phi(y_n,t_n,h_n) = f(y_n,t_n)$,
    • la méthode du point milieu,
    • la méthode de Heun,
    • et la méthode de Runge-Kutta d’ordre 4.

Remarque : Pour chacune de ces méthodes on programmera, comme pour les méthodes d’intégration, de la manière la plus générique possible :

  • pour chaque méthode de résolution, une fonction step_<name>(y,t,h,f) qui calcule un seul pas de la méthode,
  • un premier algorithme meth_n_step(y0,t0,N,h,f,meth) calculant un nombre N de pas de taille constante h,
  • puis un second algorithme meth_epsilon(y0,t0,tf,eps,f,meth) calculant une solution approchée avec un paramètre d’erreur epsilon.

Comparer l’utilité de l’implémentation générique par rapport au projet précédent.

  1. Écrire une fonction permettant de dessiner le champ des tangentes de l’équation différentielle (on ne s’intéressera qu’au cas de la dimension 2, et on utilisera la fonction quiver)

  2. Testez vos implémentation sur des équations différentielles connues, et comparez-les aux résultats exacts. En particulier, on tracera les courbes correspondant aux deux équations différentielles suivantes :

    • En dimension 1 : $\begin{cases} y(0) = 1 \\ y’(t) = \frac{y(t)}{1+t^2} \end{cases}$

    • En dimension 2 : $y(t) = \left[ \begin{array}{c} y_1(t) \\ y_2(t) \end{array} \right]$ with $\begin{cases} y(0) = \left[ \begin{array}{c} 1 \\ 0 \end{array} \right] \\ y’(t) = \left[ \begin{array}{c} -y_2(t) \\ y_1(t) \end{array} \right] \end{cases}$

Quels sont les types d’erreurs que vous rencontrez ?