Está en la página 1de 16

Unidad 2.

Solución de ecuaciones no lineales de una variable

Unidad 2. Solución de ecuaciones no


lineales de una variable

Actividad 2. Ejercicios

Métodos Numéricos
Unidad 2. Solución de ecuaciones no lineales de una variable

Implementar en algún lenguaje de programación los métodos con ejemplos


• Método de Bisección
De manera general, el procedimiento para implementar el método de la bisección se puede
dividir en los siguientes pasos:
1. Seleccionar un intervalo inicial [𝑎! , 𝑏! ] en que que el valor de la función
cambia de signo 𝑓(𝑎! )𝑓(𝑏! ) < 0
"! #$!
2. Calcular el punto intermedio del intervalo 𝑚! = y evaluar la función en
%

este 𝑓(𝑚! )
3. Si 𝑓(𝑚! ) = 0 se ha encontrado la raíz y finaliza el proceso. En caso contrario
se debe seleccionar el nuevo subintervalo como aquel en el que la función
cambia de signo. Así, en el caso de que se 𝑓(𝑎! )𝑓(𝑚! ) < 0 el nuevo intervalo
será [𝑎! , 𝑚! ], mientras si se da que se 𝑓(𝑚! )𝑓(𝑏! ) < 0 el nuevo intervalo
será [𝑚! , 𝑏! ]
4. Repetir los pasos 2 y 3 hasta que el intervalo sea tan pequeño como se desee.
5. La posición de la raíz, en el caso de que no se hubiese encontrado, se puede
"" #$"
estimar con 𝑚& = %

Estimación del error


Si la función evaluada es continua y esta cambia de signo en un rango, entonces
debe existir al menos una raíz en este. Por lo tanto, si se toma el punto medio como
solución, el error que se comente es inferior a la mitad del rango. Esto es

𝑏& − 𝑎& 𝑏! − 𝑎!
𝜀 = |𝑥'()* − 𝑥& | ≤ = &#+
2 2

Donde 𝑥'()* indica la posición real de la raíz. De este modo, si se conoce el error máximo
deseado 𝜀 se puede saber cual es el número máximo de pasos necesarios para alcanzarla,
al despejar el valor de N

𝑏! − 𝑎!
𝑙𝑛 7 𝜀 7
𝑁=
𝑙𝑛|2|
Unidad 2. Solución de ecuaciones no lineales de una variable

Código en python
import math
#Algoritmo para el método bisección
def biseccion (funcion, aO, bO, error):

#Verificar que el valor de la raiz existe


if funcion(aO)*funcion(bO)>= 0:
print ("No se puede aplicar el método de bisección")
return None

if error is not None:


#calcular el número de iteraciones
i = math.ceil(math.log((bO - aO)/error)/math.log(2))

for n in range (i +1):


mO = (aO + bO)/2

if funcion(mO) == 0:
return mO

if funcion(aO)*funcion(mO)<0:
bO = mO

else:
aO = mO

return (aO + bO)/2

Ejercicio 1. Aleatorio
𝑓(𝑥) = 𝑥 , − 3𝑥 % − 𝑥 + 2

Si para calcular el número de iteraciones, consideramos un error pequeño de


𝜀 = 𝑒 -+.
Unidad 2. Solución de ecuaciones no lineales de una variable

En el intervalo [-2,0] encontramos una raíz de -0.8608058531117034


En el intervalo [0,2] encontramos una raíz de 0.7458984116349476
En el intervalo [2,4] encontramos una raíz de 3.1149075414767555
Como podemos observar en el siguiente gráfico:

Gráfico 1. El gráfico muestra que hay una raíz entre -2 y 0, otra entre 0 y 2 y otra entre 2 y
4.
Unidad 2. Solución de ecuaciones no lineales de una variable

Ejercicio 2. Aleatorio
𝑓(𝑥) = 𝑥 % − 1

Si para calcular el número de iteraciones, consideramos un error pequeño de


𝜀 = 𝑒 -+.

En el intervalo [-2,0] encontramos una raíz de -1


En el intervalo [0,2] encontramos una raíz de 1
Como podemos observar en el siguiente gráfico:

Gráfico 2. El gráfico muestra que hay una raíz entre -2 y 0 y otra entre 0 y 2
Unidad 2. Solución de ecuaciones no lineales de una variable

• Falsa posición

Código en python
import numpy as np

#ALGORITMO FALSA POSICIÓN


def falsa_posicion (fx,a,b,tolera):
tramo = abs(b-a)
while not(tramo<=tolera):
fa = fx(a)
fb = fx(b)
c = b - fb*(a-b)/(fa-fb)
fc = fx(c)
cambia = np.sign(fa)*np.sign(fc)
if (cambia > 0):
tramo = abs(c-a)
a = c
else:
tramo = abs(b-c)
b = c
return c

Ejercicio 1. Aleatorio
𝑓(𝑥) = 𝑥 , + 4𝑥 % − 10

Si para calcular el número de iteraciones, consideramos un error pequeño de


𝜀 = 0.001

En el intervalo [1,2] encontramos una raíz de 1.3651237178843778


Como podemos observar en el siguiente gráfico:
Unidad 2. Solución de ecuaciones no lineales de una variable

Gráfico 3. El gráfico muestra que hay una raíz entre 1 y 2

Ejercicio 2. Aleatorio
𝑓(𝑥) = 𝑥 / − 17𝑥 0 − 15𝑥 % + 12𝑥 − 1

Si para calcular el número de iteraciones, consideramos un error pequeño de


𝜀 = 0.001

En el intervalo [-2,18] encontramos una raíz de 17.04912676661495


Como podemos observar en el siguiente gráfico:
Unidad 2. Solución de ecuaciones no lineales de una variable

Gráfico 4. El gráfico muestra que hay una raíz entre 16 y 18.


Unidad 2. Solución de ecuaciones no lineales de una variable

• Newton – Raphson

Código en python
import numpy as np

#ALGORITMO NEWTON RAPHSON


def newton_rapshon(fx,dfx,x0,tolerancia):
tabla = []
tramo = abs(2*tolerancia)
xi = x0
while (tramo>=tolerancia):
xnuevo = xi - fx(xi)/dfx(xi)
tramo = abs(xnuevo-xi)
tabla.append([xi,xnuevo,tramo])
xi = xnuevo

# convierte la lista a un arreglo.


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

# SALIDA
print(['xi', 'xnuevo', 'tramo'])
np.set_printoptions(precision = 4)
print(tabla)
print('raiz en: ', xi)
print('con error de: ',tramo)

Ejercicio 1. Aleatorio
𝑓(𝑥) = 𝑥 , + 4𝑥 % − 10

Encontramos una raíz de 1.3652300139161466


Como podemos observar en el gráfico 3 del ejercicio 1 aleatorio de para la falsa posición.
Unidad 2. Solución de ecuaciones no lineales de una variable

Ejercicio 2. Aleatorio
𝑓(𝑥) = 𝑥 , − 𝑥 % + 2

Encontramos una raíz de -1


Como podemos observar en el siguiente gráfico:
Unidad 2. Solución de ecuaciones no lineales de una variable

Gráfico 5. El gráfico muestra que hay una raíz en -1

Ejercicio 6.3 del libro Charpa

Encontramos una raíz de 2.7193405398662276


Como podemos observar en el siguiente gráfico:

Gráfico 5. El gráfico muestra que hay una raíz en 2.7193405398662276


Unidad 2. Solución de ecuaciones no lineales de una variable

• Método de la Secante

Código en python
#Algoritmo
def secante(funcion, aO, bO, i):
#Verificar si se puede aplicar
if funcion(aO)*funcion(bO)>= 0:
print ("No se puede aplicar el método de la secante")
return None

for n in range (i +1):


#calculo de la secante
xn = aO - funcion(aO)*(bO-aO)/(funcion(bO)-funcion(aO))

if funcion(xn) == 0:
return xn

if funcion(aO)*funcion(xn)<0:
bO = xn

else:
aO = xn

return xn

Ejercicio 1. Aleatorio
𝑓(𝑥) = 𝑥 % + 2𝑥 − 8
Si consideramos 50 iteraciones tenemos que:

Encontramos una raíz de 2 entre el valor 0 y 5

Como podemos observar en el siguiente gráfico:


Unidad 2. Solución de ecuaciones no lineales de una variable

Gráfico 6. El gráfico muestra que hay una raíz en 2

Ejercicio 2. Aleatorio
𝑓(𝑥) = 𝑥 , + 2𝑥 % + 10𝑥 − 20

Encontramos una raíz de 1.3688081077456216 entre el valor 0 y 5

Como podemos observar en el siguiente gráfico:


Unidad 2. Solución de ecuaciones no lineales de una variable

Gráfico 7. El gráfico muestra que hay una raíz en 1.3688081077456216

Ejercicio 6.6 del libro Charpa

La raíz más pequeña se encuentra en el intervalo de -5 a 0

Encontramos una raíz de -0.4153555832951783 en ese intervalo

Como podemos observar en los siguientes gráficos:


Unidad 2. Solución de ecuaciones no lineales de una variable

Gráfico 8. El gráfico muestra que hay una raíz de -0.415355583295178

Gráfico 9. Con mayor acercamiento se puede observar el corte en -0.415355583295178


Unidad 2. Solución de ecuaciones no lineales de una variable

Conclusión
Al observar estos ejercicios, podemos concluir que se pueden resolver ecuaciones no
lineales de una variable con diferentes métodos. Así, algunos métodos presentan más
ventajas que otros por la naturaleza de cada función y también por la implementación que
conlleva cada método. El algoritmo de bisección, por ejemplo, es muy utilizado ya que es
muy fácil de entender y de implementar y se puede establecer el error y, por tanto, el número
de iteraciones necesarias para alcanzar este error. Muchos métodos son variaciones de
otros que pueden ayudar en ciertos casos, como es el caso del método de la regla falsa
que utiliza una línea recta para obtener mejores resultados que el de bisección ya que
pretende ser más rápido.
Por otra parte, también los métodos abiertos que requieren de una formula más que de
intervalos son muy utilices para ciertos casos, como el método de Newton-Raphson que es
el más rápido ya que no requiere de un proceso iterativo para determinar el movimiento.
También, permite encontrar raíces a partir de un solo valor inicial.

Referencias
1. Vázquez, L. y Jiménez, S. (2009). Métodos numéricos para la física y la ingeniería
[Versión electrónica]. Recuperado de https://elibro.net/es/ereader/uvm/50154
2. Chapra, S. y Canale, R. (2007). Métodos numéricos para ingenieros [Versión
electrónica]. Recuperado de http://artemisa.unicauca.edu.co/~cardila/Chapra.pdf
3. Serrano, J. (s.f.). Métodos Numéricos: Bisección [Página web]. Recuperado de
https://www.geogebra.org/m/mNY3NPuU

También podría gustarte