% f: funcion a la que se va a sacar el cero
% a, b: limites del intervalo
% delta: error absoluto maximo
f = @(x)(x*sin(x)-1);
a = 0;
b = 2;
delta = 0.00001;
% ya: valor de la funcion en a
% yb valor de la funcion en b
% yc: valor de la funcion en c
% err: error de la ultima iteracion
% maxi: maximo de iteraciones
ya = f(a);
yb = f(b);
if ya * yb > 0
disp "No existe una raiz en el intervalo"
break
end
maxi = 1 + round((log(b-a)-log(delta))/log(2));
for k = 1:maxi
c = (a+b) / 2;
yc = f(c);
if yc == 0
a = c;
b = c;
elseif yb*yc > 0
b = c;
yb = yc;
else
a = c;
ya = yc;
end
if b-a < delta
break
end
end
c = (a+b) / 2;
err = abs(b-a);
yc = f(c);
% mostrar resultados
printf("La aproximación al cero es: %10.6f\n",c);
printf("Con un error absoluto menor a %8.6f\n",err);
printf("El valor de la funcion en la aproximacion es %10.8f\n",yc);
Comments