2.3 Méthode de Newton
53
f (x
(k) )
f (x
(k) )
x
(k)
x
(k)
α
α
x
x
y
y
f
f
e
(k)
e
(k)
Figure 2.5. Deux situations pour lesquelles le résidu est un mauvais estimateur d’erreur : |f
(x)| | 1 (à gauche), |f
(x)| | 1 (à droite), pour x dans un
voisinage de α
Programme 2.2. newton : méthode de Newton
function [ zero , res , niter ]= newton ( fun , dfun ,x0 , tol ,...
nmax , varargin )
% NEWTON Cherche les zéros d ’ une fonction .
%
ZERO = NEWTON ( FUN , DFUN ,X0 , TOL , NMAX ) tente de trouver
%
un zéro ZERO de la fonction d é r ivab le FUN au
%
v o i sin age de X0 en u t i li sant la méthode de Newton .
%
FUN et sa dérivée DFUN prennent en entrée un réel x
%
et r e t o urn ent une valeur réelle . Si la r e c h erch e
%
échoue , un message d ’ erreur est affiché . FUN et
%
DFUN peuvent aussi être des objets inline , des
%
f o n cti ons anonymes ou bien être définies par des
%
M - files .
%
ZERO = NEWTON ( FUN , DFUN ,X0 , TOL , NMAX , P1 ,P2 ,...) passe
%
les p a r a mètres P1 , P2 ,... aux f o n c tions:
%
FUN (X ,P1 , P2 ,...) et DFUN (X ,P1 ,P2 ,...).
%
[ ZERO , RES , NITER ]= NEWTON ( FUN ,...) retourne la
%
valeur a p p r oché e du zéro , la valeur du résidu en
%
ZERO et le numéro de l ’ i t é ra tion à laquelle ZERO a
%
été calculé .
x = x0;
fx = feval ( fun ,x , varargin {:});
dfx = feval ( dfun ,x , varargin {:});
niter = 0; diff = tol +1;
while diff >= tol & niter < nmax
niter = niter + 1;
diff = - fx/ dfx;
x = x + diff ;
diff = abs ( diff );
fx = feval ( fun ,x , varargin {:});
dfx = feval ( dfun ,x , varargin {:});
end
if ( niter == nmax & diff > tol )
fprintf ([ ’ La méthode de Newton est arrêtée ’ ,...
’ sans c o n v erger avec la t o l ér ance s o u h aitée car \n ’ ,...
’ le nombre maximal d ’’ i t é r ations a été atteint \ n ’ ]);
end
zero = x; res = fx ;
return
53
f (x
(k) )
f (x
(k) )
x
(k)
x
(k)
α
α
x
x
y
y
f
f
e
(k)
e
(k)
Figure 2.5. Deux situations pour lesquelles le résidu est un mauvais estimateur d’erreur : |f
(x)| | 1 (à gauche), |f
(x)| | 1 (à droite), pour x dans un
voisinage de α
Programme 2.2. newton : méthode de Newton
function [ zero , res , niter ]= newton ( fun , dfun ,x0 , tol ,...
nmax , varargin )
% NEWTON Cherche les zéros d ’ une fonction .
%
ZERO = NEWTON ( FUN , DFUN ,X0 , TOL , NMAX ) tente de trouver
%
un zéro ZERO de la fonction d é r ivab le FUN au
%
v o i sin age de X0 en u t i li sant la méthode de Newton .
%
FUN et sa dérivée DFUN prennent en entrée un réel x
%
et r e t o urn ent une valeur réelle . Si la r e c h erch e
%
échoue , un message d ’ erreur est affiché . FUN et
%
DFUN peuvent aussi être des objets inline , des
%
f o n cti ons anonymes ou bien être définies par des
%
M - files .
%
ZERO = NEWTON ( FUN , DFUN ,X0 , TOL , NMAX , P1 ,P2 ,...) passe
%
les p a r a mètres P1 , P2 ,... aux f o n c tions:
%
FUN (X ,P1 , P2 ,...) et DFUN (X ,P1 ,P2 ,...).
%
[ ZERO , RES , NITER ]= NEWTON ( FUN ,...) retourne la
%
valeur a p p r oché e du zéro , la valeur du résidu en
%
ZERO et le numéro de l ’ i t é ra tion à laquelle ZERO a
%
été calculé .
x = x0;
fx = feval ( fun ,x , varargin {:});
dfx = feval ( dfun ,x , varargin {:});
niter = 0; diff = tol +1;
while diff >= tol & niter < nmax
niter = niter + 1;
diff = - fx/ dfx;
x = x + diff ;
diff = abs ( diff );
fx = feval ( fun ,x , varargin {:});
dfx = feval ( dfun ,x , varargin {:});
end
if ( niter == nmax & diff > tol )
fprintf ([ ’ La méthode de Newton est arrêtée ’ ,...
’ sans c o n v erger avec la t o l ér ance s o u h aitée car \n ’ ,...
’ le nombre maximal d ’’ i t é r ations a été atteint \ n ’ ]);
end
zero = x; res = fx ;
return
