Matlab Algoritmo di Bisezione ed Errore Relativo

Messaggioda nostradamus1915 » 19/04/2018, 15:02

Salve a tutti, la professoressa ci ha assegnato di scrivere un algoritmo di bisezione per trovare lo zero di una funzione in un intervallo. Avevamo TOL e TOLF (rispettivamente tolleranza intervallo e tolleranza funzione, ovvero la massima differenza accettabile col valore reale. L'ha corretto e mi ha detto che non va bene perché ho considerato l'errore assoluto e non quello relativo. L'algoritmo è il seguente:
Codice:
if f(a)*f(b)>0
    error('non ci sono zeri');
else
    c = (a+b)/2;
    while(iter<NMAX && (((abs(x0(2)-x0(1))/max(abs(x0(1)),abs(x0(2))))>TOL) && (abs(f(c)) > eps)))
        if(f(c)*f(a) < 0)
            b = c;
        else
            a = c;
        end
        c = (a +b)/2;
        iter = iter +1;
    end
    x = c;
    out = [ f(c), iter ];
end


Mentre per il controllo del risultato rispetto al valore vero, ho usato fzero:
Codice:
disp(strcat('bisection result = ',sx));
disp(strcat('fzero result = ',sx2));
disp(strcat('difference = ',num2str(abs(x-x2),'%10.15e\n')));


L'errore relativo sarebbe
Codice:
disp(strcat('errore bisection = ',num2str(abs(3-1)/x,'%10.15e\n')));
disp(strcat('errore fzero = ',num2str(abs(3-1)/x2,'%10.15e\n')));

e vedo quale delle due funzioni restituisce l'errore più basso?
nostradamus1915
Junior Member
Junior Member
 
Messaggio: 109 di 222
Iscritto il: 04/06/2013, 17:44

Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite