Ejercicio: 2Eva_IIIT2003_T2 Raíz cuadrada por Newton
Recuerde que toda función recursiva requiere un valor inicial para la primera iteración. Empezando para n=0 con el valor de x:
f(1) = \frac{x}{2}En el caso que n>1, se usa la expresión recursiva:
f(n) = 0.5\Bigg(f(n-1) + \frac{x}{f(n-1)}\Bigg)Los valores tabulados para x=9 y n=10
ingrese x: 9 aproximación n-esima: 10 i , f(i) 0 nan 1 4.5 2 3.25 3 3.0096153846153846 4 3.000015360039322 5 3.0000000000393214 6 3.0 7 3.0 8 3.0 9 3.0 10 3.0 >>>
Observe que a partir de la iteración 6, ya no muestra diferencia entre resultados consecutivos.
Para x= 9.5 con x=10
ingrese x: 9.5 aproximación n-esima: 10 i , f(i) 0 nan 1 4.75 2 3.375 3 3.0949074074074074 4 3.082233060472589 5 3.0822070015946474 6 3.0822070014844885 7 3.0822070014844885 8 3.0822070014844885 9 3.0822070014844885 10 3.0822070014844885 >>>
Instrucciones en Python
La función no debe admitir valores de x negativos o cero, de darse el caso se responde np.NaN que corresponde a no es un número o ‘Not a Number’.
# 2Eva_IIIT2003_T2 Raíz cuadrada por Newton import numpy as np # literal a. función recursiva def raizNewton(x,n) if n<=0 or x<=0: # no se admiten negativos o cero f = np.NaN else: if n == 1: f = x/2 # valor inicial if n>1: f = 0.5 *(raizNewton(x,n-1)+x/raizNewton(x,n-1)) return (f) # literal b. Programa --------------- # INGRESO x = float(input('ingrese x: ')) n = int(input('aproximación n-esima: ')) # PROCEDIMIENTO print(' i , f(i)') for i in range(0,n+1,1): print(i , raizNewton(x,i))