NEWTON_RAPHSON
May 22, 2021
1 Método de Newton Raphson
Fórmula de recurrencia
f ( xi )
x i +1 = x i + f 0 ( xi )
Para el desarrollo del método numérico, desarrollamos un diagrama de flujo general y después
los diagramas de cada parte.
A continuación se presenta el diagrama de flujo general.
1
A continuación se presenta el desarrollo del método utilizando Python3, Día, Código de latex.
Todas las líneas que comiencen con el símbolo # son comentarios y estos son muy importantes en
el desarrollo de los programas, porque lo van documentando.
import math: con este módulo podemos trabajar con las funciones matemáticas, para mayor ref-
erencia pueden consultar la siguiente liga math.
import numpy as np módulo NUMerical PYthon, para mayor referencia pueden consultar la sigu-
iente liga numpy.
import matplotlib as plt módulo para la creación de gráficos, para mayor referencia pueden con-
sultar la siguiente liga matplotlib.
import sympy as sp módulo SYMbolic PYthon para matemáticas simbólicas, para mayor referen-
cia pueden consultar la siguiente liga sympy.
2
A continuación se presenta el desarrollo del método
[1]: # Método de Newton Raphson
# Librerías
import math
import [Link] as plt
import numpy as np
import sympy as sp
La función a resolver será f ( x ) = cos( x )2 + 100 − x y el usuario podrá introducir esta función u
otra.
Definimos la variable independiente x = [Link](‘x’)
Leemos la función f = input(‘Teclea la función f(x) =’)
También obtenemos la primera y segunda derivada de f ( x )
1.0.1 Nota: en python la sangría en muy importante en todas las estructuras.
A continuación se presenta el diagrama de flujo de las funciones.
[2]: # Variable independiente x
x = [Link]('x')
# Lectura de la función f(x)
f = input('Teclea la función f(x) = ')
3
# Obtención de la primera derivada de f(x)
pri_der = [Link](f,x)
# Obtención de la segunda derivada de f(x)
seg_der = [Link](f,x,2)
# Funciones
f = [Link](x,f)
pri_der = [Link](x,pri_der)
seg_der = [Link](x,seg_der)
Teclea la función f(x) = cos(x)*cos(x) + 100 - x
Tabulamos la función f un( x ) = cos( x )2 + 100 − x.
Los datos solicitados son: el valor inicial de la tabulación a y el valor del espaciamiento h de los
valores de x (valores igualmente espaciados).
Se tabularan 7 pares de datos (x, f(x)) para detectar el cambio de signo en la función.
Al salir de la estructura de repetición for, se preguntará si se desea tabular otra vez. Si se tabula
nuevamente se repite el proceso anterior y si no continuamos con el programa.
1.0.2 Nota: en python los datos se leen como strings.
En a = float(input(“Valor inicial de la tabulación a =”)), el string se convierte en un float (a es un
número real)
A continuación se presenta el diagrama de flujo de la tabulación.
4
5
[3]: # Tabulación de la función f(x)
print(" Tabulación de la función" )
corre = "S"
while corre == "S" or corre == "s":
a = float(input("Valor inicial de la tabulación a = "))
h = float(input("Valor del espaciamiento h = "))
print(" x y")
for i in range (7):
x = a + i*h
print('{0:4.2f} {1:10.5f}'.format(x, f(x)))
corre = input("Deseas tabular otra vez s/n: ")
Tabulación de la función
Valor inicial de la tabulación a = 10
Valor del espaciamiento h = 15
x y
10.00 90.70404
25.00 75.98248
40.00 60.44481
55.00 45.00049
70.00 30.40109
85.00 15.96900
100.00 0.74359
Deseas tabular otra vez s/n: s
Valor inicial de la tabulación a = 85
Valor del espaciamiento h = 5
x y
85.00 15.96900
90.00 10.20077
95.00 5.53315
100.00 0.74359
105.00 -4.94194
110.00 -9.00196
115.00 -14.89385
Deseas tabular otra vez s/n: n
Convergencia del método de Newthon Raphson y lectura de la tolerancia.
Se inicializa convergencia con 1, se lee x y para continuar se debe cumplir
f ( x ) · f 00 ( x )
<1 (1)
f 0 ( x )2
después se lee la tolerancia.
Diagrama de flujo de la convergencia.
6
[4]: # Convergencia del método de Newton Raphson
convergencia = 1
while convergencia >= 1:
x = float(input("Valor inicial x = "))
convergencia = [Link]( (f(x) * seg_der(x)) / pow(pri_der(x),2) )
tol = float(input("tolerancia "))
Valor inicial x = 96
Valor inicial x = 97
Valor inicial x = 98
tolerancia 0.00005
Graficamos la función para darnos una idea de su forma
La función [Link] genera un arreglo formado por n números equiespaciados entre dos
7
dados.
[5]: xg=[Link](x, x+h*7, 100)
y=[Link](len(xg))
for i in range(len(xg)):
y[i]=f(xg[i])
[Link](xg,y)
[Link](True)
[Link](0,color='k',lw=2)
[Link]()
Proceso de Newton Raphson
• inicializamos error = 1
• inicializamos i = 0
• imprimimos un letrero " i x "
• mientras error > tol
• hacemos i = i + 1
f (x)
• calculamos x_nuevo = x − pri_der ( x )
• se imprime i, x_nuevo
x_nuevo − x
• calculamos el error error = x_nuevo
• actualizamos el valor de x = x_nuevo
a continuación se presenta el diagrama de flujo.
8
[6]: # Proceso de Newton-Raphson
error = 1
i = 0
print('\n i x')
while error > tol:
i = i + 1
x_nuevo = x - f(x) / pri_der(x)
print('{0:2d} {1:8.5f}'.format(i, x_nuevo))
9
error = [Link]( (x_nuevo - x) / x_nuevo)
x = x_nuevo
i x
1 99.37726
2 102.41230
3 96.86586
4 125.83947
5 107.33961
6 103.81089
7 101.58813
8 100.86249
9 100.88203
10 100.88185
Por último se imprime la raíz x, también se imprime en cuántas iteraciones llegó y se muestra el
diagrama de flujo.
[7]: # Resultado
print("\nLa raíz es x = ", '{0:8.5f}'.format(x))
print("en i = ", i, " iteraciones")
La raíz es x = 100.88185
en i = 10 iteraciones
Para el desarrollo de este material se utilizo:
Jupyter Notebook
Python3
LaTeX
Text Studio para general el archivo pdf
Referencias a páginas de internet para la librerías
10
Para los diagramas de flujo se utilizó el paquete DIA (abreviatura de DIAgrams)
11