0% ont trouvé ce document utile (0 vote)
27 vues15 pages

Résolution Des EDO

Exemple de résolution des EDO

Transféré par

vanbuytenzabalos
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
27 vues15 pages

Résolution Des EDO

Exemple de résolution des EDO

Transféré par

vanbuytenzabalos
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
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 Temps FENELON 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 goevauaune Fenelon 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.1999256409230312 Fenelon 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 718 Fenelon 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 1015 mn [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 = @ wis Fenelon # 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 wn5 mn [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 am In [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