Ejercicio: 2Eva2003TIII_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
>>>
Algoritmo 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))