Uni.AN-Matlab-GtNewton History
Hide minor edits - Show changes to output
Added lines 1-77:
(:title Matlab - Metodo di Newton:) [[Torna alla pagina di Analisi Numerica->Analisi numerica]] ----
%titolo%''':: Matlab - Metodo di Newton ::'''
[@% Metodo di Newton % ---------------- % restituisce la soluzione calcolata x ed il numero % di iterazioni effettuate it % richiede come parametri di ingresso la funzione, la sua % derivata prima, il dato iniziale x0, l'errore tollerato % epsilon ed il numero massimo di iterazioni consentite function [x,it]=newton(f,f1,x0,epsilon,nmax); % assegno il dato iniziale a x(1) x(1) = x0; % inizializzo le variabili it per il conteggio delle iterazioni % e test per effettuare il test di arresto it = 1; test = epsilon + 1; % assegno alle variabili fx e dfx rispettivamente la funzione % e la sua derivata (che ho passato come parametri) fx = f(x); dfx = f1(x);
% entro nel ciclo in cui avviene il calcolo delle soluzioni % esco dal ciclo solo quando la differenza tra due iterate % successive è minore della tolleranza epsilon (1), o quando % oltrepasso il massimo numero di iterazioni consentite (2) % (1) (2) % -------------- ---------- while test > epsilon & it <= nmax % incremento di 1 il numero di iterazioni it = it + 1; % calcolo il rapporto tra la funzione e la sua derivata rapporto = - (fx / dfx); % calcolo la x_i con il metodo di Newton x(it) = x(it-1) + rapporto; % assegno il valore assoluto della variabile rapporto % alla variabile test che uso per controllare se ho % superato o no il test di arresto del metodo test = abs(rapporto); % assegno alla fx la nuova funzione... fx = f(x(it)); % ...e faccio la stessa cosa con la dfx dfx = f1(x(it)); end % esempio di utilizzo: % % % definisco la x0 % x0 = 3.5; % % definisco l'errore epsilon tollerato % epsilon = 1e-4; % % definisco il numero massimo di iterazioni % nmax = 100; % % utilizzo il comando fcnchk così da definire una variabile effe % % da trattare come funzione a tutti gli effetti % effe = fcnchk('x.^2-6'); % % e assegno con lo stesso metodo la sua derivata % effe1 = fcnchk('2*x'); % % invoco la funzione newton per calcolare la soluzione % % notare che mi viene restituito anche il numero it di iterazioni % [x,it] = newton(effe,effe1,x0,epsilon,nmax); % % calcolo la soluzione reale così da poter calcolare l'errore esatto % x_reale = sqrt(6); % % trovo l'errore. NOTA: x(it-1) permette di trovare l'errore di x(it) % errore = abs(x(1:it-1) - x_reale); % % trovo l'errore stimato % errore_st = abs(x(2:it) - x(1:it-1)); % mostriamo come cambiano le soluzioni all'aumentare del numero % % di iterazioni. Notiamo che migliorano sempre % for i=1:it-1 % fprintf('it=%2d x=%16.13f stima=%12.6e vero=%12.6e \n',... % i,x(i),errore_stima(i),errore_vero(i)); % end@]
---- [[Torna alla pagina di Analisi Numerica->Analisi numerica]]
|