0 évaluation0% ont trouvé ce document utile (0 vote) 27 vues15 pagesRésolution Des EDO
Exemple de résolution des EDO
Copyright
© © All Rights Reserved
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
‘Ruud Marc David FFENELON
‘#8 FENELON
import numpy as np
import [Link] as plt
# véfinition de L'E00
def euler_method(y, t):
return -2"t*y
# Paranétres de la simulation
y@=1 # Contition initiale
tstart = 0
tend = 2
b= 0.1 # Pas de temps
num_steps = int((tend - t_start) / h)
# InitiaLisation des tableaux de temps et de solution
+ = [Link](t_start, tend, num_steps + 1)
y = [Link](num_steps + 1)
yl@] = yo
# Boucle d"intégration d’Euler
for i in range(num_steps):
yi +a} = yl] +h * euler_method(y[i], *[4])
print(, y[i + 2])
4 Affichage de La solution
[Link](t, y, label="Méthode d\‘Euler')
[Link]("Résolution de 1'ED0 par 1a méthode d'Euler explicite")
[Link](‘Tenps")
[Link](*y(t)")
plt. legend()
[Link](true)
[Link]()
a
98
9408
2243519999000009
31360384
732243456
|. 64437424228
5541618475008
-465495951960672
-28170662055855106
2. 30536534aca68108
11 0.23818496866853583,
32 0.16102057618808723,
13 0.13395522637918456
14 0.09644776299301287
35 0.06751343409510902
16 0.04590913518467413,
17 @.03¢30002922188492
38 0.019392018702006346
19 0.012023051595243934
Sosapepeasr
ms.Ruud Mare David FENELON
Résolution de I'EDO par la méthode d'Euler explicite
10 — Méthode d'Euler
as
a6
yit)
04
0.2
0.0
0.00 025 050 075 100 125 150
‘Temps
[2]: import numpy as np
import [Link] as plt
# Définition de L'EDO : dy/dt = -2*t*y
def (y, t):
return -2¢t+y
# Paranétres de la simulation
y@=1 # Confition initiate
0.1. # Pas de tenps
num_steps = int((tend - t_start) / h)
# InitiaLisation des tableaux de temps et de solution
£ = [Link](t_start, tend, nim_steps + 1)
y = [Link](num_steps + 1)
yle] = ye
# Boucle d*intégration avec La méthode d’Euler implicite
for i in range(num_steps):
# pour notre EDO : y[i+t] = y[t] / (1 + 2*¢[t+1]*h)
ylita] = ya] / (2 +2 * t[44a] *h)
print (, y[iv1])
# Affichage de La solution
175
2.00[Link](t, y, label="Néthode d'Euler inplicite")
[Link]("nésolution de 1'E00 par 1a méthode d'Euler implicite”)
[Link] ("Temps")
[Link]("y(t)")
[Link]()
[Link](True)
[Link]()
@ 0.9803921568627451
2 @.942684756214178
2 @,8893252511454599
3 @.8234493066161582
4 @.7485902787419619
5 @.6683841774481802
6 0.5863019100422633,
7 @.5054326810709155
8 @.4283327805685724
9S @.3569439838071445
10 0.2925770359074955
31 0. 23504072250604478
12 0.18726128770321013,
13 0.1462978816181329
aa 0.11253623155249993,
35 0.08525517541849237
16 0.06362326523768087
37 0.04678121267476535,
18 0.033899864257076334
19 0.024214188755054527
Résolution de I'EDO par la méthode d'Euler implicite
10 — Méthode d'Euler implicite
as.
oo
ytt)
04
0.2
0.0
0.00 025 050 075 100 125 150 175 2.00
TempsFENELON
import numpy as np
import [Link] as plt
# Définition de L'EDO : dy/dt = -2ty
def #(y, t):
return -2¢t+y
# Paranétres de la simulation
y@=1 # Condition initiale
tistart = 0
tend = 2
n= 0.1 # Pas de temps
num_steps = int((t_end - t_start) / h)
# InitiaLisation des tableaux de temps et de solution
+ = [Link](t_start, t_end, num_steps + 1)
y = [Link](num_steps + 1)
yl@] = ye
# Boucle ¢*intégration de Crank-Wicolson
for i in range(num_steps):
# L’équation de Crank-Nicolson pour notre £00 devient +
# ytd] = ylt] + (K/2) * (FOLE, EAD) + Folia], tLt+1]))
# Ce qui revient @ : y[ita] * (1 + hit[iea]) = y[i] * (2 - h*eL])
ylis2] = y[i] * (2 - met[S]) 7 (2 + bee ELeT])
print(i, y[i+1])
# Affichage de La solution
[Link](t, y, label="Néthode de Crank-Nicolson*)
[Link]("Résolution de 1"EDO par la méthode de Crank-Nicolson")
[Link](‘Tenps*)
[Link](‘y(t)')
[Link]()
pit. grid(true)
[Link]()
9.9908999999009901
9.9609784507862551
9.9143290114776991
9.852787635658527
9.7796915526020818
9.6987801550679034
0.6138816103200272
9.5286203014039123
9.44617493329504515
@.3691083539077192
@.2992770437089615
11 0.2378183650901569,
42 0. 1852036825420368
13 @.14133965247099832
14 0.10569747923911406
415 0.07745073909762666
16 0.055605658839321705
17 0.039112454946302555
128 0.026951439542630333
19 0.018192221691410475
goevauauneFenelon
solution de I'—EDO par la méthode de Crank-Nicolson
10 —— Méthode de Crank-Nicolson
as.
a6
yit)
04
0.2
0.0
0.00 025 050 075 100 125 150 175 2.00
‘Temps
Tn [4]: import numpy as np
import [Link] as plt
# Définition de L'EDO : dy/dt = -2+tty
def F(t, y):
return -2*t*y
# Paranttres de la simulation tdevoir de CHAVRE Jean ri
y@=1 — # Condition initiale
tstart = 0
tend = 2
h=0.1 # Pas de temps
nur_steps = int((t_end - t_start) / h)
# InitiaLisation des tableaux de temps et de solution
t = [Link](t_start, t_end, num_steps + 1)
y= np-zeros(num_steps + 1)
y[@] = ye
4 Boucle d'intégration de Runge-Kutta d'ordre 2
for i in range(num_steps):
# Calcul des pentes intermédiaires
ka =h* F(t[1], yLt])
k2=h* F(tli] + 0.5 *h, yLi] + 0.5 * k1)
# mise @ Jour de La solution
yi +1] = yii] + ka
print(, y[i + 2])Fenelon
# Affichage de La solution
[Link](t, y, label="Néthode de Runge-Kutta d\‘ordre 2°)
[Link]("Résolution de 1'EDO par la méthode de Runge-Kutta d'ordre 2")
[Link](‘Tenps")
[Link](*y(t)")
plt-legend()
[Link](true)
[Link]()
20.99
1 0.960597
2 @.9135277470000001
3 @.851¢992129787
4 @.7778296809773494
5 @.6966360293152083
© @.6115071965328890
7 @.5262018651715517
8 0.44390389345872294
9 @.3671529102797081
10 0.29776101023684326
11 0.23680933144136143,
32 @.1847112785242519
33 @.14132259919891277
14 .10607674295870392
35 0.07912552112008545,
16 8.056469126715470955
17 @.4¢9644540462664
38 0.027909171308852914
19 8.1999256409230312Fenelon
Résolution de I'EDO par la méthode de Runge-Kutta d'ordre 2
10 —— Méthode de Runge-Kutta d'ordre 2
as.
a6
yit)
a4
0.2
0.0
0.00 025 050 075 100 125
Temps
in [5]: import numpy as np
import [Link] as plt
# Définition de L'EDO : dy/dt = -2+tty
def F(t, y):
return -2*t*y
# Paranétres de la simulation
y@= 1 # Contition initiale
tstart = 0
tend = 2
h= 0.1 # Pas de temps
nur_steps = int((t_end - t_start) / h)
# InitiaLisation des tableaux de temps et de solution
t = [Link](t_start, t_end, num_steps + 1)
y= np-zeros(num_steps + 1)
y[@] = ye
# Boucle d'intégration de Runge-Kutta d'ordre 4
for i in range(num_steps):
# Calcul des pentes intermédiaires
ka Cet], yD)
k2 = h * F(t] + 0.5 *h, yfi] + 0.5 * ka)
3 F(t[] + .5 * h, y[i] + 0.5 * k2)
ka (tL) +h, yL4] + k3)
# Mise @ jour de La solution
1.50
175
2.00
718Fenelon
yli +2] = yfi] + (ka + 2¢K2 + 2hK3 + ka) / 6
print(i, y[i + 2])
# Affichage de Lo solution
[Link](t, y, label="Méthode de Runge-Kutta d\‘ordre 4")
[Link]("Résolution de 1'EDO par la méthode de Runge-Kutta d'ordre 4")
[Link](‘Temps')
[Link](*y(t)*)
plt. Legend()
plt. grid(true)
pit. show()
@ @.9900498333333333,
1 @.9607894352355782
2 @,9139311740186352
3 @.8521437724674055
4 @.7788007805436095
5 @.6976763871777536
6 0.612626609990853,
7 @.5272929308453121
8 0.4adesoo365s98536
5 @.3678810564257649
30 0.2981997387492247
11 .23693118764219665,
12 @.18452398289502142
33 0.14¢86387955233962
14 8.10540555570721624
35 0.07731173213364585,
36 0.05558359298052502
17 0.03917136526560633,
18 8.027059115467087322
39 0.016322452267059343,ert8/25, 7:15 PM.
yit)
10
as.
a6
04
0.2
0.0
Fenelon
Résolution de I'EDO par la méthode de Runge-Kutta d'ordre 4
—— Méthode de Runge-Kutta d'ordre 4
0.00 025 050 075 100 125 150 175 200
Temps
import numpy as. np
import [Link] as plt
# Définition de L'EDD
def euler_methad(y, t):
return -2'y +1
# Paranétres
ye=1
t_start, tlend, h = 2, @.3, 0.1
num_steps = int((t_end - t_start) / h)
# Initialisation
+ = np-Linspace(t_stort, tend, num_steps + 1)
y = [Link](num_steps + 1)
ye]
yo
# Méthode d’EuLer
for i in range(num_steps):
ytisa]
print (#"
[i] +h * euler_nethod(y[i], t{2])
[42]:.2F}, y=(yiea]:4f}")
# Solution exacte
ylexact = 0.5 + @.5 * [Link](-2"t)
# affichage
[Link](t, y, ‘o-’, label="Méthode d'Euler")
[Link](t, y_exact,
» labe!
"Solution exacte")Fenelon
[Link]("Résolution de 1'EDO par la méthode d'Euler explicite")
[Link](“Tenps")
[Link]("y(t)")
plt. Legend()
plt. grid(true)
plt. show()
0.15, y=0.9000
0.30, y=0.8200
Résolution de I'EDO par la méthode d'Euler explicite
1.00 —e- Méthode d'Euler
--- Solution exacte
0.95
__ 0.90
S
085
0.80
0.00 0.05 010 01s 0.20
‘Temps
Amport numpy as np
import [Link] as plt
4 Définition de L'EDO : dy/dt = -2¢ety
def f(y, t):
return -2*t*y
# Paranétres de la simulation
ye=1 # Condition initiale
t_start = @
tLend = 0.3
hee. # Pos de temps
num_steps = int((t_end - t_start) / h)
# Tableaux tenps/soLution
t = [Link](t_start, t_end, num_steps + 1)
y = [Link](num_steps + 1)
y[@] = ye
1015mn [8
Fenelon
# Boucle d'Euler implicite:
# y (hia) ~ yk + meF(L CO,
#2 yet} yt / (14 24
for i in range(num_steps):
yt +a} = yl} / (242 the et + ay
print(, y[i + 2])
ytt+1})
{i+1})
# affichage
[Link](t, y, label="Néthode d'Euler inplicite")
[Link]("Résolution de 1'EDO par la méthode d'Euler implicite")
[Link](‘Tenps*)
[Link](‘y(t)")
[Link]()
[Link](true)
[Link]()
@ @.970873786007767
1 @.9159186564224217
Résolution de I'EDO par la méthode d'Euler implicite
1.00 — Méthode d'euler implicite
098
2 096
g
0.94
0.92
000 49005 = 010 OS 2025.30
Temps
amport numpy as np
import [Link] as plt
# Definition de L'EDD : dy/dt = -2ty +1
def f(y, t):
return -2* y +1
# Paranétres de la simulation
ye=1 # Condition initiale
tstart = @
wisFenelon
# Pas de temps
num_steps = int((t_end - t_start) / h)
# Initialization des tableaux de temp: et de solution
t = [Link](t_start, t_end, num_steps + 1)
y = [Link](num_steps + 1)
yfe] = yo
# Boucle d"intégration de Crank-Nicolson
# Formile pour f(y)= -2y +1:
# y {ne} = [(1- h) # yn ¢ h] / (1 +h)
for i in range(nun_steps
yi +a] = (= h) * yLt] +h) / a+b)
print(i, yi + 1])
# affichage de La solution
[Link](t, y, label='Méthode de Crank-Nicolson')
[Link]("Résolution de 1'EDO par la méthode de Crank-Nicolson")
[Link](“Tenps" )
[Link](‘y(t)")
[Link]()
[Link](true)
[Link]()
© e.900e9e9200009002
1 0.8347107438016528
Résolution de I'EDO par la méthode de Crank-Nicolson
i
1.000 —— Méthode de Crank-Nicolson
0.975
0.950
= 0.925
wi
0.900
0.875
0.850
0.00 0.05 0.10 0.15 0.20 0.25 0.30
Temps
wn5mn [9
import numpy as np
import [Link] as plt
ition de L'ED) : dy/dt =
def F(t, y)
return -2"y +2
# Paranétres de la simulation
ye = 1 # Confition initiate
tistart = 0
tlend = 0.2
n= 0.1 # Pas de temps
num_steps = int((t_end - t_start) / h)
# InitiaLisation des tableaux de temps et de solution
+ = [Link](t_start, t_end, num_steps + 1)
y = [Link](num_steps + 1)
yl@] = ye
# Boucle d'intégration de Runge-Kutta d‘ordre 2
for i in range(num_steps):
# Calcul des pentes intermédiaines
ki=h * F(t[i], y[4])
ka =h* F(t[i] + 0.5 * h, y[i] +0.5 * k1)
# Mise a jour de La solution
yli +4] = yli] + k2
print (i, y[i#2])
# Affichage de La solution
[Link](t, y, label="Méthode de Runge-Kutta d\‘ordre 2")
[Link](*Résolution de 1'ED0 par 1a méthode de Runge-Kutta d'ordre 2")
[Link](‘Temps')
[Link](‘y(t)')
plt. Legend()
[Link](True)
[Link]()
20.91
11 0.8362
amIn [10]
0925
wi
1.000 —— Méthode de Runge-Kutta d'ordre 2
0.975
0.950
0.900
0.875
0.850
Fenelon
Résolution de I'EDO par la méthode de Runge-Kutta d'ordre 2
ooo
0.000 0.025 0.050 0075 0.100 0.125 0.150 0.175 0.200
Temps
import numpy as. np
import [Link] as plt
# Définition de L'EDD : dy/dt = -2y +1
def F(t, y):
return -2* y +1
# Paranétres de la simulation
y@= 1 # Contition initiale
tstart = 0
tend = 0.2
h= 0.1 # Pas de temps
nur_steps = int((t_end - t_start) / h)
# InitiaLisation des tableaux de temps et de solution
t = [Link](t_start, t_end, num_steps + 1)
y= np-zeros(num_steps + 1)
yle]
yo
# Boucle d'intégration de Runge-Kutta d’ordre 4
for i in range(num_steps):
# Calcul des pentes intermédiaires
ka Cet], yD)
ka =h* F(t[i] + 0.5 * h, y[i] + 0.5 * k1)
3 F(t[] + 0.5 * h, y[i] + 0.5 * k2)
ka #CeIa] + hy yEt] + ka)
# Mise @ jour de La solution
wis.Fenelon
yli +2] = yl] + (2 42 D+ 2 eRe kA) / 6
print(i, y[i + 2])
# Affichage de Lo solution
[Link](t, y, label="Méthode de Runge-Kutta d'erdre 4")
[Link]("Résolution de 1"EDO par la méthode de Runge-Kutta d'ordre 4")
[Link] ("Temps")
[Link]("y(t)")
plt. Legend()
[Link](True)
[Link]()
@ @.9093666566666657
Résolution de I'EDO par la méthode de Runge-Kutta d'ordre 4
100 — Méthode de Runge-Kutta d'ordre 4
098
0.96
Ss
094
092
0.00 0.02 0.04 0.06 0.08 0.10
Temps
115
Vous aimerez peut-être aussi