Enunciado:


Escribir la función
s=raiz(a) que calcula la raíz cuadrada del valor a con un error menor de 10-8 y el mínimo número de operaciones. Indicar el número exacto de sumas/restas y multiplicaciones/divisiones necesarias. Utilizar el método de Newton. Aplicar el código a algunos ejemplos para comprobar que funciona correctamente.



Solución:


function s=raiz(a)
n=floor(log(a)/log(2));
if floor(n/2)==(n/2)
   m=n;c=a/(2^n);    % 1 potencia + 1 división
else
   m=n-1;c=a/(2^(n-1));    % 1 potencia + 1 división
end
x=(2+c)/3;    % 1 suma + 1 division
x=(x+c/x)/2;    % 1 suma + 2 division
x=(x+c/x)/2;    % 1 suma + 2 division
x=(x+c/x)/2;    % 1 suma + 2 division
s=x*2^(m/2);    % 1 suma + 1 division + 1 potencia
return

El número de sumas/restas es de 5 sumas

El número de multiplicaciones/divisiones es de 2 multiplicaciones y 9 divisiones

% Comprobacion

>> a=3;abs(raiz(a)-sqrt(a))
ans =
6.5059e-014