Description
Nous avons vu dans le challenge précédent (
Pendulum ODE I) qu’il était possible dans certains cas de linéariser une ODE non linéaire, pour obtenir une solution analytique approchée de la solution exacte.
Dans la majorité des cas, il n’est cependant pas possible de linéariser une ODE (erreur engendrée trop importante). Nous avons alors recours à des méthodes de résolutions numériques permettant d’approcher au mieux la solution exacte.
La première méthode numérique fut introduite en 1768 par Leonhard Euler. Depuis, un grand nombre de techniques ont été développées. Elles se basent sur la discrétisation de l'intervalle d'étude en un certain nombre de pas. A chaque pas les différentes fonctions ainsi que leurs dérivées, sont évaluées.
Ces différentes méthodes donnent des résultats plus ou moins bons en termes de précision vis-à-vis de la solution exacte, ou encore en termes de rapidité de convergence. Certaines méthodes seront donc à privilégier en fonction du résultat souhaité.
Dans ce challenge, nous allons appréhender l’une de ces méthodes de résolution numérique : la
méthode d’Euler semi-explicite (méthode proposée en l’occurrence par Leonhard Euler), qui est une des méthodes numériques les plus simples pour résoudre des ODE de second ordre. Outre la simplicité de mise en place de cette méthode, elle a l’avantage de converger rapidement ; toutefois, la précision de la méthode reste faible.
1. Méthode d'Euler
Commençons par introduire le principe de la méthode d’Euler classique (méthode d’Euler-explicite).
Soit une ODE d'ordre 1 de la forme
 =F(t,y(t)))
dont nous cherchons la solution
)
.
F est appelée fonction dévaluation.
La formule de Taylor s'écrit
En ne gardant que les deux premiers termes nous obtenons
 = y(t_0) + (t_1 - t_0)F(t_0,y(t_0)))
.
Avec une notation simplifiée, nous pouvons écrire
))
dont nous tirons, par généralisation entre deux instants, la
formule itérative d'intégration d'Euler :
Cette relation nous permet de calculer

à partir de

et de la fonction d'évaluation
)
. Ainsi, à partir des condition initiales (
t0,
y0), nous pouvons résoudre le problème de proche en proche. Il est à noter que les deux premiers termes de la formule de Taylor ne donnent qu'une approximation de la valeur exacte, approximation d'autant plus grossière que

sera grand. De plus, à chaque pas les erreurs vont se cumuler.
2. Application au cas du pendule simple
Revenons maintenant au système mécanique présenté dans le challenge précédent : le simple pendule soumis à son propre poids . Nous avions vu que l'équation de mouvement (non linéarisée) de ce système était une ODE d'odre 2 de la forme :
 = G(\theta(t)))
. Pour pouvoir utiliser la formule itérative d'intégration d'Euler, il est nécessaire de se ramener à un système d'équations d'ordre 1. Aussi, nous introduisons la variable correspondant à la vitesse angulaire
 = \dot \theta(t))
.
Nous pouvons alors écrire le système de deux équations
 = G(\theta(t)) \\ \dot \theta(t) = w(t) \end{array}\right.)
soit sous forme vectorielle
 \\ \dot \theta(t)\end{array}\right \rbrack = \left \lbrack\begin{array}{l} G(\theta(t)) \\ w(t) \end{array}\right \rbrack)
En posant
 \\ \theta(t) \end{array}\right \rbrack)
le vecteur des inconnues, nous avons donc
 \\ \dot \theta(t) \end{array}\right \rbrack)
Et nous arrivons au système différentiel d'ordre 1 classique
)
avec
 = \left \lbrack\begin{array}{l} G(\theta(t)) \\ w(t) \end{array}\right \rbrack)
auquel nous pouvons appliquer la formule d'intégration d'Euler.
Nous obtenons ainsi le schéma d'intégration suivant :
,avec

le pas d'intégration et
)
la fonction qui représente
l'accélération angulaire à l'étape n. Ce schéma est qualifié d'explicite, car dans le membre de droite, aucun termes ne dépend de l'étape n+1.
3. Variante : Méthode d'Euler semi-explicite
Une variante de la méthode d'Euler classique consiste à utiliser la vitesse

pour calculer la position au pas n+1. Du fait de la composante n+1 dans une partie du membre de droite, nous obtenons le
schéma d'Euler semi-exlicite :
Dans le cas d'ODE, ce schéma a l'avantage d'être plus stable que le schéma explicite classique et donne ainsi de meilleurs résultats ; c'est donc ce dernier que nous chercherons à implémenter.
Votre travail :
A l'aide du schéma d'Euler semi-explicite présenté précédemment, vous chercherez à évaluer pour chaque pas

d'un intervalle de temps
T les valeurs discrètes des fonctions
)
,
)
et
)
. Ainsi, à chaque instant n, connaissant

et

, vous commencerez par calculer
)
, puis vous déterminerez successivement

et

.
Pour résoudre ce challenge, vous allez recevoir, comme pour le challenge précédent, deux variables définissant les dimensions et conditions initiales du système :
l : longueur de la barre en mètre
theta_0 : angle

initial (pour t = 0s et n = 0) en degré
Nous posons g = 9.81m.s-2 , m = 5kg ,

(vitesse angulaire initiale) = 0deg.s-1 ,

= 0.02s et T = 10s .
Vous aurez à renvoyer les valeurs discrètes des fonctions
)
,
)
et
)
pour t = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 secondes , soit pour n = 50, 100, 150, 200, 250, 300, 350, 400, 450, 500. Comme pour l'épreuve précédente, une chaîne de caractères comprenant les valeurs tronquées à 5 décimales et séparées par des ';' sera renvoyée pour chaque fonction.
Validation de la méthode numérique
Plutôt que de vous présenter directement un exemple données/résultats, nous allons vous proposer un moyen de vérifier que votre modèle numérique est correct.
Nous avions vu dans le challenge précédent que pour des angles petits la solution analytique issue de l'équation du mouvement linéarisée pouvait servir de référence. Nous allons donc chercher à évaluer l’erreur induite par notre modèle numérique vis à vis de la solution analytique.
A chaque étape n, nous pouvons calculer l'erreur de la façon suivante :
Soit l'erreur totale (avec N le nombre de pas) :
Aussi, pour vous aider, nous avons évalué ces erreurs pour différentes configurations initiales, en utilisant les mêmes constantes que pour le challenge. Voici ce que nous obtenons (erreurs arrondies au centième) :
Variables
Nom |
Type |
Description |
Variables à récupérer |
l | Réel | float | longueur de la barre en mètre |
theta_0 | Réel | float | angle initial en degré |
Variables à renvoyer |
theta | Chaîne de caractères | char* | valeurs discrètes de la fonction en radian |
dtheta | Chaîne de caractères | char* | valeurs discrètes de la fonction en radian / seconde |
ddtheta | Chaîne de caractères | char* | valeurs discrètes de la fonction en radian / seconde^2 |