%==================================================================== % Script per il Metodo di Bisezione % Necessita della Function bisezione %==================================================================== clear all clc disp('METODO DI BISEZIONE'); % Ingresso dati: % funzione ed estremi a e b % f = @(x) sqrt(x+1) - exp(-x); a=-0.5; b=1; % f = @(x) exp(x)-5+x.^2; a=-2; b=2; % f = @(x) 3*x-cos(x); a=-1; b=1; f = @(x) x + log(x); a=-0.5; b=1; %--------------------- %tolleranza toll = 1e-8; %numero massimo iterazioni nmax = 100; %--------------------- % % % % %In altenativa i dati si possono richiedere di volta in volta all'utente % % f = input('Inserire la funzione [nel formaato @(x)...] '); % % a = input('Inserire l''estremo a dell''intervallo '); % % b = input('Inserire l''estremo b dell''intervallo '); % % toll = input('Inserire la tolleranza '); % % nmax = input('Inserire il num max di iterazioni '); % %---------------------------------------------------------------------- % Controllo sui valori discordi if f(a)*f(b) >= 0 error('ERRORE: Valori f(a) e f(b) non discordi') else % Visualizzazione di controllo dati inseriti fprintf('--------DATI-------\n'); disp('f = '); disp(f); fprintf('a = %f \n', a); fprintf('b = %f \n', b); fprintf('toll = %f \n', toll); fprintf('n. max iterazioni = %f \n', nmax); % funzione bisezione [xv, fxv, n] = bisezione(f, a, b, toll, nmax); if n == nmax warning('Warning: Massimo numero di iterazioni raggiunto') else fprintf('Convergenza raggiunta') end % Risultati fprintf('--------RISULTATI-------\n'); % Visualizza l'ultima iterata fprintf('ascissa finale: %3.8f \n',xv(end)); % Visualizza l'ultimo residuo fprintf('valore dell''ultimo residuo: %3.8f \n',fxv(end)); % % Visualizza tutti i residui calcolati % fprintf('valore della funzione alle varie iterazioni \n'); % fprintf(' %3.8f \n', abs(fxv)') % % Visualizza l'indice dell'ultima ascissa calcolata fprintf('numero di iterazioni: %f \n', n) % Grafico dei valori assoluti dei residui (valori della funzione vs % numero dell'iterazione it=1:n; semilogy(it,abs(fxv), '-b', 'LineWidth',2) title(['abs(residui) Bisezione per funzione ', func2str(f)] ); end