Está en la página 1de 5

Método hibrido newton biseccion

#importando paquete para usar en este caso funciones trigonometricas


import math

#inicio pantalla de salida de datos

print("\n METODO HIBRIDO NEWTON-BISECCION")


print(" ================================\n")
print("La funcion dada es--> 0.2sen(16x) - x + 1.75\n")
print("Digite las raices aproximadas de la funcion:\n")

a=float(input("Digite en valor inferior a(recomendacion-->digite


aprox.1):"))
b=float(input("Digite en valor superior b(recomendacion-->digite
aprox.3):"))

c = (a + b) / 2 #Para obtener el valor de "c" a partir de "a" y "b"


#Creando nuestras funciones

def g(b):
g=0.2*(math.sin(16*b)) - b + 1.75
return g

def dg(b):
dg=3.2*(math.cos(16*b))-1
return dg

def f(a):
f=0.2*(math.sin(16*a)) - a + 1.75
return f

def h(c):
h=0.2*(math.sin(16*c)) - c + 1.75
return h

print(" \nRESULTADOS:")
print("============\n")
#Creando funcion principal

def hib_new_bis(f,g,h,dg,a,b,c,tol):
error = 10
n=0
i=0
while error > tol:
valor = f(a) * h(c)
if valor < 0:
a=a
b=c
c = (a + b) / 2
else:
a=c
b=b
c = (a + b) / 2
error=abs(c-a)/c*100
i+=1
print(f"iteracion N° :{i}, por el metodo de biseccion, raiz =
{c:.8f}")

if (c>=a or c<=b):
while error > tol:
bi = b - g(b) / dg(b)
error = abs((bi - b) * 100 / bi)
b = bi
n += 1
print(f"iteracion N° :{i+n}, por el metodo de newton R,
raiz = {b:.8f}")

else:
while error > tol:
valor = f(a) * h(c)

if valor < 0:
a = a
b = c
c = (a + b) / 2
else:
a = c
b = b
c = (a + b) / 2
error = abs(c - a) / c * 100
i += 1
print("\n RESUMEN DE LOS RESULTADOS:")
print("===========================\n")
print(f"El error es de --> {error:.5f}%")
print(f"Cantidad de iteraciones realizadas --> {n + i} iteraciones")
print(f"Raiz de la funcion = {b:.8f}")

#Imprimniendo nuestra funcion principal

hib_new_bis(f,g,h,dg,a,b,c,tol=1e-40)

Método hibrido secante bisección


#iniciando pantalla de salida de datos

print("\n METODO HIBRIDO SECANTE-BISECCION")


print(" ================================\n")
print("La funcion dada es--> x^20 - 1\n")
print("Digite las raices aproximadas de la funcion:\n")
print("Nota: Debido a que la funcion presenta dos raices\n")
print("-> si se escoge aproximaciones positivas se hallara la raiz
positiva")
print("-> si se escoge aproximaciones negativas se hallara la raiz
negativa\n")

x=float(input("Digite en valor de x(recomendacion-->digite aprox:0.2 ó


sino -3):"))
xi=float(input("Digite en valor de xi(recomendacion-->digite aprox:3 ó
sino -0.2):"))

xo = (x + xi) / 2 #Para obtener el valor de "xo" a partir de "x" y "xi"

#Creando nuestras funciones

def f(x):
f=x**20-1
return f
def g(xi):
g=xi**20-1
return g

def h(xo):
h=xo**20-1
return h

#Creando funcion principal

def hib_sec_bis(f,g,h,xi,x,xo,tol):
n=0
i=0
error=10

while error > tol:

valor = f(x) * h(xo)

if valor < 0:
x = xo
xi = xi
xo = (x + xi) / 2

else:
x = x
xi = xo
xo = (x + xi) / 2

error = abs((xo - x) / xo * 100)


n += 1
if valor>0:

while error > tol:


xii =x-f(x)*(xi-x)/(g(xi)-f(x))
error=abs((xii-x)/xii*100)
x=xii
i+=1
else:
continue
print("\n RESULTADOS")
print(" ==========\n")
print(f"El error es de --> {error}%")
print(f"iteraciones realizadas = {n+i} iteraciones")
if xii>0:
print(f"Raiz positiva de la funcion = {xii:.12f}")
else:
print(f"Raiz negativa de la funcion :{xii:.12f}")

#Imprimiendo funcion principal

hib_sec_bis(f,g,h,xi,x,xo,tol=1e-40)

También podría gustarte