2.3.1 Newton-Raphson Ejemplo01

Referencia: Burden ejemplo 1 p.51/pdf.61

La ecuación mostrada tiene una raiz en [1,2], ya que f(1)=-5 y f(2)=14.
Muestre los resultados parciales del algoritmo de Newton Raphson con una tolerancia de 0.0001

f(x) = x^3 + 4x^2 -10 =0
['xi', 'xnuevo', 'tramo']
[ 2.   1.5  0.5]
[ 1.5     1.3733  0.1267]
[ 1.3733  1.3653  0.0081]
[  1.3653e+00   1.3652e+00   3.2001e-05]
raiz en:  1.3652300139161466

El algoritmo usado requiere desarrollar una parte analítica si la función es de tipo numérica, pues requiere encontrar la derivada de la función:

f(x) = x^3 + 4x^2 -10 f'(x) = 3x^2 + 8x

resultados, que añadiendo el punto inicial de análisis y la tolerancia permiten usar el algoritmo:

# Método de Newton-Raphson
# Ejemplo 1 (Burden ejemplo 1 p.51/pdf.61)

import numpy as np

# INGRESO
fx = lambda x: x**3 + 4*x**2 - 10
dfx = lambda x: 3*(x**2) + 8*x

x0 = 2
tolera = 0.001

# PROCEDIMIENTO
tabla = []
tramo = abs(2*tolera)
xi = x0
while (tramo>=tolera):
    xnuevo = xi - fx(xi)/dfx(xi)
    tramo = abs(xnuevo-xi)
    tabla.append([xi,xnuevo,tramo])
    xi = xnuevo

tabla = np.array(tabla)
n=len(tabla)

# SALIDA
print(['xi', 'xnuevo', 'tramo'])
np.set_printoptions(precision = 4)
for i in range(0,n,1):
    print(tabla[i])
print('raiz en: ', xi)

scipy.optimize.newton

El método de Newton-Raphson se encuentra implementado en Scipy, que también puede ser usado de la forma:

>>> import scipy.optimize as opt
>>> opt.newton(fx,x0, fprime=dfx, tol = tolera)
1.3652300139161466
>>> 

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.newton.html


Ejemplo

Calcule la raíz de f(x) = e-x – x, empleando como valor inicial x0 = 0

Tarea

  • convertir el algoritmo a una función,
  • Revisar las modificaciones si se quiere usar la forma simbólica de la función.