Вы находитесь на странице: 1из 7

Método de la Falsa Posición

Manuel Merino

6 de mayo de 2018

1. MÉTODO DE LA FALSA POSICIÓN


Importamos los módulos a usar

In [2]: %matplotlib inline

In [3]: import matplotlib.pyplot as plt


import numpy as np
import pandas as pd

LISTA DE FUNCIONES

In [4]: def sen(x):


return np.sin(x)

def cos(x):
return np.cos(x)

def tan(x):
return np.tan(x)

def cot(x):
return np.cot(x)

def sec(x):
return np.sec(x)

def csc(x):
return np.csc(x)

def pot(x,a):
return np.power(x,a)

def exp(x):
return np.exp(x)

def ln(x):
return np.log(x)

1
def log(x):
return np.log10(x)

def logb(x,base):
if( x > 0 and base > 0 and base != 1 ):
retorna = ln(x)/ln(base)
else:
if( x <= 0 ):
retorna = 'Ingrese un argumento positivo'
elif( base <= 0 or base == 1 ):
retorna = 'La base debe ser positiva y diferente de 1'
return retorna

def raizCuad(x):
if(x >= 0):
return np.sqrt(x)
else:
return 'Ingrese un valor positivo'

Definimos funciones

In [5]: def Pendiente(x1, x2, f):


if (x1 == x2):
return 'Ingrese dos puntos distintos'
else:
m = (f(x2) - f(x1))/(x2 - x1)
return m

In [6]: def CorteEjeX(x1, x2, f):


m = Pendiente(x1, x2, f)
x = x1 - (1/m)*f(x1)
return x

In [7]: def Menor(x1, x2, punto):


menor = x1

if(menor >= x2):


menor = x2

if(menor >= punto):


menor = punto
return menor

In [8]: def Mayor(x1, x2, punto):


mayor = x1

if(mayor <= x2):


mayor = x2

2
if(mayor <= punto):
mayor = punto
return mayor

In [9]: def GraficaSecante(x1, x2, f):


m = Pendiente(x1, x2, f)
X1 = np.linspace(a, b, 100)
punto = CorteEjeX(x1, x2, f)
mayor = Mayor(x1,x2, punto)
menor = Menor(x1,x2, punto)
X = np.linspace(menor, mayor, 100)
Y1 = f(X1)
Y2 = m*( X - x1 ) + f(x1)
ejeX = 0*X
plt.plot(X1, Y1, 'blue')
plt.plot(X, Y2, 'red')
plt.plot(X, ejeX, 'black')
plt.show()

Método de la Secante

In [10]: def FalsaPosicion(a, b, Tol, f):


FA = f(a)
FB = f(b)
p = CorteEjeX(a, b, f)
FP = f(p)
Sol = [p]
i = 0
ret = 'si'
while(True):
if( FA*FP < 0 ):
b = p
p = CorteEjeX(a, b, f)
FB = f(b)
FP = f(p)
elif( FP*FB < 0 ):
a = p
p = CorteEjeX(a, b, f)
FA = f(a)
FP = f(p)
else:
ret = 'no'
retorna ='No se pude realizar el método de la Falsa Posición'

Sol = Sol + [p]

if( abs(Sol[i+1] - Sol[i]) <= Tol ):

3
break
i = i + 1

if( ret == 'si' ):


return Sol
else:
return retorna

In [11]: def GraficaFuncion(a, b, fun):


dominio = np.linspace(a, b, 100)
rango = fun(dominio)
ejeX = 0*dominio
plt.plot(dominio, rango, 'blue')
plt.plot(dominio, ejeX, 'black')
plt.show()

EJEMPLO
Hallar una raíz de
f ( x ) = x5 − 17x4 − 15x2 + 12x − 1
Definimos la función

In [12]: def fun1(x):


return pot(x, 5) - 17*pot(x, 4) - 15*pot(x, 2) + 12*x - 1

Graficamos la función en [−2, 2]

In [14]: GraficaFuncion(-2, 2, fun1)

4
Graficando ahora en el intervalo [−1, 1]

In [15]: GraficaFuncion(-1, 1, fun1)

Observamos que existen dos raíces, nos concentraremos en la que esta mas cerca al cero y
daremos dos puntos, a = 0 y b = 0,5

In [17]: GraficaFuncion(0, 0.5, fun1)

5
Usando el método de la falsa posición

In [18]: sol = FalsaPosicion(0, 0.5, 0.000000000000001, fun1)

In [19]: sol

Out[19]: [0.41025641025641024,
0.2127376404876675,
0.11564291577189324,
0.09766345865271432,
0.09506333165651867,
0.09470121018780657,
0.09465104246269138,
0.09464409738425632,
0.09464313602445242,
0.09464300295184033,
0.09464298453180066,
0.09464298198208161,
0.09464298162914715,
0.09464298158029363,
0.09464298157353128,
0.09464298157259522,
0.09464298157246566,
0.09464298157244774,
0.09464298157244526,
0.09464298157244493]

6
En este caso la función creada nos retorna toda la lista. Esto lo hice con la intención de poder
usar un dataFrame

In [41]: sol_resp = sol

In [42]: for i in range(0, len(sol_resp)):


sol_resp[i] = str(sol_resp[i])

In [43]: sol_resp

Out[43]: ['1',
'-7.0',
'1.048780487804878',
'1.0964752244034166',
'2.387451498277044',
'1.34577221980742',
'1.4895380907596238',
'1.6566513543103543',
'1.6136809232458724',
'1.6178975248836212',
'1.618034482694106',
'1.618033988693999',
'1.618033988749895',
'1.618033988749895']

En efecto, ahora todos nuestras aproximaciones con de tipo string. Lo que procede acontinua-
ción es mostrar esta lista de string en el dataFrame

In [44]: datos1 = {r'$X_{i}$': sol_resp}


pd.DataFrame(datos1, columns=[r'$X_{i}$'])

Out[44]: $X_{i}$
0 1
1 -7.0
2 1.048780487804878
3 1.0964752244034166
4 2.387451498277044
5 1.34577221980742
6 1.4895380907596238
7 1.6566513543103543
8 1.6136809232458724
9 1.6178975248836212
10 1.618034482694106
11 1.618033988693999
12 1.618033988749895
13 1.618033988749895

Вам также может понравиться