Metodo della direzione costante
Ciao a tutti, sto preparando l'esame di Calcolo numerico e volevo un parere sul codice che ho scritto per il calcolo dello zero di una funzione. Anzi tutto se è giusto e se si può sistemare qualcosa
Avrei voluto che $m$ se lo calasse direttamente il programma, ma non sono riuscito a trovare una function che mi calcolasse il massimo della derivata in un determinato intervallo.
Che dite, ci sono errori? Anche perché purtroppo non mi sembra affidabilissimo come algoritmo, cioè l'approssimazione non è delle migliori. Magari ho sbagliato io qualcosa.
Grazie
function [x,iterata]=dircostante(f,m,a,b,maxdf,epsilon,maxiterate) Errore, guarda giù!
Avrei voluto che $m$ se lo calasse direttamente il programma, ma non sono riuscito a trovare una function che mi calcolasse il massimo della derivata in un determinato intervallo.
Che dite, ci sono errori? Anche perché purtroppo non mi sembra affidabilissimo come algoritmo, cioè l'approssimazione non è delle migliori. Magari ho sbagliato io qualcosa.
Grazie
Risposte
Trovato un errore grande, riposto il codice:
function [x,iterata]=dircostante(f,m,a,b,maxdf,epsilon,maxiterate) %Calcola attraverso il metodo della direzione costante % lo zero di una funzione %Sintassi: [x,iterata]=dircostante(f,m,a,b,madf,epsilon,maxiterate) %Input: f funzione, maxdf massimo della sua derivata in [a,b], m costante del metodo, epsilon tolleranza, maxiterate iterate massime del metodo %Output: x radice della f, numero di iterate %Controllo intervallo ed appartenenza di x0 if feval(f,a)*feval(f,b)>0 error('intervallo non attrattivo') else x0=(a+b)/2 end %Controllo sulla costante m if abs(1/m)<abs(maxdf) error('costante m non buona') end %metodo iterata=0; stop=0; while ~stop x1=x0-m*feval(f,x0); iterata=iterata+1; if abs(x1-x0)<epsilon stop=1 end x0=x1; end x=x1; iterata;