function [xv, fxv, n] = newton_conc (f, f1, x0, toll, nmax) %NEWTON Metodo di Newton % % [xv, fxv, n] = newton (f, f1, x0, toll, nmax) % % Dati di ingresso: % f: funzione % f1: derivata prima % x0: valore iniziale % toll: tolleranza richiesta per il valore assoluto % della differenza di due iterate successive % nmax: massimo numero di iterazioni permesse % % Dati di uscita: % xv: vettore contenente le ascisse delle iterazioni aggiornto per % concatenazione % fxv: vettore contenente i corrispondenti residui (f(xv)) aggiornato % per concatenzaione % n: numero di iterazioni senza contare la soluzione iniziale x0 % come iterazione n = 0; % Inizializza il contatore n scarto = 2*toll; % Inizializza scarto ad un valore fittizio > toll % per poter entrare nel ciclo while iterativo x = x0; % definisce la prima iterazione fx = f(x); % definisce il primo residuo % Inizializza i vettori xv e fxv xv = [x]; fxv = [fx]; % Ciclo iterativo del metodo while (abs(scarto) >= toll) && (n < nmax) % TEST DI ARRESTO f1x = f1(x); % Calcola il valore f'(x_n) if f1x == 0 error('La derivata della funzione si annulla in %12.4e \n', x); else n = n+1; % incrementa il contatore delle iterate scarto = -fx/f1x; % Calcola il valore x_{n+1}-x_{n} = -f(x_n)/f'(x_n) = scarto x = x + scarto; % Calcola il valore x_{n+1} = x_{n} -f(x_n)/f'(x_n) (scalare) fx = f(x); % Calcola il valore f(x_{n+1})(Scalare) %Aggiorno i vettori dei risultati xv = [xv x]; % aggiunge al vettore la nuova ascissa fxv = [fxv fx]; % aggiunge al vettore il nuovo valore della funzione end end