2.3 Méthode de Newton
55
Programme 2.3. newtonsys : méthode de Newton pour des systèmes non linéaires
function [x ,F , niter ] = n e w to nsys( Ffun , Jfun , x0 , tol ,...
nmax , varargin )
% N E W T ONSYS cherche un zéro d ’ un système non linéaire
% [ ZERO ,F , NITER ]= N E W TONS YS( FFUN , JFUN , X0 , TOL , NMAX )
% tente de trouver le vecteur ZERO , racine d ’ un
% système non linéaire défini dans FFUN et dont
% la matrice j a c obi enne est définie dans la
% fonction JFUN . La racine est cherchée autour
% du vecteur X0.
% La variable F renvoie le résidu dans ZERO
% NITER renvoie le nombre d ’ i t é rat ions n é c e ss aires
% pour calculer ZERO . FFUN et JFUN sont des f o n c tions
% MATLAB définies dans des M - files .
niter = 0; err = tol + 1; x = x0;
while err >= tol & niter < nmax
J = feval ( Jfun ,x , varargin {:});
F = feval ( Ffun ,x , varargin {:});
delta = - J \ F;
x = x + delta ;
err = norm( delta );
niter = niter + 1;
end
F = norm ( feval ( Ffun ,x , varargin {:}));
if ( niter == nmax & err > tol )
fprintf ([ ’ Pas de c o n v er gence dans le nombre ’ ,...
’ d ’’ i t e r ations imparti \n ’ ]);
fprintf ([ ’ La valeur r e t o urnée a un résidu ’ ,...
’ relatif de %e \n ’] ,F );
else
fprintf ([ ’ La méthode a convergé à l ’’ i t é ra tion’ ,...
’ % i avec un résidu % e\ n ’] , niter , F );
end
return
Exemple 2.4 Considérons le système non linéaire (2.15). Il possède les deux
solutions (détectables graphiquement) (0.4761, −0.8794) et (−0.4761, 0.8794)
(où on s’est limité aux quatre premiers chiffres significatifs). Pour utiliser le
Programme 2.3, on définit les fonctions suivantes :
function J= Jfun ( x)
pi2 = 0.5* pi;
J (1 ,1) = 2* x (1);
J (1 ,2) = 2* x (2);
J (2 ,1) = pi2* cos ( pi2 *x (1)); J (2 ,2) = 3* x (2)^2;
return
function F= Ffun ( x)
F (1 ,1) = x (1)^2 + x (2)^2 - 1;
F (2 ,1) = sin( pi* x (1)/2) + x (2)^3;
return
En partant de la donnée initiale x0=[1;1] la méthode de Newton, exécutée
avec la commande :
x0 =[1;1]; tol =1e -5; nmax =10;
[x ,F , niter ] = n e w t onsys( @Ffun , @Jfun ,x0 , tol , nmax );
Précédent

- 67/374

Suivant