Cours Simulation Numerique
Cours Simulation Numerique
PREMIERE PARTIE
Méthodes Numériques
1
Méthodes numériques
2
Méthodes numériques
1 x3
x1 x2
f(x)
a b a' b' a'' b''
0
-1
-2
-2 -1 0 x 1 2 3
3
Méthodes numériques
On remarque que la fonction est continue sur chaque sous intervalle, aussi chaque
sous intervalle :
La forme de l’équation f(x)=0 peut etre compliquée, dans ce cas s’il est possible on
peut la décomposer en deux parties simples g(x)=h(x).
Par exemple 𝒇(𝒙) = 𝐥𝐧(𝒙) − 𝒙𝟐 + 𝟐 = 𝟎, qui est assez compliqué pour le tracé, peut
être décomposée en :
Exemple :
Prenons l’équation : 𝐥𝐧(𝒙) − 𝒙𝟐 + 𝟐 = 𝟎 localisant ses racines, à ce point on ne connait
pas le nombre de racines de cette équation. On trace la courbe de la fonction :
𝒇(𝒙) = 𝐥𝐧(𝒙) − 𝒙𝟐 + 𝟐 = 𝟎, les intersections de la courbe avec l’axe des x représentent
les racines de cette fonction.
2 2
f2(x)=x2-2
1 1
x1 x2 x1 f1(x)=ln(x) x2
f(x)
f(x)
0 0
-1 -1
-2 -2
0.0 0.5 1.0 1.5 2.0 0.0 0.5 1.0 1.5 2.0
x x
On note que cette équations a deux racines (Fig. 2) qui appartiennent par exemple
aux intervalles [0.1,0.5] et [1,2]. On peut aussi rééerire la fonction f(x)=0 sous une
4
Méthodes numériques
𝑓1 (𝑥) = 𝑓2 (𝑥) ; avec 𝑓1 (𝑥) = 𝐥𝐧(𝒙) et 𝑓2 (𝑥) = 𝒙𝟐 − 𝟐 . Ensuite on trace ces deux fonctions
(Fig. 3), qui sont faciles sur les même axes, leurs intersections représentent les
racines de f(x)=0.
2 Méthode de bissection où de dichothomie
C’est la méthode la plus simple et qui nécessite le plus de calculs, elle est basée
sur le cas particulier (Théorème de Bolzano) du théorème des valeurs intermédiaires
qui dit que :
b1- a1
a1 b2- a2 b1
2
a2 b2
b3- a3
a3 b3
1
f(x) a4 b4
x1 x x2
0
x3
-1
-2
0 x 1 2
5
Méthodes numériques
En répétant (itérant) la même méthode pour l’intervalle obtenu on aura les valeurs :
𝒃−𝒂
𝒃𝟏 − 𝒂𝟏 = ;
𝟐
𝒃𝟏 − 𝒂𝟏 𝟏 𝒃 − 𝒂 𝒃 − 𝒂
𝒃𝟐 − 𝒂𝟐 = = = ;
𝟐 𝟐 𝟐 𝟐𝟐
𝒃𝟐 − 𝒂𝟐 𝟏 𝒃 − 𝒂 𝒃 − 𝒂
𝒃𝟑 − 𝒂𝟑 = = = ;
𝟐 𝟐 𝟐𝟐 𝟐𝟑
………………………………………….………………
𝒃𝒏−𝟏 − 𝒂𝒏−𝟏 𝟏 𝒃 − 𝒂 𝒃 − 𝒂
𝒃𝒏 − 𝒂𝒏 = = = .
𝟐 𝟐 𝟐𝒏−𝟏 𝟐𝒏
𝑎𝑛 𝑥𝑛 𝑥̅ 𝑏𝑛
𝟏 𝒃−𝒂 𝒃−𝒂
Puisque 𝒙
̅ ∈ [𝒂𝒏 , 𝒃𝒏 ] = [𝒂𝒏 , 𝒙𝒏 ] ∪ [𝒙𝒏 , 𝒃𝒏 ] on a |𝒙𝒏 − 𝒙
̅| ≤
𝟐 𝟐𝒏
= 𝟐𝒏+𝟏
|𝒙𝒏 − 𝒙
̅| ≤ 𝜺
𝒃−𝒂
Alors, il suffit que 𝟐𝒏+𝟏
≤𝜺
𝒃−𝒂
𝐥𝐧( )
Cela donne 𝒏≥ 𝐥𝐧(𝟐)
𝟐𝜺
6
Méthodes numériques
𝒃−𝒂 𝟎.𝟓−𝟎.𝟏
𝐥 𝐧( ) 𝐥 𝐧( )
𝒏≥ 𝐥 𝐧(𝟐)
𝟐𝜺
= 𝟐∗𝟎.𝟎𝟏
𝐥 𝐧(𝟐)
= 𝟒. 𝟑𝟐 on prend n=5 puisque n est entier et supérieur à 4.32.
𝒂𝟏 + 𝒃𝟏 𝟎. 𝟏 + 𝟎. 𝟓
𝒙𝟏 = = = 𝟎. 𝟑𝟎; 𝒇(𝟎. 𝟑) = 𝟎. 𝟕𝟎𝟔 > 𝟎 donc 𝒂𝟐 = 𝟎. 𝟏 et 𝒃𝟐 = 𝟎. 𝟑
𝟐 𝟐
𝒂𝟐 + 𝒃𝟐 𝟎. 𝟏 + 𝟎. 𝟑
𝒙𝟐 = = = 𝟎. 𝟐𝟎; 𝒇(𝟎. 𝟐) = 𝟎. 𝟑𝟓𝟏 > 𝟎 donc 𝒂𝟑 = 𝟎. 𝟏 et 𝒃𝟑 = 𝟎. 𝟐
𝟐 𝟐
𝒂𝟑 + 𝒃𝟑 𝟎. 𝟏 + 𝟎. 𝟐
𝒙𝟑 = = = 𝟎. 𝟏𝟓; 𝒇(𝟎. 𝟏𝟓) = 𝟎. 𝟎𝟖𝟎 > 𝟎 donc 𝒂𝟒 = 𝟎. 𝟏 et 𝒃𝟒 = 𝟎. 𝟏𝟓
𝟐 𝟐
𝒂𝟒 + 𝒃𝟒 𝟎. 𝟏 + 𝟎. 𝟏𝟓
𝒙𝟒 = = = 𝟎. 𝟏𝟐𝟓; 𝒇(𝟎. 𝟏𝟐𝟓) = −𝟎. 𝟎𝟗𝟓 < 𝟎 donc 𝒂𝟓 = 𝟎. 𝟏𝟓 et 𝒃𝟒 = 𝟎. 𝟏𝟐𝟓
𝟐 𝟐
𝒂𝟓 +𝒃𝟓 𝟎.𝟏𝟓+𝟎.𝟏𝟐𝟓
𝒙𝟓 = = = 𝟎. 𝟏𝟑𝟕𝟓; 𝒇(𝟎. 𝟏𝟐𝟓) = −𝟎. 𝟎𝟎𝟑 La solution est 𝒙𝟓 = 𝟎. 𝟏𝟑𝟕𝟓
𝟐 𝟐
7
Méthodes numériques
Cette méthode est basée sur le principe du point fixe d’une fonction, on écrit
l’équation f(x)=0 sous la forme x=g(x), ensuite on cherche le point fixe 𝒙
̅ de la fonction
g. Pour cela on crée la suite 𝒙𝒏+𝟏 = 𝒈(𝒙𝒏 ) ( n=0,1,2….) avec 𝑥0 donnée par dichotomie
par exemple.
Exemple : Ecrire l’équation f(x)=0 sous la forme x = g(x) si 𝒇(𝒙) = 𝒙𝟐 + 𝟑𝒆𝒙 − 𝟏𝟐.
𝟏𝟐−𝒙𝟐
𝒙 = 𝒈𝟑 (𝒙) = 𝒍𝒏 ( )
𝟑
Alors la suite {𝒙𝒏 }𝒏=𝟎,∞ définie par 𝒙𝒏+𝟏 = 𝒈(𝒙𝒏 ) ( n=0,1,2….) converge
indépendamment de la valeur de 𝒙𝟎 vers l’unique point fixe 𝒙
̅ de g.
On arrête les calculs pour cette méthode lorsque la différence absolue entre
deux itérations successives est inférieure à une certaine précision 𝜀 donnée.
|𝒙𝒏+𝟏 − 𝒙𝒏 | < 𝜺
8
Méthodes numériques
9
Méthodes numériques
4 Méthode de Newton-Raphson
C’est la méthode la plus efficace et la plus utilisée, elle repose sur le
développement de Taylor. Si f(x) est continue et continument dérivable dans le
voisinage de 𝒙
̅ solution de f(x)=0, alors le développement en série de Taylor autour
d’un estimé 𝒙𝒏 proche de 𝒙
̅ s’écrit :
(𝒙
̅−𝒙𝒏 ) ′ ̅−𝒙𝒏 )𝟐 ′′
(𝒙
̅) = 𝒇(𝒙𝒏 ) +
𝒇(𝒙 𝒇 (𝒙𝒏 ) + 𝒇 (𝒙𝒏 ) + ⋯.
𝟏! 𝟐!
̅ − 𝒙𝒏 )𝒇′ (𝒙𝒏 ) ≈ 𝟎
𝒇(𝒙𝒏 ) + (𝒙
𝒇(𝒙𝒏 )
Donc ̅ = 𝒙𝒏 −
𝒙
𝒇′ (𝒙𝒏 )
𝒇(𝒙 )
𝒙𝒏+𝟏 = 𝒙𝒏 − 𝒇′ (𝒙𝒏 ) (n=0,1,2,…..)
𝒏
i. 𝒇(𝒂)𝒇(𝒃) < 𝟎
ii. 𝒇′(𝒙) 𝒆𝒕 𝒇′′(𝒙) sont non nulles et gardent un signe constant sur
l’intervalle donné.
|𝒙𝒏+𝟏 − 𝒙𝒏 | ≤ 𝜺
Si cette condition est vérifiée on prend 𝒙𝒏+𝟏 comme solution de f(x)=0.
10
Méthodes numériques
11
Méthodes numériques
𝒇(𝒙𝒌 ) = 𝑷𝒏 (𝒙𝒌 ), 𝒌 = 𝟎, 𝟏, 𝟐, … … , 𝒏
Ce polynôme est donné par :
𝒏
𝑷𝒏 (𝒙) = ∑ 𝒇(𝒙𝒊 )𝑳𝒊 (𝒙) = 𝒇(𝒙𝟎 )𝑳𝟎 (𝒙) + 𝒇(𝒙𝟏 )𝑳𝟏 (𝒙) + ⋯ … + 𝒇(𝒙𝒏 )𝑳𝒏 (𝒙)
𝒊=𝟎
𝑳𝒌 (𝒙) sont dits coefficients polynômes de Lagrange, ils sont orthogonaux c’est-à-dire
𝑳𝒌 (𝒙𝒋 ) = 𝟎 et 𝑳𝒌 (𝒙𝒌 ) = 𝟏.
12
Méthodes numériques
𝟒
𝑿(𝒕) ≈ 𝑷𝟒 (𝒕) = ∑ 𝒇(𝒕𝒊 )𝑳𝒊 (𝒕) = 𝒇(𝒕𝟎 )𝑳𝟎 (𝒕) + 𝒇(𝒕𝟏 )𝑳𝟏 (𝒕) + 𝒇(𝒕𝟐 )𝑳𝟐 (𝒕) + 𝒇(𝒕𝟑 )𝑳𝟑 (𝒕) + 𝒇(𝒕𝟒 )𝑳𝟒 (𝒕)
𝒊=𝟎
Avec les coefficients 𝑓(𝑡𝑖 ) sont les valeurs de X(ti) aux points donnés ti, on remplace
et on écrit donc :
coefficients polynômes 𝑳𝟎 (𝒕) et 𝑳𝟑 (𝒕) car ils seront multipliés par zéro dans le
remplacement.
13
Méthodes numériques
𝑷𝟏 (𝒙) = 𝒂𝟎 + 𝒂𝟏 (𝒙 − 𝒙𝟎 )
𝑷𝟐 (𝒙) = 𝑷𝟏 (𝒙) + 𝒂𝟐 (𝒙 − 𝒙𝟎 )(𝒙 − 𝒙𝟏 )
𝑷𝟑 (𝒙) = 𝑷𝟐 (𝒙) + 𝒂𝟑 (𝒙 − 𝒙𝟎 )(𝒙 − 𝒙𝟏 )(𝒙 − 𝒙𝟐 )
………………………………………..
{𝑷𝒏 (𝒙) = 𝑷𝒏−𝟏 (𝒙) + 𝒂𝒏 (𝒙 − 𝒙𝟎 )(𝒙 − 𝒙𝟏 ) … (𝒙 − 𝒙𝒏−𝟏 )
En pratique et pour le nombre limité de points, les différences divisées sont calculées
en utilisant un tableau qui a la forme suivante :
𝒙𝟒 𝒇[𝒙𝟒 ] 𝒇[𝒙𝟑 , 𝒙𝟒 ]
14
Méthodes numériques ST L 2 S4 Dr. MAMERI A. Dép. GM, FSSA, ULBM
𝒏 (𝒙 − 𝒙𝒊 ) (𝒏+𝟏)
𝜺(𝒙) = |𝒇(𝒙) − 𝑷𝒏 (𝒙)| = ∏ 𝒇 (𝒛)
𝒊=𝟎 (𝒏 + 𝟏)!
Dans ce cas M est majorant de la fonction 𝒇(𝒏+𝟏) (𝒙) sur l’intervalle [a,b].
15
Méthodes numériques
Remplaçant les 𝑎𝑖 et les 𝑡𝑖 par leurs valeurs dans les polynômes de Newton, on trouve :
𝑷𝟏 (𝒕) = 𝒂𝟎 + 𝒂𝟏 (𝒕 − 𝒕𝟎 ) = 𝟎 + 𝟓(𝒕 − 𝟎) = 𝟓𝒕
𝑷𝟑 (𝒕) = 𝑷𝟐 (𝒕) + 𝒂𝟑 (𝒕 − 𝒕𝟎 )(𝒕 − 𝒕𝟏 )(𝒕 − 𝒕𝟐 ) = 𝟐. 𝟓𝒕𝟐 + 𝟐. 𝟓𝒕 − 𝟓(𝒕 − 𝟎)(𝒕 − 𝟏)(𝒕 − 𝟐) = −𝟓𝒕𝟑 + 𝟏𝟕. 𝟓𝒕𝟐 − 𝟕. 𝟓𝒕
𝑷𝟒 (𝒕) = 𝑷𝟑 (𝒕) + 𝒂𝟒 (𝒕 − 𝒕𝟎 )(𝒕 − 𝒕𝟏 )(𝒕 − 𝒕𝟐 )(𝒕 − 𝒕𝟑 ) = −𝟓𝒕𝟑 + 𝟏𝟕. 𝟓𝒕𝟐 − 𝟔𝒕 + 𝟑. 𝟎𝟒𝟏𝟕(𝒕 − 𝟎)(𝒕 − 𝟏)(𝒕 − 𝟐)(𝒕 − 𝟑)
𝑷𝟒 (𝒕) = 3.04167𝑡4 − 23.25𝑡3 + 50.95833𝑡2 − 25.75𝑡 C’est le même polynôme que celui de
Lagrange.
20
P2 P1
(2,15)
15
10
(1,5)
5
Pi(t)
(4,3)
(0,0)
(3,0)
0
P4
Points d'interpolation
-5
P3
-10
0 1 2 3 4
t
16
Méthodes numériques
2.0
1.5
(b,f(b))
1.0 f(x)
f
0.5 (a,f(a))
0.0
a b
h
-0.5
0.0 0.5 1.0 1.5 2.0
x
𝒃 𝒉
𝒔 = ∫𝒂 𝒇(𝒙) = 𝟐 (𝒇(𝒂) + 𝒇(𝒃))
Avec h=b-a est dit pas d’intégration. On peut remarquer qu’il y’a une différence
importante entre la courbe de la fonction et la ligne droite, cela veut qu’on commît
une erreur de calcul. Pour minimiser cette erreur, on utilise une autre forme plus
adaptée de cette formule.
17
Méthodes numériques
1 2
Exemple : Soit à calculer l’intégrale ∫0 𝑒 −𝑥 𝑑𝑥 avec une précision de 0.001 par la
méthode du trapèze. On doit premièrement trouver le nombre de division à faire pour
𝒃−𝒂 𝟐 ′′
obtenir cette précision. L’erreur d’intégration s’écrit 𝑹(𝒇) = − 𝟏𝟐
𝒉 𝒇 (𝒛) sa valeur
absolue doit être inférieure ou égale à la précision donnée (0.001), c.à.d. :
𝒃 − 𝒂 𝟐 ′′
|𝑹(𝒇)| = |− 𝒉 𝒇 (𝒛)| ≤ 𝟎. 𝟎𝟎𝟏
𝟏𝟐
2 2
La fonction 𝑓(𝑥) = 𝑒 −𝑥 donc sa dérivée seconde est 𝑓"(𝑥) = 2(2𝑥 2 − 1)𝑒 −𝑥 , cette
fonction est strictement croissante dans l’intervalle donné (Fig. 3.3).
18
Méthodes numériques
f"(x)
y
-1
-2
0,0 0,5 1,0
x
On calcule
𝑀 = 𝑚𝑎𝑥|𝒇′′ (𝒛)| = 𝟐 à 𝒙 = 𝟎
𝒃−𝒂 𝟐 ′′
donc |𝑹(𝒇)| = |−
𝟏𝟐
𝒉 𝒇 (𝒛)| ≤ 𝟎. 𝟎𝟎𝟏
𝟏𝟐∗𝟎.𝟎𝟎𝟏 𝟏
d’où 𝒉 ≤ √ (𝟏−𝟎)∗𝟐 = 𝟎. 𝟎𝟕𝟕𝟒 donc n = = 𝟏𝟐. 𝟗𝟏 on prend 13 divisions.
𝟎.𝟎𝟕𝟕𝟒
1
Le pas d’intégration ℎ = 13.
1 12
−𝑥 2
1 2 𝑖 2 2
∫ 𝑒 𝑑𝑥 = (𝑒 −0 + 2 ∑ 𝑒 −(13) + 𝑒 −1 ) = 0.74646
0 2 ∗ 13
𝑖=1
19
Méthodes numériques
Dans cette formule on ne remplace pas la fonction par une droite mais par une
parabole de degré n inférieure ou égale à deux. Cette dernière doit passer par trois
points (𝒙𝟎 , 𝒚𝟎 ), (𝒙𝟏 , 𝒚𝟏 )𝐞𝐭 (𝒙𝟐 , 𝒚𝟐 ) ce qui fait que cette méthode n’est applicable que pour
un nombre pair de tranches (une tranche c’est l’intervalle entre deux points) (Fig.
3.4.). La formule de Simpson s’écrit :
𝒃
𝒉
∫ 𝒇(𝒙) ≅ (𝒇(𝒙𝟎 ) + 𝟒𝒇(𝒙𝟏 ) + 𝒇(𝒙𝟐 ))
𝒂 𝟑
𝒃
𝒉
∫ 𝒇(𝒙) ≅ (𝒇(𝒙𝟎 ) + 𝟐 ∑ 𝒇(𝒙𝒊 ) + 𝟒 ∑ 𝒇(𝒙𝒊 ) + 𝒇(𝒙𝟐𝒏 ))
𝒂 𝟑 𝒊 𝒑𝒂𝒊𝒓 𝒊 𝒊𝒎𝒑𝒂𝒊𝒓
𝒃−𝒂
𝑹(𝒇) = − 𝟏𝟖𝟎 𝒉𝟒 𝒇(𝟒) (𝒛) avec 𝒛 ∈ [𝒂, 𝒃]
20
Méthodes numériques
1 2
Exemple : Soit à calculer l’intégrale ∫0 𝑒 −𝑥 𝑑𝑥 avec une précision de 0.001 par la
méthode de Simpson. On doit premièrement trouver le nombre de division à faire
pour obtenir cette précision.
L’erreur d’intégration s’écrit :
(𝒃−𝒂)
𝑹(𝒇) = − 𝟏𝟖𝟎
𝒉𝟒 𝒇(𝟒) (𝒛)
sa valeur absolue doit être inférieure ou égale à la précision donnée (0.001), c.à.d. :
(𝒃 − 𝒂) 𝟒 (𝟒)
|𝑹(𝒇)| = |− 𝒉 𝒇 (𝒛)| ≤ 𝟎. 𝟎𝟎𝟏
𝟏𝟖𝟎
2 2
La fonction 𝑓(𝑥) = 𝑒 −𝑥 sa dérivée quatrième est 𝑓 (4) (𝑥) = (16𝑥 4 − 48𝑥 2 + 12)𝑒 −𝑥 ,
cette fonction est non monotone dans l’intervalle donné. On calcule son maximum
par le traceur Origin (Fig. 3.3.).
𝑀 = 𝑚𝑎𝑥|𝒇(𝟒) (𝒛)| = 𝟏𝟐 à 𝒙 = 𝟎.
𝟒 𝟏𝟖𝟎∗𝟎.𝟎𝟎𝟏
D’ou 𝒉 ≤ √ (𝟏−𝟎)∗𝟏𝟐 = 𝟎. 𝟑𝟓
𝟏 1
donc 𝟐𝒏 = = 𝟐. 𝟖𝟓 on prend 𝟒 divisions, le pas d’intégration ℎ = = 0.25.
𝟎.𝟑𝟓 4
1 2 0.25 −02 2 2 2 2
On trouve : ∫0 𝑒 −𝑥 𝑑𝑥 = 3
(𝑒 + 4(𝑒 −0.25 + 𝑒 −0.75 ) + 2𝑒 −0.5 + 𝑒 −1 ) = 0.7469
21
Méthodes numériques
𝒃 𝒃 𝒃
On intègre : ∫𝒂 𝒇(𝒙)𝒅𝒙 ≅ ∫𝒂 𝑷𝒏 (𝒙)𝒅𝒙 = ∑𝒏𝒊=𝟎 𝒇𝒊 ∫𝒂 𝑳𝒊 (𝒙)𝒅𝒙
𝒃
Si on pose : 𝑨𝒊 = ∫𝒂 𝑳𝒊 (𝒙)𝒅𝒙 pour i=0,1,…,n
𝒃
On obtient la formule de quadrature : ∫𝒂 𝒇(𝒙)𝒅𝒙 ≅ ∑𝒏𝒊=𝟎 𝒇𝒊 𝑨𝒊
On doit maintenant choisir la forme de la fonction f(x), dans notre cas on prend :
𝒃 𝒃𝒌+𝟏 −𝒂𝒌+𝟏
On remplace dans l’intégrale : ∫𝒂 𝒙𝒌 𝒅𝒙 ≅ ∑𝒏𝒊=𝟎 𝒇𝒊 𝑨𝒊 = 𝒌+𝟏
k=0,1,2,….,n
𝒃𝟏 −𝒂𝟏
pour k=0 : 𝒙𝟎𝟎 𝑨𝟎 + 𝒙𝟎𝟏 𝑨𝟏 + ⋯ … + 𝒙𝟎𝒏 𝑨𝟎 =
𝟏
𝒃𝟐 −𝒂𝟐
pour k=1 : 𝒙𝟏𝟎 𝑨𝟎 + 𝒙𝟏𝟏 𝑨𝟏 + ⋯ … + 𝒙𝟏𝒏 𝑨𝟎 = 𝟐
𝒃𝟑 −𝒂𝟑
pour k=2 : 𝒙𝟐𝟎 𝑨𝟎 + 𝒙𝟐𝟏 𝑨𝟏 + ⋯ … + 𝒙𝟐𝒏 𝑨𝟎 =
𝟑
……………………………………………………………………………………
𝒃𝒏+𝟏 −𝒂𝒏+𝟏
pour k=n : 𝒙𝒏𝟎 𝑨𝟎 + 𝒙𝒏𝟏 𝑨𝟏 + ⋯ … + 𝒙𝒏𝒏 𝑨𝟎 = 𝒏+𝟏
𝟏 𝟏 𝟏 … … 𝟏 𝑨𝟎 𝑰𝟎
𝒙𝟎 𝒙𝟏 𝒙𝟐 … . . 𝒙𝒏 𝑨𝟏 𝑰𝟏
𝒃𝒌+𝟏 −𝒂𝒌+𝟏
𝟐 𝟐 𝟐
𝒙𝟎 𝒙𝟏 𝒙𝟐 … . 𝒙𝒏 𝟐 𝑨 𝟐 = 𝑰𝟐 avec 𝑰𝒌 =
𝒌+𝟏
…………………. . .
[ 𝒙𝒏𝟎 𝒙𝒏𝟏 𝒙𝒏𝟐 … . 𝒙𝒏𝒏 ] [𝑨𝒏 ] [𝑰𝒏 ]
22
Méthodes numériques
1 2
Exemple : Soit à calculer l’intégrale ∫0 𝑒 −𝑥 𝑑𝑥 avec une formule qui a la forme
1 2
suivante : ∫0 𝑒 −𝑥 𝑑𝑥 = 𝑨𝟎 𝒇(𝟎) + 𝑨𝟏 𝒇(𝟎. 𝟐𝟓) + 𝑨𝟐 𝒇(𝟎. 𝟓) + 𝑨𝟑 𝒇(𝟎. 𝟕𝟓) + 𝑨𝟐 𝒇(𝟏. 𝟎𝟎). Dans ce
cas on cherche premièrement les constantes 𝐴𝑖 puis on calcule l’intégrale. Ces
constantes sont données par le système d’équations suivant :
1 1 1 1 1 𝑨𝟎 𝟏
0 0.25 0.5 0.75 1 𝑨𝟏 𝟎. 𝟓
0 0.0625 0.25 0.5626 1 𝑨𝟐 = 𝟎. 𝟑𝟑𝟑
0 0.015625 0.125 0.421875 1 𝑨𝟑 𝟎. 𝟐𝟓𝟎
[0 0.00390625 0.0625 0.31640625 1] [𝑨𝟒 ] [𝟎. 𝟐𝟎𝟎]
23
Méthodes numériques
𝒊𝒉 (pour i=1,2,…,n).
24
Méthodes numériques
(𝒕 − 𝒕𝟎 ) (𝒕 − 𝒕𝟎 )𝟐
𝒚(𝒕) = 𝒚(𝒕𝟎 ) + 𝒚′ (𝒕𝟎 ) + 𝒚′′ (𝒕𝟎 ) +⋯
𝟏! 𝟐!
Sachant que 𝒚′ (𝒕𝟎 ) = 𝒇(𝒕𝟎 , 𝒚(𝒕𝟎 )) et 𝒉 = 𝒕𝟏 − 𝒕𝟎 ,
𝒉𝟐
Ecrivons 𝒚(𝒕𝟏 ) = 𝒚(𝒕𝟎 ) + 𝒇(𝒕𝟎 , 𝒚(𝒕𝟎 ))𝒉 + 𝒚′′ (𝒕𝟎 ) 𝟐! + ⋯
Si h est suffisamment petit alors on peut négliger 𝒉𝟐 et donc les termes d’ordre deux
et plus, on obtient donc :
𝒕 = 𝒂 + 𝒊𝒉, 𝒊 = 𝟎, 𝟏, 𝟐, … . . , 𝒏 − 𝟏
{ 𝒊
𝒚𝒊+𝟏 = 𝒚𝒊 + 𝒉𝒇(𝒕𝒊 , 𝒚𝒊 ), 𝒚𝟎 = 𝒚(𝒕𝟎 )
𝑦 ′ = 2 − 𝑡𝑦 2 𝑡 ∈ [0,1], 𝑦 ∈ [0,1]
{
𝑦(0) = 1
𝝏𝒇(𝒕,𝒚) 𝝏(2−𝑡𝑦 2 )
Max | 𝝏𝒚
| = Max | 𝝏𝒚
| = |−𝟐𝒕𝒚| = 𝟐 < 𝑳 Condition vérifiée
On divise l’intervalle de t, [0,1] avec une pas h=0.25, soit 0, 0.25, 0.50, 0.75 et 1.
y0 =y(0)=1 y1 y2 y3 y4
𝒕𝒊 = 𝒊𝒉, 𝒊 = 𝟎, 𝟏, 𝟐 et 𝟑
On écrit : {
𝒚𝒊+𝟏 = 𝒚𝒊 + 𝒉𝒇(𝒕𝒊 , 𝒚𝒊 ) = 𝒚𝒊 + 𝟎. 𝟐𝟓(𝟐 − 𝒕𝒊 𝒚𝟐𝒊 ), 𝒚𝟎 = 𝟏
25
Méthodes numériques
𝒊 = 𝟎, 𝒚𝟏 = 𝒚𝟎 + 𝒉𝒇(𝒕𝟎 , 𝒚𝟎 ) = 𝟏 + 𝟎. 𝟐𝟓(𝟐 − 𝟎 ∗ 𝟏𝟐 ) = 𝟏. 𝟓
𝒊 = 𝟏, 𝒚𝟐 = 𝒚𝟏 + 𝒉𝒇(𝒕𝟏 , 𝒚𝟏 ) = 𝟏. 𝟓 + 𝟎. 𝟐𝟓(𝟐 − 𝟎. 𝟐𝟓 ∗ 𝟏. 𝟓𝟐 ) = 𝟏. 𝟖𝟓𝟗𝟒
𝒊 = 𝟐, 𝒚𝟑 = 𝒚𝟐 + 𝒉𝒇(𝒕𝟐 , 𝒚𝟐 ) = 𝟏. 𝟖𝟓𝟗 + 𝟎. 𝟐𝟓(𝟐 − 𝟎. 𝟓 ∗ 𝟏. 𝟖𝟓𝟗𝟐 ) = 𝟏. 𝟗𝟐𝟕𝟐
𝒊 = 𝟑, 𝒚𝟒 = 𝒚𝟑 + 𝒉𝒇(𝒕𝟑 , 𝒚𝟑 ) = 𝟏. 𝟗𝟐𝟕 + 𝟎. 𝟐𝟓(𝟐 − 𝟎. 𝟕𝟓 ∗ 𝟏. 𝟗𝟐𝟕𝟐 ) = 𝟏. 𝟕𝟑𝟎𝟖
26
Méthodes numériques
(𝒕 − 𝒕𝟎 ) (𝒕 − 𝒕𝟎 )𝟐 (𝒕 − 𝒕𝟎 )𝟑
𝒚(𝒕) = 𝒚(𝒕𝟎 ) + 𝒚′ (𝒕𝟎 ) ′′ (𝒕 )
+𝒚 𝟎 +𝒚′′′ (𝒕 )
𝟎 +⋯
𝟏! 𝟐! 𝟑!
Si on prend les trois premiers termes et on néglige les autres d’ordre supérieur, on
obtient :
(𝒕 − 𝒕𝟎 ) (𝒕 − 𝒕𝟎 )𝟐
𝒚(𝒕) ≅ 𝒚(𝒕𝟎 ) + 𝒚′ (𝒕𝟎 ) + 𝒚′′ (𝒕𝟎 ) +⋯
𝟏! 𝟐!
En remplaçant 𝒕 par 𝒕𝟏 cela donne :
(𝒕𝟏 − 𝒕𝟎 ) (𝒕𝟏 − 𝒕𝟎 )𝟐 𝒉𝟐
𝒚(𝒕𝟏 ) = 𝒚(𝒕𝟎 ) + 𝒚′ (𝒕𝟎 ) + 𝒚′′ (𝒕𝟎 ) = 𝒚(𝒕𝟎 ) + 𝒚′ (𝒕𝟎 )𝒉 + 𝒚′′ (𝒕𝟎 )
𝟏! 𝟐! 𝟐!
𝒚′(𝒕𝟏 )−𝒚′(𝒕𝟎 ) 𝒉
Or 𝒚′′ (𝒕𝟎 ) = on aura 𝒚(𝒕𝟏 ) = 𝒚(𝒕𝟎 ) + [𝒇(𝒕𝟏 , 𝒚𝟏 ) + 𝒇(𝒕𝟎 , 𝒚𝟎 )]
𝒉 𝟐
𝒉
𝒚𝒊+𝟏 = 𝒚𝒊 + [𝒇(𝒕𝒊+𝟏 , 𝒚𝑬𝒊+𝟏 ) + 𝒇(𝒕𝒊 , 𝒚𝒊 )]
𝟐
On remarque que cette formule donne 𝒚𝒊+𝟏 en fonction de 𝒚𝑬𝒊+𝟏 qui doit être calculée
par la méthode d’Euler.
27
DEUXIEME PARTIE
1. Présentation
Le Langage Python
Python est un langage de programmation (au même titre que le C, C++, fortran, java . . .),
développé en 1989. Ses principales caractéristiques sont les suivantes :
— «open-source» : son utilisation est gratuite et les fichiers sources sont disponibles et modi-
fiables ;
— simple et très lisible ;
— doté d’une bibliothèque de base très fournie ;
— importante quantité de bibliothèques disponibles : pour le calcul scientifique, les statis-
tiques, les bases de données, la visualisation . . . ;
— grande portabilité : indépendant vis à vis du système d’exploitation (linux, windows, Ma-
cOS) ;
— orienté objet ;
— typage dynamique : le typage (association à une variable de son type et allocation zone
mémoire en conséquence) est fait automatiquement lors de l’exécution du programme, ce
qui permet une grande flexibilité et rapidité de programmation, mais qui se paye par une
surconsommation de mémoire et une perte de performance ;
— présente un support pour l’intégration d’autres langages.
Il existe deux techniques principales pour traduire un code source en langage machine :
— la compilation : une application tierce, appelée compilateur, transforme les lignes de code en
un fichier exécutable en langage machine. A chaque fois que l’on apporte une modification au
programme, il faut recompiler avant de voir le résultat.
— l’interprétation : un interpréteur s’occupe de traduire ligne par ligne le programme en langage
machine. Ce type de langage offre une plus grande commodité pour le développement, mais
les exécutions sont souvent plus lentes.
Dans le cas de Python, on peut admettre pour commencer qu’il s’agit d’un langage interprété,
qui fait appel des modules compilés. Pour les opérations algorithmiques coûteuses, le langage
Python peut s’interfacer à des bibliothèques écrites en langage de bas niveau comme le langage C.
Il existe deux versions de Python : 2.7 et 3.3. La version 3.3 n’est pas une simple amélioration
de la version 2.2. Attention, toutes les librairies Python n’ont pas effectué la migration de 2.7 à 3.3.
L’interpréteur
Dans un terminal, taper python (interpréteur classique) ou ipython (interpréteur plus évolué)
pour accéder à un interpréteur Python. Vous pouvez maintenant taper dans ce terminal des ins-
tructions Python qui seront exécutées.
28
Utilisations de Python et librairies
Le mode programmation
Il s’agit d’écrire dans un fichier une succession d’instructions qui ne seront éffectuées que lorsque
vous lancerez l’exécution du programme. Cela permet tout d’abord de sauvegarder les commandes
qui pourront être utilisées ultérieurement, et d’autre part d’organiser un programme, sous-forme
de fichier principal, modules, fonctions . . ..
Le fichier à exécuter devra avoir l’extension .py, et devra contenir en première ligne le chemin
pour accéder au compilateur Python, ainsi que l’encodage :
#!/usr/bin/env python
# -*- coding: utf-8 -*-
L’environnement Spyder permet de réaliser des programmes informatiques écrits avec le lan-
gage Python. Il est disponible avec la distribution Anaconda, qui présente de nombreux avan-
tages, notamment celui d’être simple à installer. Son téléchargement se fait à l’adresse suivante :
https ://[Link]/cshop/anaconda/
Une fois la distribution Anaconda téléchargée et installée, on peut commencer à lancer Spyder en
tapant Spyder dans un terminal.
Au lancement de Spyder, apparaît une fenêtre partagée en deux zones. La zone en-bas à droite,
appelée console (shell en anglais), est celle où l’on peut travailler de façon interactive avec l’in-
terprteur Python. La zone à gauche est un éditeur de texte, spécialement conçu pour écrire des
programmes dans le langage Python.
Le langage Python est orienté objet, c’est-à-dire qu’il permet de créer des objets, en définissant
des attributs et des fonctions qui leur sont propres. Cependant, certains objets sont pré-définis
dans le langage. Nous allons voir à présent les plus importants.
29
(a) les nombres et les booléens
— entiers (32 bits)
type : int
— réels (64 bits)
type : float
exemples de valeurs : 4. 5.1 1.23e-6
— complexes
type : complex
exemples de valeurs : 3+4j 3+4J
— booléens type : bool
exemples de valeurs : True False
>>> i = 3 # i vaut 3
>>> a, k=True, 3.14159
>>> k=r=2.15
>>> x=complex(3,4)
— affichage
>>> i
3
>>> print(i)
3
— Opérateurs addition, soustraction, multiplication, division
+, -, *, \, \%,
— Opérateurs puissance, valeur absolue
>>> int(3.1415)
3
>>> float(3)
3.
30
>>> ’pour prendre l\’apostrophe’
’pour prendre l’ apostrophe’
>>> "pour prendre l’apostrophe"
"pour prendre l’apostrophe"
>>> " " "ecrire
sur
plusieurs
lignes" " "
’ecrire\nsur\nplusieurs\nlignes’
— concaténation
On peut mettre plusieurs chaînes de caractères bout à bout avec l’opérateur binaire de
concaténation, noté +.
>>> s = ’i vaut’
>>> i = 1
>>> print( s+i )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate ’str’ and ’int’ objects
>>> print( s + " %d %s "%(i, "m."))
i vaut 1 m.
>>> print( s + ’ ’ + str(i))
i vaut 1
>>> print(’*-’ * 5)
*-*-*-*-*-
— méthodes propres
— len(s) : renvoie la taille d’une chaîne,
— [Link] : recherche une sous-chaîne dans la chaîne,
— [Link] : enlève les espaces de fin,
— [Link] : remplace une chaîne par une autre,
— ...
31
>>> []; list();
[]
[]
>>> [1,2,3,4,5]; [’point’,’triangle’,’quad’];
[1, 2, 3, 4, 5]
[’point’, ’triangle’, ’quad’]
>>> [1,4,’mesh’,4,’triangle’,[’point’,6]];
[1, 4, ’mesh’, 4, ’triangle’, [’point’, 6]]
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(2,10,2)
[2, 4, 6, 8]
— modification
Contrairement aux chaînes de caractères, on peut modifier les éléments d’une liste :
>>> l=[1,2,3,4,5]
>>> l[2:]=[2,2,2]
>>> l
[1, 2, 2, 2, 2]
— concaténation
>>> [0]*7
[0, 0, 0, 0, 0, 0, 0]
>>> L1, L2 = [1,2,3], [4,5]
>>> L1
[1, 2, 3]
>>> L2
[4, 5]
>>> L1+L2
[1, 2, 3, 4, 5]
— méthodes propres
— len(L) : renvoie la taille de la liste L,
— [Link] : trie la liste L,
— [Link] : ajoute un élément à la fin de la liste L,
— [Link] : inverse la liste L,
— [Link] : recherche un élément dans la liste L,
— [Link] : retire un élément de la liste L,
— [Link] : retire le dernier élément de la liste L,
— ...
>>> L = [’Dans’,’python’,’tout’,’est’,’objet’]
>>> T = L
>>> T[4] = ’bon’
>>> T
[’Dans’, ’python’, ’tout’, ’est’, ’bon’]
>>> L
[’Dans’, ’python’, ’tout’, ’est’, ’bon’]
>>> L=T[:]
>>> L[4]=’objet’
>>> T;L
[’Dans’, ’python’, ’tout’, ’est’, ’bon’]
32
[’Dans’, ’python’, ’tout’, ’est’, ’objet’]
3. Commentaires
# ceci est un commentaire
4. Noms de variables
(a) L’indentation
Les fonctions Python n’ont pas de begin ou end explicites, ni d’accolades qui pourraient
marquer là où commence et où se termine le code de la fonction. Le seul délimiteur est les
deux points (« : ») et l’indentation du code lui-même. Les blocs de code (fonctions, instructions
if, boucles for ou while etc) sont définis par leur indentation. L’indentation démarre le bloc et
la désindentation le termine. Il n’y a pas d’accolades, de crochets ou de mots clés spécifiques.
Cela signifie que les espaces blancs sont significatifs et qu’ils doivent être cohérents. Voici un
exemple :
a = -150
if a < 0:
print(’a est negatif’)
ligne d’en-tête
première instruction du bloc
. . .
dernière instruction du bloc
Bloc 1
...
Ligne d’en-tête :
Bloc 2
...
Ligne d’en-tête :
Bloc 3
...
Ligne d’en-tête :
Bloc 2 (suite)
...
Bloc 1 (suite)
...
33
(b) Le test de conditions
Un exemple :
a = 10.
if a > 0:
print(’a est strictement positif’)
if a >= 10:
print (’ a est un nombre ’)
else:
print (’ a est un chiffre ’)
a += 1
elif a is not 0:
print(’ a est strictement negatif ’)
else:
print(’ a est nul ’)
Un autre exemple :
L = [1, 3, 6, 8]
if 9 in L:
print ’9 est dans la liste L’
else:
[Link](9)
Quelques exemples :
— Boucle infinie :
34
while 1:
pass
— y est-il premier ?
x = y/2
while x > 1 :
if y%x ==0
print (str(y)+’ est facteur de ’+str(x))
break
x = x - 1
else :
print( str(y)+ ’ est premier’)
Quelques exemples :
sum = 0
for i in [1, 2, 3, 4] :
sum += 1
prod = 1
for p in range(1, 10) :
prod *= p
s = ’bonjour’
for c in s :
print c,
L = [ x + 10 for x in range(10) ]
6. Les fonctions
35
Un fonction qui n’a pas de return renvoie par défaut None.
def table(base):
n=1
while n < 11:
print n*base
n+=1
>>> f(1,3,’b’,j=1)
(1, 3, ’b’)
{’j’: 1}
Exemple :
>>> f = lambda x, i : x**i
>>> f(2,4)
16
7. Les modules
Fichier [Link]
# Module nombres de Fibonacci
def print_fib(n) :
" " "
ecrit la serie de Fibonacci jusqu’a n
" " "
a, b = 0, 1
while b < n:
print(b),
36
a, b = b, a + b
print
def print_fib(n) :
" " "
retourne la serie de Fibonacci jusqu’a n
" " "
result, a, b = [], 0, 1
while b < n:
[Link](b),
a, b = b, a + b
return result
L’importation de modules
— import fibo
— import fibo as f
— from fibo import print_ fib, list_ fib
— from fibo import * (importe tous les noms sauf les variables et les fonctions privées)
Le module math
8. Le module NumPy
Le module NumPy possède des fonctions basiques en algèbre linéaire, ainsi que pour les transfor-
mées de Fourier.
37
array([ 0., 0., 0., 0.])
>>> nx, ny = 2, 2
>>> a=[Link]((nx,ny))
>>> a
array( [ [ 0., 0. ] ,
[ 0., 0.] ] )
[ [ 0., 0., 0. ],
[ 0., 0., 0. ] ] ] )
Mais nous nous limiterons dans ce cours aux tableaux uni et bi-dimensionnels.
Par défaut les éléments d’un tableau sont des float (un réel en double précision) ; mais on
peut donner un deuxième argument qui précise le type (int, complex, bool, ...). Exemple :
>>> [Link](2, dtype=int)
38
>>> def f(x, y):
... return x**2 + [Link](y)
...
>>> a = [Link](f, (2, 3))
>>> a
array([[ 0. , 0.84147098, 0.90929743],
[ 1. , 1.84147098, 1.90929743]])
La fonction f a ici été appliquée aux valeurs x = [0, 1] et y = [0, 1, 2], le résultat est
[ [f (0, 0), f (0, 1), f (0, 2)], [f (1, 0), f (1, 1), f (0, 2)] ].
Comme pour les listes et les chaines de caractères, l’indexation d’un vecteur (ou tableau
de dimension 1) commence à 0. Pour les matrices (ou tableaux de dimension 2), le premier
index se réfère à la ligne, le deuxième à la colonne. Quelques exemples :
>>> a[:, -1:0:-1] # extrait les éléments d’indice [dbut=-1, pas=-1, fin=0]
# de la première colonne, le dernier élément n’est pas inclus
array([[3, -2],
[6, 5]])
Un tableau est un objet. Si l’on affecte un tableau A à un autre tableau B, A et B font ré-
férence au même objet. En modifiant l’un on modifie donc automatiquement l’autre. Pour
éviter cela on peut faire une copie du tableau A dans le tableau B moyennant la fonction
copy(). Ainsi, A et B seront deux tableaux identiques, mais ils ne feront pas référence au
même objet.
39
>>> a = [Link](1, 5, 5)
>>> b = a
>>> c = [Link]()
>>> b[1] = 9
>>> a; b; c;
array([ 1., 9., 3., 4., 5.])
array([ 1., 9., 3., 4., 5.])
array([ 1., 2., 3., 4., 5.])
Une façon de faire une copie de tableau sans utiliser la méthode copy() est la suivante :
>>> d = [Link]([Link], [Link])
>>> d[:] = b
>>> d
array([ 1., 2., 3., 4., 5.])
39
>>> for e in a:
... print e
[ 1. 2. 3.]
[ 2. 4. 6.]
Pour bien des calculs il est possible d’éviter d’utiliser des boucles (qui sont très consom-
matrices de temps de calcul). On peut faire directement les calculs sur des tableaux. Ceux-ci
sont faits via des fonctions C, un langage de programmation bas niveau, et sont donc plus
rapides. C’est ce qu’on appelle «vectoriser» un programme.
Pour lever une matrice carrée à une puissance n il faut faire une boucle :
>>> B=[Link]()
>>> for i in range(1,n):
... B = [Link](A,B)
40
A la sortie de cette boucle B contiendra An .
Ce module propose des méthodes numériques pour inverser une matrice, calculer son déter-
minant, résoudre un système linéaire . . .
Parmi les options les plus utiles, skiprows est le nombre de lignes à ne pas lire dans l’en–tête
(par défaut 0) et delimiter remplace le délimiteur (espace) par la chaîne que l’on souhaite.
41
chat, chien
3,4
2,5
1,8
On veut supprimer la première ligne qui contient le nom des colonnes mais pas de valeurs
numériques, et on déclare que le délimiteur des valeurs est la virgule :
t = [Link] ("[Link]", skiprows=1, delimiter=’,’)
t
renvoie
array([ [ 3., 4.],
[ 2., 5.],
[ 1., 8.]])
Pour tracer la courbe représentative d’une fonction f avec Matplotlib, il faut tout d’abord la
“discrétiser” ; c’est-à-dire définir une liste de points (xi , f (xi )) qui va permettre d’approcher le
graphe de la fonction par une ligne brisée. Bien sûr, plus on augmente le nombre de points, plus
la ligne brisée est “proche” du graphe (en un certain sens).
Plus précisément, pour représenter le graphe d’une fonction réelle f définie sur un intervalle
[a, b], on commence par construire un vecteur X, discrétisant l’intervalle [a, b], en considérant un
ensemble de points équidistants dans [a, b]. Pour ce faire, on se donne un naturel N grand et
on considère X=[Link](a,b,N) (ou, ce qui revient au même, on pose h = Nb−a −1 et on
considère
X=[Link](a,b+h,h)).
On construit ensuite le vecteur Y dont les composantes sont les images des Xi par f et on
trace la ligne brise reliant tous les points (Xi , Yi ).
Cette fonction permet de tracer des lignes brisées. Si X et Y sont deux vecteurs-lignes (ou
vecteurs-colonnes) de même taille n, alors [Link](X,Y) permet de tracer la ligne brisée qui
relie les points de coordonnées (X(i),Y(i)) pour i = 1, . . . , n.
Pour connaître toutes les options, le mieux est de se référer à la documentation de Matplotlib.
42
25
Fonction f(x) = ex/2 cos(5x)
20
15 Courbe
10
5
0
5
10
15
20
0 1 2 3 4 5 6 7
x
X=[Link]([-1, 1, 1,-1,-1])
Y=[Link]([-1, -1, 1,1,-1])
[Link](X,Y,’r’,lw=3)
[Link](’equal’)
[Link]([-2,2,-2,2])
Carre de cote 2
1.0
0.5
0.0
0.5
1.0
43
On peut superposer plusieurs courbes dans le même graphique.
import [Link] as plt
import numpy as np
X = [Link](0, 2*[Link], 256)
Ycos = [Link](X)
Ysin = [Link](X)
[Link](X,Ycos,’b’)
[Link](X,Ysin,’r’)
[Link]()
1.0
cos(x)
sin(x)
0.5
0.0
0.5
1.0
0 1 2 3 4 5 6 7
x
44
50
f 300 f(1)
0 200
50
100 100
150
200 0
250 100
300
350 200
4 3 2 1 0 1 2 3 4 4 3 2 1 0 1 2 3 4
45
Méthodes numériques
𝑲𝟏 = 𝒇(𝒕𝒊 , 𝒚𝒊 )
𝒉 𝒉
𝑲𝟐 = 𝒇 (𝒕𝒊 + , 𝒚𝒊 + 𝑲𝟏 )
𝟐 𝟐
𝒉 𝒉
𝑲𝟑 = 𝒇 (𝒕𝒊 + , 𝒚𝒊 + 𝑲𝟐 )
𝟐 𝟐
𝑲𝟒 = 𝒇(𝒕𝒊 + 𝒉, 𝒚𝒊 + 𝒉𝑲𝟑 )
𝒉
𝒚𝒊+𝟏 = 𝒚𝒊 + 𝟔 (𝑲𝟏 + 𝟐(𝑲𝟐 + 𝑲𝟑 ) + 𝑲𝟒 )
𝑲𝟏 = 𝒇(𝒕𝒊 , 𝒚𝒊 ) = 𝟐 − 𝒕𝒊 𝒚𝟐𝒊
𝟐
𝒉 𝒉 𝒉 𝒉
𝑲𝟐 = 𝒇 (𝒕𝒊 + , 𝒚𝒊 + 𝑲𝟏 ) = 𝟐 − (𝒕𝒊 + ) (𝒚𝒊 + 𝑲𝟏 )
𝟐 𝟐 𝟐 𝟐
𝟐
𝒉 𝒉 𝒉 𝒉
𝑲𝟑 = 𝒇 (𝒕𝒊 + , 𝒚𝒊 + 𝑲𝟐 ) = 𝟐 − (𝒕𝒊 + ) (𝒚𝒊 + 𝑲𝟐 )
𝟐 𝟐 𝟐 𝟐
𝑲𝟒 = 𝒇(𝒕𝒊 + 𝒉, 𝒚𝒊 + 𝒉𝑲𝟑 ) = 𝟐 − (𝒕𝒊 + 𝒉)(𝒚𝒊 + 𝒉𝑲𝟑 )𝟐
i=0, 𝑲𝟏 = 𝟐, 𝑲𝟐 = 𝟏. 𝟖𝟎𝟒𝟕, 𝑲𝟑 = 𝟏. 𝟖𝟏𝟐𝟐, 𝑲𝟒 = 𝟏. 𝟒𝟕𝟐𝟐, 𝒚𝟏 = 𝟏. 𝟒𝟒𝟔𝟏
y2=1.7028, y3=1.7317, y4=1.6148
2.0
1.8
1.6
Euler Ordre1
y
Euler A Ordre2
1.4 RK4 Ordre4
RK6 Ordre6
1.2
1.0
0.0 0.2 0.4 0.6 0.8 1.0
t
46