function [zero,res,niter]=newton(fun,dfun,x0,tol,... nmax,varargin) %NEWTON Trova uno zero di una funzione. % ZERO=NEWTON(FUN,DFUN,X0,TOL,NMAX) approssima lo % zero ZERO della funzione definita nella function % FUN, continua e derivabile, usando il metodo di % Newton e partendo da X0. FUN e la sua derivata % DFUN accettano in ingresso uno scalare x e % restituiscono un valore scalare. Se la ricerca % dello zero fallisce, il programma restituisce un % messaggio d'errore. FUN e DFUN possono essere % inline function, anonymous function o function % definite in M-file. % ZERO=NEWTON(FUN,DFUN,X0,TOL,NMAX,P1,P2,...) passa % i parametri P1,P2,... alle funzioni % FUN(X,P1,P2,...) e DFUN(X,P1,P2,...). % [ZERO,RES,NITER]= NEWTON(FUN,...) restituisce il % valore del residuo RES in ZERO ed il numero di % iterazioni NITER necessario per calcolare ZERO. 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(['Newton si e'' arrestato senza aver ',... 'soddisfatto l''accuratezza richiesta, avendo\n',... 'raggiunto il massimo numero di iterazioni\n']); end zero = x; res = fx; return