function [y,it]=newtonNDzakl(df,ddf,x0,tol)

% [y,it]=newton(df,ddf,x0,tol)
%
% Zakladni Newtonova metoda pro minimalizaci fce f(x)
%
%  y   ... minimum
%  it  ... pocet iteraci
%
%  df	... gradient minimalizovane fce f(x) zadana ve stringu 
%  ddf ... Hessian minimalizovane fce f(x) zadana ve stringu 
%  x0  ... pocatecni iterace
%  tol ... presnost reseni

it=0;
x=x0


grad=feval(df,x);
Hess=feval(ddf,x);

while norm(grad)>tol  
  it=it+1;
  h=-Hess\grad;
  xold = x;
  x=x+h;
  grad=feval(df,x);
  Hess=feval(ddf,x);
  
    plot([xold(1) x(1)],[xold(2) x(2)]);
    text(x(1),x(2),num2str(it)); 
  
end;


y = x;
plot(x(1),x(2),'+g');
text(x(1),x(2),'optimum','Color','green','FontSize',12);
hodnota =  3*(1-x(1))^2*exp(-(x(1)^2) - (x(2)+1)^2) - 10*(x(1)/5 - x(1)^3 - x(2)^5)*exp(-x(1)^2-x(2)^2) - 1/3*exp(-(x(1)+1)^2 - x(2)^2); 
text(x(1),x(2)-1,['Newton minimum, Iter.: ' num2str(it) ' ,xmin= ' num2str(x(1),3) ',' num2str(x(2),3) ' ,fmin= ' num2str(hodnota)],'fontsize',10,'BackgroundColor',[1 1 .6]);  


% end