Résolutionnumériqued’équationsdifférentielles
0 0 0 5 1 0 1 5 2 0 2 5 1 2 3 4 5 6 7 8 Méthode d'Euler pour y'=y n=5 n=10 n=100 Solution exacte Figure 1–Approximationdeexpparlaméthoded’Euler • pour la
Méthode d’Euler pour la chute avec frottement
Méthode d’Euler pour la chute avec frottement L’équation différentielle modélisant la chute verticale d’un solide dans un fluide est la suivante : dv =A - B vn dt Par définition : t v(t t) v(t) lim dt dv t 0 donc lorsque t est petit on a l’expression approchée : ( ) ( ) v t t v t A Bv t ( )n t
Equation différentielle et méthode dEULER
B) EQUATION DIFFERENTIELLE ET METHODE d'EULER - Etablir l'équation différentielle du mouvement - Montrer que : Si f = k V Si f = K V2 dV / dt = A – B V avec A = g (1- fluide V/m) et B = k / m dV / dt = A – C V2 avec A = g (1- fluide V/m) et C = K / m V lim = A / B = m A / k V lim
CHAPITRE 11 : RÉSOLUTION DÉQUATIONS DIFFÉRENTIELLES PAR LA
On voit clairement apparaître dans la procédure une limite de la méthode d’Euler En effet plus on va calculer de points à partir du temps initial plus on va s’éloigner de la solution 2 Programmation en Python def euler (derivee, y0, pas, nombre_iterations): liste_approx = [y0] compteur = 0 while compteur < nombre_iterations :
Runge–Kutta methods for ordinary differential equations
The simple Euler method: yn = yn 1 +hf(yn 1); h = xn xn 1 can be made more accurate by using either the mid-point or the trapezoidal rule quadrature formula: yn = yn 1 +hf yn 1 + 1 2hf(yn 1): yn = yn 1 + 1 2hf(yn 1)+ 1 2hf yn 1 +hf(yn 1): Runge–Kutta methods for ordinary differential equations – p 3/48
déquation différentielle RESOLUTION APPROCHEE DUNE EQUATION
Equation vectorielle et méthode d'Euler En fait la méthode d'Euler s'applique également aux équations du type Y' = F(Y, t) avec Y fonction d'un intervalle de vers n avec nP2 On peut ainsi ramener une équation différentielle d'ordre 2, 3 en une équation différentielle de degré 1 On procède à la vectorisation de l'équation
Résolution numérique d’une équation différentielle
0 0 0 5 1 0 1 5 2 0 2 5 3 0 3 5 4 0 1 0 0 5 0 0 0 5 1 0 1 5 2 0 2 5 3 0 Méthode d'Euler vectorielle x y On peut noter une légère différence entre les deux scripts pour définir x et y; cette différence est due au fait que dans le
Méthode de résolution des équations différentielles ODE
II 1 Méthodes d'Euler explicite et implicite 09 II 2 Méthode d'Euler amélioré 15 II 3 Méthode d'Euler-Cauchy 15 II 4 Méthode de Crank – Nicholson 18 II 5 Méthode de Heun 19
Physically Based Modeling: Principles and Practice
Euler’s method simply computes x t0 C h/ by taking a step in the derivative direction, x t0 C h/ D x0 C hxP t0/: You can use the mental picture of a 2D vector field to visualize Euler’s method Instead of the real integral curve, p follows a polygonal path, each leg of which is determined by evaluating the vector f at the beginning, and
Differential Equations
Chapter 0 A short mathematical review A basic understanding of calculus is required to undertake a study of differential equations This zero chapter presents a short review
[PDF] calcul intégrale python
[PDF] python intégration numérique
[PDF] exercice python euler
[PDF] le médecin malgré lui acte 2 scène 4
[PDF] méthode dichotomie python
[PDF] le message andrée chedid résumé détaillé
[PDF] résolution équation différentielle matlab ode45
[PDF] le message andrée chedid genre
[PDF] algorithme méthode d'euler implicite matlab
[PDF] méthode de tir équation différentielle
[PDF] le message andrée chedid quiz
[PDF] le message andrée chedid extrait
[PDF] méthode euler implicite matlab
[PDF] le message andrée chedid texte intégral
INFORMATIQUE MPSI Mise à jour : 24/04/2015
§11 : Résolution numérique
d'équation différentielle 1 / 6RESOLUTION APPROCHEE D'UNE
EQUATION DIFFERENTIELLE
De nombreux phénomènes physiques se modélisent à l'aide d'équations différentielles pour lesquelles
on ne dispose pas de méthode analytique pour obtenir l'expression des solutions exactes. On souhaite alors
obtenir une solution "approchée" du problème pour en déduire un comportement qualitatif. Pour cela, on utilise des méthodes de résolution approchéeI) Méthode d'Euler
Principe de la méthode d'Euler
On veut trouver une solution "approchée" de la solution d'un problème de Cauchy écrit sous la forme : y' = F(y,t) et y(t0) = y0. On veut évaluer de proche en proche une valeur approchée de y(t) en t0, t1 = t0 + h, t2 = t0 +2h, tk = t0 + kh... où h3+* est appelé pas de la méthode.
Comme dans la "vraie" solution, la tangente au point de coordonnées (t, y(t)) est de penteF(y(t),t), la méthode d'Euler consiste à écrire que la tangente au point (tk , yk) est de pente F(yk, tk).
On doit alors étudier la suite de premier terme y0 et définie par la relation de récurrence : k², yk+1 = yk + h F (yk , tk) On relie alors les points (tk, yk) et (tk+1, yk+1) pour obtenir une courbe "approchée" de la courbe de la vraie solution. En principe, plus le pas est petit plus on est proche de la solution exacte mais alors pour avoir la valeur en un point il faut calculer plus de valeurs et on a alors un risque de cumuler des erreurs d'arrondi. Exemple 1 Avec l'équation : y' = y avec la condition initiale y(0) = y0 = 1 et les pas1., 0.1 et 0.03, on obtient les courbes suivantes
de la vraie solution (ici exp) lorsque t croit, mais que l'écart est de plus en plus petit avec h INFORMATIQUE MPSI Mise à jour : 24/04/2015§11 : Résolution numérique
d'équation différentielle 2 / 6 Exemple 2 Avec l'équation : y' + y = e t cos(10t) , la condition initiale y0 = 0 et les pas respectifs h = 0.2, h = 0.1, h = 0.05 et h = 0.01, on obtient les courbes suivantes Rem : La méthode d'Euler est dite d'ordre 1 car l'erreur commise en b par la méthode d'Euler en partant de a avec un pas h, est en O(h1). D'autres méthodes existent, comme par exemple celles de Runge-Kutta qui généralisent la méthode d'Euler et qui sont d'ordre 1, 2 ou 4 (erreur en O(h1), O(h2), O(h4)) : c'est la méthode RK4.Algorithme de la méthode d'Euler
Données : F, a, b, y0, h
t ĸa y ĸy0Liste_t = [t]
Liste_y = [y]
tant que t + h <= b faire y ĸy + h * F(y, t)Liste_y ĸ Liste_y + [y]
t ĸt + hListe_t ĸ Liste_t + [t]
Résultat : Liste_t , Liste_y
Programme Python
def euler (F, a, b, y0, h) : y = y0 t = aListe_t = [a]
Liste_y = [y0]
while t + h <= b : y = y + h*F(y,t) ou, uniquement si y est scalaire : y += h*F(y,t) Liste_y.append(y) ou : Liste_y = Liste_y + [y] (plus lent) t = t + h ou : t += hListe_t.append(t)
return ( Liste_t , Liste_y) INFORMATIQUE MPSI Mise à jour : 24/04/2015§11 : Résolution numérique
d'équation différentielle 3 / 6Terminaison, correction et complexité
Si on part bien de F continue, a < b et h > 0 (et supérieure à la précision machine), il suffit, en notant x
la partie entière de x, de (b - a) / h itérations pour obtenir la condition du test " t + h > b " vérifiée : la
terminaison de l'algorithme est assurée. Pour ce qui est de la correction, la convergence de la suite vers la solution exacte dépend de lafonction F. Un théorème d'analyse numérique affirme que si F est de classe C1 et "uniformément
lipschitzienne selon la seconde variable", alors la méthode est d'ordre 1 et donc lorsque le pas tend vers 0,
la différence entre la vrai solution et la solution approchée tend vers 0.Pour ce qui est de la complexité, on voit que, si n = (b - a) / h , on effectue n calcul de F(t,y), 2n
additions, n multiplications et 2n concaténations de listes. De plus, pour ce qui est de la complexité en
mémoire, on a 2 variables numériques (t et y) mais également 2 variables de type list qui contiennent
négligeaA titre d'exemple voici quelques résultats de test de la méthode d'Euler pour différents pas (ainsi
que différentes versions du programme Python). On travaille avec l'équation différentielle y' = y et y(0) = 1
et on teste l'erreur en t = 3. (on connait la valeur de la solution exacte en 3. puisqu'il s'agit de exp(3))
pas 100 10-1 10-2 10-3 10-4 10-5 10-6 10-7 Erreur 12.08 4.22 0.29 3.10-2 5.10-3 5.10-4 5.10-5 3.10-6 versionListe_y = Liste_y + [y]
1.8 10-5
sec5.8 10-5
sec1.5 10-3
sec4.1 10-2
sec5.14 sec non calculé
(> 200 sec) non calculé non calculé versionListe_y += [y]
1.6 10-5
sec3.8 10-5
sec5.7 10-4
sec3.1 10-3
sec2.5 10-2
sec2.5 10-1
sec2.49 sec 25.5 sec
versionListe_y.append(y)
2.1 10-5
sec1.3 10-4
sec5.8 10-4
sec3.3 10-3
sec2.3 10-2
sec2.2 10-1
sec2.23 sec 21.8 sec
version sans calcul de Liste_t2.4 10-5
sec3.4 10-5
sec3.8 10-4
sec2.6 10-3
sec1.8 10-2
sec1.8 10-1
sec1.72 sec 16.3 sec
On constate que la différence entre la solution exacte et la solution approchée est de l'ordre de
grandeur de h (majorée environ par 50 h) et que la durée d'exécution est proportionnelle au nombre d'itérations
effectuées à l'exception notable de la version "Liste_y = Liste_y + [y] " dans laquelle la concaténation d'une liste
de plus de 1000 termes et d'une liste d'un terme prend un temps important. Autre exemple avec l'équation différentielle : y' = y2 et la condition initiale y(1) = 1On a tracé dans le graphe suivant, les solutions approchées pour les pas h = 10-n pour n entre 1 et 5
INFORMATIQUE MPSI Mise à jour : 24/04/2015§11 : Résolution numérique
d'équation différentielle 4 / 6II) Equations scalaires d'ordre supérieur
Equation vectorielle et méthode d'Euler
En fait la méthode d'Euler s'applique également aux équations du type Y' = F(Y, t) avec Yfonction d'un intervalle de 3 vers 3n avec nP2. On peut ainsi ramener une équation différentielle
d'ordre 2, 3.. en une équation différentielle de degré 1. On procède à la vectorisation de l'équation.
Par exemple, supposons que l'on veuille résoudre le probléme de Cauchy (PC) suivant : (PC) y(3) + 2 y" 6 y' + y2 = exp(t) et y(0) = a0 , y'(0) = b0 et y"(0) = c0.On pose Z la fonction de 3 vers 33 définie par : Z(t) = (y"(t), y'(t), y(t)). Alors, le problème
de Cauchy devient : Z ' = F(t, Z) avec la condition initiale Z(0) = (a0, b0, c0) où F est la fonction de
34 vers 33 définie par F(, , , t) = ( exp(t) 2 + 6 2 , , )
Attention cependant : lorsqu'à la première itération, on effectue y = y + h*F(y,t) on veut
une addition de vecteurs et non une concaténation. Si y et h*F(y,t) sont deux listes, y + h * F(y,t)
est pourtant une concaténation. Il faut utiliser le type array de la bibliothèque numpyProgramme Python
def Eulervectoriel (F, a, b, y0, h) : y = y0 t = aListe_t = [a]
Liste_y = [y0]
while t + h <= b : y = y + h*F(y,t) Liste_y.append(y) ou : Liste_y = Liste_y + [y] (plus lent) t = t + h ou : t += hListe_t.append(t)
return ( Liste_t , Liste_y)Exemple d'utilisation 1
import numpy as np import matplotlib.pyplot as plt style = ['r:', 'b--', 'm-.']F = lambda y,t: np.array([-y[1], y[0]])
plt.ion() y0 = np.array([1,0]) for n in range(1,6): h = (10**(-n))/0.41 res = Eulervectoriel(F, 0, 10, y0, h) abscisses = res[0] ordonnees = [res[1][k][1] for k in range( len( res[1] ) ) ] plt.plot(abscisses, ordonnees, style[n%3]) plt.draw() plt.ioff() plt.show() INFORMATIQUE MPSI Mise à jour : 24/04/2015§11 : Résolution numérique
d'équation différentielle 5 / 6Exemple d'utilisation 2
import numpy as np import matplotlib.pyplot as plt style = ['r:', 'b--', 'm-.']F = lambda y,t: np.array([-y[1], y[0]])
plt.ion() y0 = np.array([1,0]) sousgraphe = [251, 252, 253, 254, 255] for n in range(1,6): plt.subplot( sousgraphe[n-1]) h = (5**(-n))/0.41 res = Eulervectoriel(F, 0, 10, y0, h) abscisses = res[0] ordonnees = [res[1][k][1] for k in range( len( res[1] ) ) ] plt.plot(abscisses, ordonnees, style[n%3]) plt.draw() plt.subplot(212) for n in range(1,6): h = (5**(-n))/2.21 res = Eulervectoriel(F, 0, 10, y0, h) abscisses = res[0] ordonnees = [res[1][k][1] for k in range( len ( res[1] ) ) ] plt.plot(abscisses, ordonnees, style[n%3]) plt.draw() plt.ioff() plt.show()III) Utilisation de scipy
Les procédures précédentes ont évidemment été implémentées et améliorées dans les bibliothèques
logicielles scientifiques Scipy. De plus la méthode d'Euler a elle-même été améliorée en une méthode de
Runge-Kutta : par exemple la méthode RK4 .
Une méthode numérique d'intégration des équations différentielles est implémentée dans la fonction
scipy.optimize.odeintCette fonction odeint s'utilise, pour résoudre l'équation y'(t) = F(y(t), t), sous la forme odeint(F, y0, t) où
>>> from scipy.integrate import odeint >>> odeint(lambda y,t : y , 1, [0, 0.5, 1.]) array([[ 1. ], [ 1.64872127], [ 2.71828191]])quotesdbs_dbs12.pdfusesText_18