Metodo della direzione costante

mistake89
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

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
mistake89
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;

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.