%==================================================================== % Script per il Metodo di Newton % Necessita della Function newton.m %==================================================================== clear all clc clf disp('METODO DI NEWTON'); % Ingresso dati % %------------------------------------------ %funzione e sua derivata: % l'intervallo a e b รจ da usarsi nel confronto con il metodo di bisezione %%% funzione 1 f = @(x)sqrt(x+1) - exp(-x); f1 = @(x)1/2.*sqrt(x+1)+exp(-x); a=-0.5; b=1; %%% funzione 2 % f = @(x)exp(x)-5+x.^2; a=-2; b=2; % f1 = @(x)exp(x)+2*x; % a=-2; b=2; %%% funzione 3 % f = @(x)3*x-cos(x); % f1 = @(x)3 + sin(x); % a=-1; b=1; %%% funzione 4 % f = @(x)x + log(x); % f1 = @(x)1+1/x; % a=-0.5; b=1; %------------------------------------------ % punto iniziale x0 x0 = 1.0; %------------------------------------------ %tolleranza toll = 1e-8; %numero massimo iterazioni nmax = 100; %------------------------------------------ % % % % %In altenativa i dati si possono richiedere di volta in volta all'utente % % f = input('funzione = '); % f1 = input('derivata = '); % toll = input('tolleranza = '); % nmax = input('numero massimo di iterazioni = '); % x0 = input('valore iniziale = '); % a = input('a = '); % b = input('b = '); %------------------------------------------ % visualizzazione di controllo dati inseriti fprintf('--------DATI-------\n'); disp('f = '); disp(f); disp('derivata di f = '); disp(f1); fprintf('x0 = %12.4e \n', x0); fprintf('toll = %12.4e \n', toll); fprintf('n. max iterazioni = %d \n', nmax); %------------------------------------------ % Parte esecutiva % chiamata function newton [xv, fxv, n] = newton_conc(f, f1, x0, toll, nmax); [xvb, fxvb, nb] = bisezione (f, a, b, toll, nmax); if n == nmax warning('Warning: Massimo numero di iterazioni raggiunto \n') else fprintf('Convergenza raggiunta \n') end % Risultati fprintf('--------RISULTATI-------\n'); % Visualizza l'ultima ascissa fprintf('ascissa finale: %12.4e \n',xv(end)); % Visualizza il valore della funzione nell'ultima ascissa calcolata fprintf('valore della funzione nell''ascissa finale: %12.4e \n', fxv(end)); % % Visualizza tutte le funzioni calcolate alle varie iterazioni % fprintf('valore della funzione alle varie iterazioni \n'); % fprintf(' %12.4e \n', abs(fxv)') % Visualizza l'indice dell'ultima ascissa calcolata fprintf('numero di iterazioni: %d \n', n) % Comandi per visualizzare una tabella tab_ris = [xv fxv]; fprintf(' xn, fxn \n') fprintf (' %12.4e %12.4e \n', tab_ris') % Grafico dei valori assoluti delle funzioni ad ogni iterazione it=1:size(fxv,2); semilogy(it,abs(fxv), '-r', 'LineWidth',2) title(['abs(residui) Newton per funzione ', func2str(f), ', x_0= ',num2str(x0)] ); xlabel('iteration number');ylabel('residual'); hold on itb = 1:size(fxvb,2); semilogy(itb,abs(fxvb),'-b', 'LineWidth',2) legend('Newton','Bisezione') hold off