Hallar las raíces de ecuaciones algebraicas y trascendentes empleando el método de bisección código con Python.
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
Para decidir cuando termina el método se debe cumplir la siguiente expresión:
$e_a<e_s$
MÉTODO DE BISECCION
PASO 1: elija valores iniciales inferior $x_l$, y superior $x_u$, que encierren la raízPASO 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
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
se observa que el método converge a 1
el codigo no esta completo
ResponderBorrar