212
7 Equations différentielles ordinaires
global glob_h glob_t glob_y g l o b_ odefu n;
glob_h =( tspan (2) -tspan (1))/ Nh;
glob_y = y;
g l o b_ odef un= odefun ;
glob_t = tt (2);
if ( exist ( ’ O C T A VE _VE RSIO N’) )
o_ver = O C T A VE _VER SION;
version = str2num ([ o_ver (1) , o_ver (3) , o_ver (5)]);
end
if ( ~ exist ( ’ O C T A VE_ VERS ION’) | version >= 320 )
options = optimset ;
options . Display = ’ off ’;
options . TolFun =1.e -12;
options . M a x F unEv als =10000;
end
for glob_t = tt (2: end)
if ( exist ( ’ O C T A VE _VE RSIO N’) & version < 320 )
w = fsolve ( ’ b e u l erfun’, glob_y );
else
w = fsolve ( @( w ) b e u l erfun( w) , glob_y , options );
end
u = [ u; w . ’];
glob_y = w;
end
t = tt;
clear glob_h glob_t glob_y g l o b _ode fun;
end
function [z ]= b e u lerfu n(w )
global glob_h glob_t glob_y g l o b_ odefu n;
z =w - glob_y - glob_h * feval ( glob_odefun , glob_t , w );
end
7.3.1 Analyse de convergence
Une méthode numérique est convergente si
∀n = 0, . . . , N h ,
|y n − u n | ≤ C(h)
(7.8)
où C(h) tend vers zéro quand h tend vers zéro. Si C(h) = O(h
p ) pour
p > 0, on dit que la convergence de la méthode est d’ordre p. Pour vérifier
que la méthode d’Euler explicite converge, on écrit l’erreur ainsi
e n = y n − u n = (y n − u
∗
n ) + (u
∗
n − u n ),
(7.9)
où
u
∗
n = y n−1 + hf(t n−1 , y n−1 )
désigne la solution numérique au temps t n qu’on obtiendrait en partant
de la solution exacte au temps t n−1 ; voir Figure 7.3. Le terme y n − u
∗
n
7 Equations différentielles ordinaires
global glob_h glob_t glob_y g l o b_ odefu n;
glob_h =( tspan (2) -tspan (1))/ Nh;
glob_y = y;
g l o b_ odef un= odefun ;
glob_t = tt (2);
if ( exist ( ’ O C T A VE _VE RSIO N’) )
o_ver = O C T A VE _VER SION;
version = str2num ([ o_ver (1) , o_ver (3) , o_ver (5)]);
end
if ( ~ exist ( ’ O C T A VE_ VERS ION’) | version >= 320 )
options = optimset ;
options . Display = ’ off ’;
options . TolFun =1.e -12;
options . M a x F unEv als =10000;
end
for glob_t = tt (2: end)
if ( exist ( ’ O C T A VE _VE RSIO N’) & version < 320 )
w = fsolve ( ’ b e u l erfun’, glob_y );
else
w = fsolve ( @( w ) b e u l erfun( w) , glob_y , options );
end
u = [ u; w . ’];
glob_y = w;
end
t = tt;
clear glob_h glob_t glob_y g l o b _ode fun;
end
function [z ]= b e u lerfu n(w )
global glob_h glob_t glob_y g l o b_ odefu n;
z =w - glob_y - glob_h * feval ( glob_odefun , glob_t , w );
end
7.3.1 Analyse de convergence
Une méthode numérique est convergente si
∀n = 0, . . . , N h ,
|y n − u n | ≤ C(h)
(7.8)
où C(h) tend vers zéro quand h tend vers zéro. Si C(h) = O(h
p ) pour
p > 0, on dit que la convergence de la méthode est d’ordre p. Pour vérifier
que la méthode d’Euler explicite converge, on écrit l’erreur ainsi
e n = y n − u n = (y n − u
∗
n ) + (u
∗
n − u n ),
(7.9)
où
u
∗
n = y n−1 + hf(t n−1 , y n−1 )
désigne la solution numérique au temps t n qu’on obtiendrait en partant
de la solution exacte au temps t n−1 ; voir Figure 7.3. Le terme y n − u
∗
n
