%% \usepackage{amsmath} \section*{Méthodes numériques de résolution d'équations différentielles} Nous allons ici développer plusieurs méthodes numériques de résolution d'équations différentielles. Ce sont des méthodes à un pas, i.e. $$y_{n+1}=y_n+h_n\Phi(y_n,t_n,h_n)$$ Nous avons défini dans un premier temps la condition initiale $y(t_0)=y_0$ comme un couple $(t_0,y_0)$. Nous avons conservé la fonction différentielle représentant l'équation sous forme d'une fonction.\\ Nous avons ensuite eu des problèmes lorsque nous avons voulu passer en dimension supérieure à 1 puisque $y_0$ est devenu un vecteur et non plus un réel. Nous avons donc séparé $t_0$ et $y_0$.\\ Nous avons programmé chacune des méthodes proposées en fixant un nombre $N$ de pas ou en donnant une précision $\epsilon$. \subsection*{Méthode d'Euler} Cette méthode d'ordre 1 repose sur l'équation suivante $$\Phi(y_n,t_n,h_n)=f(y_n,t_n)$$ Il suffit d'utiliser la fonction \textit{step\_euler} qui renvoie $y_{n+1}$ pour $y_n$ donné. Pour la méthode où l'on fixe un certain nombre de pas, on applique la fonction $N$ fois.\\ Au départ, nous avons choisi de fixer un nombre de pas en paramètre de la fonction, nous avons décidé ensuite de la taille du pas $h$ en fonction de $N$. En choisissant $h=\frac{1}{N}$, nous ne pouvions intégrer que sur l'intervalle $\[0,1\]$. C'est pour cela que nous avons introduit la taille du pas $h$ directement en paramètre.\\ Finalement, nous avons préféré introduire un paramètre $t_1$ qui nous permettait de faire l'intégration sur l'intervalle $\[t_0,t_1\]$. Nous avons fixé le pas $h$ dans la fonction, tel que $h=\frac{|t_1-t_0|}{N}$.\\ Nous avons implémenté la méthode d'une deuxième manière, en utilisant une précision $\epsilon$. Le but est d'améliorer la précision du résultat. Comme nous divisions le pas par deux à chaque nouvel appel de la fonction, le choix du pas a été délicat, en effet s'il est trop petit, le temps de calcul est trop important. S'il est trop grand au départ, l'algorithme va diviser de plus en plus le pas par deux et le temps de calcul va être multiplié par deux à chaque fois. Nous avons fait le choix dsuivant : $\left\{\begin{array}{l}h=\frac{1}{2} si\ (t_1 - t_0) > 1\\ h=\frac{(t_1 - t_0)}{2} sinon\end{array}\right.$ Nous divisons le pas par deux tant que l'écart entre deux solutions successives est supérieur à $\epsilon$.\\ Au départ, nous renvoyions un tableau d'abscisses et un vecteur de solution. Pour s'adapter à la dimension supérieure, nous renvoyons un tableau d'abscisses et un matrice de solutions $\begin{pmatrix} & \cdots& \\ y_1&\cdots&y_n \\ &\cdots& \end{pmatrix}$ Pour visualiser le résultat, nous affichons $y_n$ en fonction des abscisses.\\ Pour la méthode avec un nombre de pas fixé, la solution est de moins en moins précise au fur et à mesure des calculs puisque l'on cumule les erreurs. On voit cette erreur sur le figure~\ref{cos_erreur}. \begin{figure} \centering \includegraphics[angle=-90,width=10]{euler_ex30} \label{cos_erreur} \caption{Visualisation de l'erreur avec la méthode d'Euler} \end{figure} Sur l'exemple $y^{'}(t) = -2 * t * y(t)^2$, on obtient la figure~\ref{ex1} \begin{figure} \centering \includegraphics[angle=-90,width=10]{euler_ex1} \label{ex1} \caption{Exemple d'application de la méthode d'Euler} \end{figure} Sur le premier exemple du sujet, on obtient bien la solution $\exp(arctan(x))$ sur la figure~\ref{ex2} \begin{figure} \centering \includegraphics[angle=-90,width=10]{euler_ex1} \label{ex1} \caption{Exemple d'application de la méthode d'Euler} \end{figure} Sur le premier exemple du sujet, on obtient bien la solution $\exp(arctan(x))$ sur la figure~\ref{ex2} \begin{figure} \centering \includegraphics[angle=-90,width=10]{euler_ex2} \label{ex2} \caption{Exemple d'application de la méthode d'Euler sur le premier exemple du sujet} \end{figure} Sur le deuxième exemple, nous obtenons la figure~\ref{ex30} pour la méthode avec $N=100$ et la figure~\ref{ex31} pour la méthode avec $\epsilon=0.1$. \begin{figure} \centering \includegraphics[angle=-90,width=10]{euler_ex30} \label{ex30} \includegraphics[angle=-90,width=10]{euler_ex31} \label{ex31} \caption{Exemple d'application de la méthode d'Euler sur le deuxième exemple du sujet} \end{figure} \subsection{Méthodes du point milieu, de Heun et de Runge-Kutta} Ces méthodes ont été implementées de la même manière que la méthode d'Euler, il n'y a que la fonction qui effectue un pas qui change.\\ Les méthodes du point milieu et de Heun sont des méthodes d'ordre 2 tandis que la méthode de Runge-Kutta est d'ordre 4. Nous avons tracé des courbes de convergence (Figure~\ref{convergence})pour les différentes méthodes. On voit bien que les méthodes du point milieu et de Heun sont du même ordre. Sur cet exemple, la méthode de Runge-Kutta converge trop rapidement. \begin{figure} \centering \includegraphics[angle=-90,width=10]{test_conv} \label{convergence} \caption{Courbe de convergence des différentes méthodes : Euler (bleu), point milieu (violet) et Heun (rouge)} \end{figure} Nous avons aussi utilisé la fonction \textit{timer} de scilab pour avoir la durée d'exécution des méthodes. Sur un même exemple, les temps d'exécution sont de 21.66s, 1.01s, 1.1s et 0.88s pour les méthodes d'Euler, du point milieu, de Heun et de Runge-Kutta. \subsection{Champ des tangentes de l'équation différentielle} Nous avons tracé le champ des tangentes pour l'exmple en dimension 2, nous obtenons des solutions qui sont des cercles comme le montre la figure~\ref{champ_tangentes}. \begin{figure} \centering \includegraphics[angle=-90,width=10]{champ_cos} \label{champ_tangentes} \caption{Représentation du champ des tangentes} \end{figure}