% Implementacion de Newton-Raphson
% poniendo los puntos sucesivos
% Input:
% f, fp (la derivada), x0, epsilon, N
function [z n] = newtonraphson(f, fp, x0, epsilon, N)
  n = 0;
  xn = x0;
  % inicializamos z a NaN (i.e. por defecto, error)
  z = NaN; 
  % f y fp son funciones anonimas 
  fn = f(xn);
  while(abs(fn) >= epsilon && n <= N)
    n = n + 1;  
    fn = f(xn); % lo memorizamos para no calcularlo otra vez
    % siguiente iteracion
    xn = xn - fn/fp(xn); % podria haber malos denominadores
  end
  z = xn;
  if(n == N)
    warning('No se ha alcanzado la tolerancia.');
    z = NaN;
  end
end
