% Programita para mostrar el calculo de raices de una ecuacion cuadratica
% Antonio Carrillo Ledesma


% Calculo de raices de una ecuacion cuadratica
function[x1,x2] = raiz(a,b,c)
  fprintf('Polinomio(%1.6f) X^2 + (%1.6f) X + (%1.6f) = 0\n',a,b,c);
  x1 = 0;
  x2 = 0;
  if a == 0
     fprintf('\nNo es cuadratica\n')
     return
  end

  fprintf('\nChicharronera 1\n')
  x1 = (-b+sqrt(b*b-4*a*c))/(2*a);
  r = f(a, b, c, x1);
  fprintf('Raiz(%1.16f), evaluacion raiz: (%e)\n',x1,r);
  x2 = (-b-sqrt(b*b-4*a*c))/(2*a);
  r = f(a, b, c, x2);
  fprintf('Raiz(%1.16f), evaluacion raiz: (%e)\n',x2,r);
  
  fprintf('\nChicharronera 2\n')
  x1 = (-2*c)/(b+sqrt(b*b-4*a*c));
  r = f(a, b, c, x1);
  fprintf('Raiz(%1.16f), evaluacion raiz: (%e)\n',x1,r);
  x2 = (-2*c)/(b-sqrt(b*b-4*a*c));
  r = f(a, b, c, x2);
  fprintf('Raiz(%1.16f), evaluacion raiz: (%e)\n',x2,r);

  fprintf('\nNetodo Newton-Raphson\n')
  x = x1 -1;
  fprintf('Valor inicial aproximado de X1 = %1.16f\n',x);
  for i = 1:10
    x = x - (f(a, b, c, x) / df(a, b, c, x));
  end
  r = f(a, b, c, x);
  fprintf('Raiz (%1.16f), evaluacion raiz: (%e)\n',x,r);

  x = x2 -1;
  fprintf('Valor inicial aproximado de X2 = %1.16f\n',x);
  for i = 1:10
    x = x - (f(a, b, c, x) / df(a, b, c, x));
  end
  r = f(a, b, c, x);
  fprintf('Raiz (%1.16f), evaluacion raiz: (%e)\n',x,r);
end




% Funcion cuadratica
function r = f(a, b, c, x)
  r = x * x * a + x * b + c;
end

% Derivada de la funcion cuadratica
function r = df(a, b, c, x)
  r = 2.0 * x * a + b;
end
