TP 9
TP 9
TP 9
1. RESUME DE COURS
Soit à résoudre l’équation différentielle ordinaire du type :
y’' + a y '+ b y = f ( x ) tel que y = y(x)
1
(( a − b ) + b ) f
i
1
y2 = f ( x ) + − ( x )
i i (i )
b i =1 b
• La solution générale est donnée par :
y = y1 + y2
y’' = f ( x ) − ( a y '+ b y )
2. TRAVAIL DEMANDE :
Application 1 :
Soit à résoudre, pour x allant de 0 à 10, l’équation différentielle ordinaire :
y’' + 2 y ' + y = 0 tel que y = y(x)
Application 2 :
Reprendre les mêmes questions pour la résolution de l'équation différentielle ordinaire suivante :
y’' – y’ + 0.75 y = 0 avec y = f(t)
( )
Avec les conditions initiales y(0) =1 et y’ ( 0 ) = 1 + 2 / 2
• Solution numérique :
En posant z = y’, le système à résoudre s’écrit :
z ' = −2 z − y
y' = z
Sous matlab la solution est donnée par :
[t, y] = ode23(‘fode2’, [0 10], [1 1] )
‘fode2’ étant la fonction décrivant le système à résoudre :
Function dy = fode2(t,y)
dy = zeros(2,1); % on impose vecteur colonne
dy(1) =-−2*y(2) − y(1);
dy(2) = y(1)
end
1.4
Sol; analytique
Sol. Numérique
1.2
0.8
y
0.6
0.4
0.2
0
0 1 2 3 4 5 6 7 8 9 10
x
Application2
1/ Résoudre numériquement l’équation différentielle de Blasius :
f f ''+ 2 f ''' = 0
Avec les conditions :
f ( 0) = f ' ( 0) = 0 et f '(t → ) = 1
(Euler, Runge-Kutta)
CORRECTION TYPE
1/ RESUME DE COURS
Ainsi, il s’agit de résoudre, numériquement, l’équation différentielle ordinaire du type :
y’ + a y =g(x) tel que y = y(x)
Avec la condition initiale y(0) = y0
Equation que l’on peut mettre sous la forme :
dy
= f ( x, y ) avec f(x,y) = g(x) – a y
dx
L’intégration entre xi et xi + x, avec un pas t suffisamment petit, donne :
xi +x
y = f ( x, y ) dx y ( x + x ) = y ( x ) + f ( x, y ) x
xi
i i
La différence entre les différentes méthodes, présentées par la littérature, réside dans
l’estimation de f ( x, y ) .
f ( x, y ) = f ( xi + x 2, y ( xi + x 2 ) )
Avec :
y ( xi + x 2 ) = y ( xi ) + f ( xi , yi ) * x 2
x(i+1) = x(i)+x ; f ( i + 1 / 2 ) = g ( x ( i + 1 / 2 ) ) – a * y ( i + 1 / 2 ) ;
y ( xi + x 2 ) = y ( xi ) + f ( xi + x 2 , y ( xi + x 2 ) ) * x 2
(
y ( xi + x ) = y ( xi ) + f xi + x 2 , y ( xi + x 2) * x )
La résolution se fait pas à pas selon l’algorithme suivant :
Condition initiale x(1)=0 et y(1)=y0
Fixation de la borne supérieure xf
Choix du pas x et détermination de la taille du vecteur y par : n = xf / x + 1
Pour i = 2 à n-1, faire :
x ( i + 1 / 2 ) = x ( i ) + x / 2 ; f ( i ) = g ( x ( i ) ) – a * y ( i ) ;
y ( i + 1 / 2 ) = y ( i ) + f ( i ) * x / 2 ;
f1 ( i + 1 2 ) = g ( x ( i + 1 2 ) ) – a * y ( i + 1 2 ) ;
y ( i + 1 / 2 ) = y ( i ) + f1 ( i + 1 2 ) * x / 2
x ( i + 1) = x ( i ) + x ; f 2 ( i + 1 2 ) = g ( x ( i + 1 / 2 ) ) – a * y ( i + 1 / 2 ) ;
y ( i + 1) = y ( i ) + f 2 ( i + 1 2 ) * x ;
Fin
2/ Solution Numérique :
L’équation peut être réécrite sous la forme :
y' = y/2 = f
L’algorithme de Runge-Kutta d’ordre 2, s’écrit :
yi +1 = yi + f t 1 , yˆ 1 t
i+ 2 i+ 2
t t
Avec : yˆ 1 = yi + f (t i , yi ) et t 1 = ti +
i+ 2 i+ 2
2 2
% Runge-Kutta ordre 2
t=0:10; y(1)=1; dt=0.1; n=length(t);
for i=1:n-1,
ti12 = t(i)+dt/2; fi = y(i)/2; yi12 = y(i)+fi*dt/2;
fi12 = yi12/2; y(i+1)=y(i)+fi12*dt;
end
150
Sol. Numérique
Sol. Analytique
100
y
50
0
0 2 4 6 8 10
t
• Solution numérique :
En posant z = y’, le système à résoudre s’écrit :
z ' = −2 z − y
y' = z
Sous matlab la solution est donnée par :
[t, y] = ode23(‘fode2’, [0 10], [1 1] )
‘fode2’ étant la fonction décrivant le système à résoudre :
Function dy = fode2(t,y)
dy = zeros(2,1); % on impose vecteur colonne
dy(1) =-−2*y(2) − y(1);
dy(2) = y(1)
end
1.4
Sol; analytique
Sol. Numérique
1.2
0.8
y
0.6
0.4
0.2
0
0 1 2 3 4 5 6 7 8 9 10
x