clear all
close all


f=@(x) 2*x.^3-3*x.^2-12*x+1;
figure; fplot(f); hold on; yline(0); grid on; hold off

df=@(x) 6*x.^2-6*x-12;

x0 = input('inserisci approssimazione iniziale ');
[x,y,it]=Newton(f,df,x0,1e-10,1e-10,100);
fprintf('\n x=%4.16f, f(x)=%4.16f, iterazioni=%d, \n',x,y,it);

figure; fplot(f); hold on; plot(x,y,'*'); yline(0); grid on; hold off










function [p0,y,it,X]=Newton(f,df,p0,tol1,tol2,itmax)
% metodo di Newton 
%Input - f function input 
% - df derivata di f 
% - p0 stima iniziale dello zero di f
% - delta tolleranza per p0
% - epsilon tolleranza sui valori della funzione
% - itmax numero massimo di iterazioni
%Output - p0 approssimazione dello zero
% - err stima dell'errore per p0
% - k numero di iterazioni
% - y valore f(p0)

y=f(p0); err = tol1+1; it = 0; X=[p0];

while (it < itmax && err>tol1 && abs(y)>tol2)
   it = it+1;
   p1 = p0-y/(df(p0));
   err = abs(p1-p0);
   p0 = p1;
   y = f(p0);
   X = [X p0];
end

end
