function [x,it] = newton(fun,dfun,ddfun,x0,tol)

% [x,it] = newton(fun,dfun,ddfun,x0,tol)
%
% funkce nalezne minimum funkce f(x)Newtonovou metodou 
%
% x   ... minimum
% it  ... pocet iteraci
%
% fun ... f(x) zadana ve stringu 
% dfun .. derivace f(x) zadana ve stringu 
% ddfun . druha derivace f(x) zadana ve stringu 
% x0  ... pocatecni aproximace
% tol ... pozadovana absolutni presnost

x=x0;

fx=feval(fun,x);

xn = x - feval(dfun,x)/feval(ddfun,x);
fxn=feval(fun,xn);

%while fxn>fx
%   xn=(xn+x)/2;
%   fxn=feval(fun,xn);
%end

it = 1;

while norm(xn-x) >= tol 
   
   x=xn; fx=fxn;

   xn = x - feval(dfun,x)/feval(ddfun,x);
   fxn=feval(fun,xn);
   
%   while fxn>fx
%      xn=(xn+x)/2;
%      fxn=feval(fun,xn);
%   end
  
   it = it + 1;
end
it
x = xn;

% end