Metodo di Steffensen
Salve a tutti.
Premetto che sono un neofita di Matlab per cui vi prego in anticipo di scusarmi per eventuali domande stupide.
Devo costruire un algoritmo per approssimare le radici di una equazione non-lineare usando il metodo di Steffensen.
Io ho scritto la seguente funzione
function [Zero,Iter,Xvect,Fx] = Steffensen(Fun,Xo,Kmax,Toll,Toll1,Toll2)
% function [Zero,Iter,Xvect,Fx] = Steffensen(Fun,Xo,Kmax,Toll,Toll1,Toll2)
%
% ||Input||
% Fun è la funzione di cui calcolare le radici
% Xo è il punto iniziale
% Kmax è il massimo numero di iterazioni
% Toll nota
% Toll1 nota
% Toll2 nota
%
% ||Output||
% Zero è l'approssimazione delle radici
% Iter è il numero di iterazioni effettuate
% Xvect è il vettore contenente le soluzioni di ogni iterazione
% Fx è il vettore contenente la valutazione della funzione in 'Xvect':
Iter = 0;
Xvect = Xo;
Fx = Fun(Xo);
for k = 1:Kmax
Xk = Xo-Fun(Xo)*[(Fun(Xo))/(Fun(Xo+Fun(Xo-Fun(Xo))))];
if abs(Fun(Xk))<= Toll | abs(Xk-Xo) <= Toll1+Toll2*abs(Xk)
Zero = Xk;
Iter = Iter+1;
Xvect = [Xvect Xk];
Fx = [Fx Fun(Xk)];
break
else
Xo = Xk;
Iter = Iter+1;
Xvect = [Xvect Xk];
Fx = [Fx Fun(Xk)];
end
end
disp(Zero)
disp(Iter)
disp(Xvect)
disp(Fx)
end
Ho riscontrato tuttavia un problema nella sua esecuzione.
Se infatti utilizzo come funzione (Fun) in ingresso una espressione semplice (ho utilizzato x-3 ed il comando "inline" per inserire la funzione in ingresso) trova la soluzione senza problemi; se invece utilizzo una espressione più "difficile" (x-cos(x)) non trova la soluzione.
Potete darmi qualche consiglio??
Vi ringrazio in anticipo sperando in una vostra risposta.
Premetto che sono un neofita di Matlab per cui vi prego in anticipo di scusarmi per eventuali domande stupide.
Devo costruire un algoritmo per approssimare le radici di una equazione non-lineare usando il metodo di Steffensen.
Io ho scritto la seguente funzione
function [Zero,Iter,Xvect,Fx] = Steffensen(Fun,Xo,Kmax,Toll,Toll1,Toll2)
% function [Zero,Iter,Xvect,Fx] = Steffensen(Fun,Xo,Kmax,Toll,Toll1,Toll2)
%
% ||Input||
% Fun è la funzione di cui calcolare le radici
% Xo è il punto iniziale
% Kmax è il massimo numero di iterazioni
% Toll nota
% Toll1 nota
% Toll2 nota
%
% ||Output||
% Zero è l'approssimazione delle radici
% Iter è il numero di iterazioni effettuate
% Xvect è il vettore contenente le soluzioni di ogni iterazione
% Fx è il vettore contenente la valutazione della funzione in 'Xvect':
Iter = 0;
Xvect = Xo;
Fx = Fun(Xo);
for k = 1:Kmax
Xk = Xo-Fun(Xo)*[(Fun(Xo))/(Fun(Xo+Fun(Xo-Fun(Xo))))];
if abs(Fun(Xk))<= Toll | abs(Xk-Xo) <= Toll1+Toll2*abs(Xk)
Zero = Xk;
Iter = Iter+1;
Xvect = [Xvect Xk];
Fx = [Fx Fun(Xk)];
break
else
Xo = Xk;
Iter = Iter+1;
Xvect = [Xvect Xk];
Fx = [Fx Fun(Xk)];
end
end
disp(Zero)
disp(Iter)
disp(Xvect)
disp(Fx)
end
Ho riscontrato tuttavia un problema nella sua esecuzione.
Se infatti utilizzo come funzione (Fun) in ingresso una espressione semplice (ho utilizzato x-3 ed il comando "inline" per inserire la funzione in ingresso) trova la soluzione senza problemi; se invece utilizzo una espressione più "difficile" (x-cos(x)) non trova la soluzione.
Potete darmi qualche consiglio??
Vi ringrazio in anticipo sperando in una vostra risposta.
Risposte
Ciao, metti il pezzo di codice tra i tag di codice [c'è un tasto apposta] per renderlo più comprensibile.
Sul tuo problema, non conosco il metodo di Steffensen, ma magari ha delle ipotesi che la seconda funzione non soddisfa?
Sul tuo problema, non conosco il metodo di Steffensen, ma magari ha delle ipotesi che la seconda funzione non soddisfa?