

function [x,it]=newton(f,df,x0,xs=0)
#funkcja octave'a z m newtona i jej (opjca) testami
#xn=xp-f(xp)/f'(xp)
#Wejscie - parametry
#f- uchwyt (Wskaznik) do funkcji obliczajacej f(x)
#df- uchwyt (Wskaznik) do funkcji obliczajacej f'(x)
#x0 - startowe przblizenie zera
#xs (opcja) - rozwiazanie tylko do testow - jesli podane to funkcja 
#drukuje e_n/(e_n)^p dla p=1,2,3
#output - na wyjsciu z funkcji
#x - przyblizenie zera (ostatnia wartosc xn)
#it ilosc iteracji
#przyklad wywolania
#z testami rzedu zbieznosci
#[x,it]=newton(@(x)x*x-4,@(x)2*x,4,2) 
#x=newton(@(x)x*x-4,@(x)2*x,4,2) 
#bez testow zbieznosci
#[x,it]=newton(@(x)x*x-4,@(x)2*x,4) 
#x=newton(@(x)x*x-4,@(x)2*x,4) 
#
Nmax=100;tolr=1e-7;

er=x0-xs;
it=0;
x=x0;
y=f(x);
while((abs(y)>tolr)&&(it<Nmax))
 dy=df(x);
 x=x-y/dy;
 y=f(x);
 it++;
 if(nargin==4)
  erp=er;er=x-xs;
  printf("[%d] %g %g %g %g\n",it,er,er/erp,er/(erp*erp),er/(erp*erp*erp));
 endif
endwhile
if(it>=100)
 printf("Ilosc iteracji=%d przekroczyla max ilosciteracji =%d\n",it,Nmax);
endif 

endfunction
