Algorithme de la Méthode de Newton pour les Systèmes non Linéaires en Matlab :
function [x,F,niter] = newtonsys(Ffun,Jfun,x0,tol ,... nmax, varargin) %NEWTONSYS cherche un zéro d’un système non linéaire % [ZERO,F,NITER]=NEWTONSYS(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 jacobienne 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’ itérations nécessaires % pour calculer ZERO. FFUN et JFUN sont des fonctions % 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 convergence dans le nombre’ ,... ’ d’’iterations imparti\n ’]); fprintf ([’ La valeur retournée a un résidu ’ ,... ’ relatif de %e\n’],F); else fprintf ([’La méthode a convergé à l’’itération’ ,... ’ %i avec un résidu %e\n’],niter,F); end return |
Aucun commentaire:
Enregistrer un commentaire