CÓDIGO Método de BISECCION en PYTHON



Hallar las raíces de ecuaciones algebraicas y trascendentes empleando el método de bisección código con Python.

MÉTODO DE BISECCION

PASO 1: elija valores iniciales inferior $x_l$, y superior $x_u$, que encierren la raíz
PASO 2: Una aproximación de la raíz $x_r$, se determina mediante:
$x_r=\frac{x_l+x_u}{2}$
PASO 3: Realizar las siguientes evaluaciones para determinar en que subintervalo se encuentre la raiz:
+ Si $f(x_l)f(x_r)<0$, entonces la raíz se encuentra dentro del subintervalo inferior.haga $x_u=x_r$, y vuelva al paso 2
+ si $f(x_l)f(x_r)>0$,entonces la raíz se encuentra dentro del subintervalo superior, haga $x_l=x_r$, y vuelva al paso 2
+ si $f(x_l)f(x_r)=0$, la raíz es igual a $x_r$, termina el calculo

Error relativo porcentual $e_a$ y tolerancia admisible $e_s$

$e_a= |\frac{x_rnuevo-x_ranterior}{x_rnuevo}|x100\%$
Para decidir cuando termina el método se debe cumplir la siguiente expresión:
$e_a<e_s$

CÓDIGO

GRÁFICA

import matplotlib as mpl #importamos matplotlib y renombramos como mpl
#rcParams personalizar propiedades de la grafica 
mpl.rcParams['figure.dpi'] = 100 # puntos por pulgada
mpl.rcParams['text.usetex'] = True #permite usar Tex en nuestra grafica
mpl.rcParams['savefig.dpi'] = 150 #puntos por pulgada con lo que se guarda la grafica

import matplotlib.pyplot as plt #importamos pyplot y renombramos como plt
import numpy as np #importamos numpy y renombramos como np

x = np.linspace(0, 2, 200) # 200 numeros en el intervalo de 0 a 2

plt.plot(x,x**10-1)
plt.xlabel('x') #etiqueta del eje x
plt.ylabel('y') #etiqueta del eje y
plt.title('Grafica de $x^{10}-1$') #titulo de la grafica

plt.grid(True) #muestra la rejilla
plt.axis([0, 2, -2, 20]) # intervalos de los ejes de la grafica
plt.savefig("Ejemplo1.png") #guarda la grafica 
plt.show()#muestra la grafica


grafica de la funcion


MÉTODO BISECCIÓN

# -*- coding: utf-8 -*-
"""
Created on Mon May  4 09:19:11 2020

@author: ygyel
"""

import sympy as sp
import pandas as pd
import numpy as np
#funcion que se evaluara
x=sp.symbols('x') #declaramos que x es un simbolo
func=x**10-1 #funcion que evaluaremos
#metodo de la biseccion
def Bisec(func,xl,xu,es):
    itera=0 
    m_itera=np.array([]) #matriz q almacena valores de itera
    m_xl=np.array([])   #matriz q alamacena valores de xl
    m_xu=np.array([])   #matriz q alamcena valores de xu
    xr=0
    m_xr=np.array([])   #matriz q almacena valroes de xr
    ea=100 
    m_ea=np.array([])   #matriz q alamcena valore s de ea
    fl=func.evalf(subs={x: xl}) #reamplazmos x por xl y evaluamos la funcion
    #incio del bucle
    while ea>es :
        
        xanterior=xr
        xr=(xl+xu)/2
        fr=func.evalf(subs={x:xr})
        itera=itera+1
        if xr != 0:
            ea=abs((xr-xanterior)/xr)*100
        test=fl*fr
        #agregamos valores a las matrices vacias
        m_itera=np.append(m_itera,itera)
        m_xl=np.append(m_xl,xl)
        m_xu=np.append(m_xu,xu)
        m_xr=np.append(m_xr,xr)
        m_ea=np.append(m_ea,ea)                     
        
        if test < 0 :
            xu=xr
        elif test >0:
            xl=xr
            fl=fr
        else:
            ea=0
    #representamos datos en pandas
    iteracion=pd.Series(m_itera,name="Iteracion")
    xl=pd.Series(m_xl,name="xl")
    xu=pd.Series(m_xu,name="xu")
    xr=pd.Series(m_xr,name="xr")
    ea=pd.Series(m_ea,name="ea%")
    tabla=pd.concat([iteracion,xl,xu,xr,ea],axis=1) #unimos en columnas
    return tabla
a=Bisec(func,0,0.1,0.01)
a


RESULTADO

resultado del metodo
se observa que el método converge a 1

Comentarios

Publicar un comentario