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.
$$\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.
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 :
step_<name>(y,t,h,f)
qui calcule un seul pas de la méthode,meth_n_step(y0,t0,N,h,f,meth)
calculant un nombre N
de pas de taille constante h
,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.
É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
)
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 ?