Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
dy y ' ( t )=f (t , y ( t ) )
dt
=f ( t , y ) Ecrite aussi
{
:
¿ y (t 0)= y0
(1).
a. Méthode d’Euler
Lorsqu'il n'est pas possible d'obtenir une solution explicite sous forme de fonctions usuelles, on
détermine une solution approchée (numérique). Il existe plusieurs méthodes permettant de
réaliser ceci. L'une d'entre elles est la méthode d'Euler qui sera étudiée ici.
y ' ( t )=f (t , y ( t ))
On considère une subdivision régulière t = (t0, t1, …, tn) de [a,b] de pas h =(b-a)/n, on a donc :
ti =t0+ih =a+ih
Si h est suffisamment petit on a :
t k+ 1
y ( t k+1 )− y ( t k )=∫ f ( t , y ( t ) ) dt ≅ hf ( t k , y (t k ))
tk
y k +1= y k +h . f (t k , y k )
import numpy as np
def euler(f,a,b,y0,n):
'''
integration de y'(t)=f(t,y(t)) par la méthode d'Euler sur un intervalle [a,b] avec
n points et la condition initiale y(a)=y0 (a,y0)
'''
t=np.linspace(a,b,n+1)
y=np.zeros(n+1) # tableau de n+1 éléments
y[0]=y0
h=(b-a)/n
for k in range(n):
y[k+1]=y[k]+h*f(t[k],y[k])
return(t,y)
Exemple 1 :
Exemple 2 :
Illustrons l'utilisation de la fonction Euler pour trouver une solution approchée de l'équation :
y' = - y intégrée sur [0,5] avec la condition initiale y(0)=1.
b. Fonction odeint
odeint(f, y0,t)
Exemple 1 :
Résoudre l’équation : y′=2.x.y2 sur[0, 2] (on prendra une subdivision de 100 points) avec la condition initiale
y(0)=0.2 en utilisant la fonction odeint:
Exemple 2 :
Exercice 1 :
A l'aide de la fonction odeint( ) du sous-module integrate de scipy, et du module matplotlib.pyplot, donner le code
permettant de tracer la courbe représentative sur l'intervalle [0,4] (on prendra une subdivision de 100 points) de la
y ' + √ t . y=0
solution approchée de l’équation suivante : { ¿ y ( 0 )=1
Correction
import matplotlib.pyplot as plt
from scipy import integrate
phi = lambda y,t: -y * t**0.5
t = np.linspace(0,4,100)
y0 = 1
y = integrate.odeint(phi,y0,t)
plt.plot(t,y)
plt.show()
différentielle d’ordre 1 en posant z =(y, y′) donc z′ =(y′,y′′), l’équation différentielle peut alors s’écrire :
z′= f(z , x)
La subdivision[x0, x1,..., xn] de l’intervalle sur lequel on intègre l’équation différentielle reste la même, par contre la
condition initiale doit être un couple (y(x0), y′(x0)) et la valeur de retour est une matrice numpy dont la première
colonne est constituée des valeurs y(xk) et la seconde des valeurs y′(xk).
a. Fonction odeint
def f(z,x):
(y,dy)=z
return(dy,-dy-x*y)
>>>x=np.linspace(1.,2.,4)
>>>y=odeint(f,(1,0),x)
>>>print(y)
[[ 1. 0. ]
[ 0.94502133 -0.32624253]
[ 0.78778807 -0.60463152]
[ 0.55333316 -0.78078941]]
>>>plt.plot(x,y[:,0])
>>>plt.grid() ; plt.show()
b. Méthode d’Euler
import numpy as np
def euler2 (F, a, b, z, n): # z= (y(0), y'(0))
x=np.linspace(a,b,n+1)
h =(b-a)/n
y =np.zeros(n+1)
dy=np.zeros(n+1)
y[0] = z[0]
dy[0]= z[1] #peut s'écrire (y[0],dy[0])=z
for k in range(n):
y[k+1] = y[k] +h*F(x[k],(y[k],dy[k]))[0]
dy[k+1]= dy[k]+h*F(x[k],(y[k],dy[k]))[1]
return x,y
(x,y)= euler2(f,1,2,(1,0),10)
print(x)
print(y)
plt.plot(x,y)
plt.grid() ; plt.show()
def f(x,z):
(y,dy)=z
return(dy,-y)
(x,y)=euler2(f,0,2*np.pi,(0,1),100)
print(x)
print(y)
plt.plot(x,y)
plt.plot(x,np.sin(x))
plt.xlabel('t') #Etiquette sur l'axe x
plt.ylabel('y(t)') #Etiquette sur l'axe y
#importations
from scipy.integrate import *
from numpy import *
import matplotlib.pyplot as plt
#fonction f(z,t)
def f(z,t) :
y,dy=z
return (dy, -2*lamb*dy-w0**2*y+A*cos(w*t))
#Appel
lamb,w0,A,w =0.01,1.0,1.5,2.
z=[1.,0.]
t=linspace(0,4*pi,100)
d=odeint(f,z,t)
S=d[:,0]
plt.plot(t,S)
plt.grid()
plt.show()
#Résolution
t=arange(0.,121.,2)
x0=0.
v0=3.2
m=8
g=10
k=25
s=odeint(phi,(x0,v0),t)
x=s[:,0]
print(x)
print(x[-1])
plt.plot(t,x)
plt.grid()
plt.show()
C’est une équation différentielle du second ordre à coefficient constant avec second
membre :
R 1 2 2 d2 V
ÿ ẏ+ y=−4❑ f sin(2 ft )= 2
L LC dt
Question : Tracer la courbe de la tension aux bornes de la bobine pour V(t) = sin(2ft) sur un intervalle de
temps de 1 seconde (on prendra 10000 points) pour f = 100Hz, R = 10, L = 870mH, C = 650mF. A l'instant
initial aux bornes de la bobine la tension est nulle ainsi que sa dérivée.