Problema 1
> restart;
>
second:=proc(a,b,c)
local x1,x2,ErrRelx1,ErrRelx2,x1Exacto,x2Exacto;
Digits:=4;
x1Exacto:=evalf((-b+sqrt(b^2-4*a*c))/(2*a));
x2Exacto:=evalf((-b-sqrt(b^2-4*a*c))/(2*a));
x1:=evalf((-b+sqrt(b^2-4*a*c))/(2*a));
x2:=evalf((-b-sqrt(b^2-4*a*c))/(2*a));
if b>0 then x1:=evalf((-2*c)/(b+sqrt(b^2-4*a*c))) fi;
if b<0 then x2:=evalf((-2*c)/(b-sqrt(b^2-4*a*c))) fi;
ErrRelx1:=evalf(abs(x1Exacto-x1)/abs(x1),10);
ErrRelx2:=evalf(abs(x2Exacto-x2)/abs(x2),10);
printf("x1 = %10.4e Erro relativo de x1 = %10.4e | x2 = %10.4e Erro relativo de x2 = %10.4e",x1,ErrRelx1,x2,ErrRelx2);
end:
> second(1,62.10,1);
x1 = -1.6100e-02 Erro relativo de x1 = 2.4224e-01 | x2 = -6.2100e+01 Erro relativo de x2 = 0.0000e-01
>
secondB:=proc(a,b,c)
local x1,x2,ErrRelx1,ErrRelx2,x1Exacto,x2Exacto;
x1Exacto:=evalf((-b+sqrt(b^2-4*a*c))/(2*a));
x2Exacto:=evalf((-b-sqrt(b^2-4*a*c))/(2*a));
Digits:=4;
if b>0 then
x1:=evalf((-2*c)/(b+sqrt(b^2-4*a*c)));
x2:=evalf((-b-sqrt(b^2-4*a*c))/(2*a));
else
x1:=evalf((-b+sqrt(b^2-4*a*c))/(2*a));
x2:=evalf((-2*c)/(b-sqrt(b^2-4*a*c)));
fi;
ErrRelx1:=evalf(abs(x1Exacto-x1)/abs(x1Exacto),10);
ErrRelx2:=evalf(abs(x2Exacto-x2)/abs(x2Exacto),10);
printf("x1 = %10.4e Erro relativo de x1 = %10.4e | x2 = %10.4e Erro relativo de x2 = %10.4e",x1,ErrRelx1,x2,ErrRelx2);
end:
> secondB(1,62.10,1);
x1 = -1.6100e-02 Erro relativo de x1 = 4.4918e-04 | x2 = -6.2100e+01 Erro relativo de x2 = 2.5944e-04