2.4.1 Posición Falsa Ejemplo01

Referencia: Burden ejemplo 1 p.51/pdf.61

La ecuación mostrada tiene una raiz en [1,2], ya que f(1)=-5 y f(2)=14. Muestre los resultados parciales del algoritmo de la posición falsa con una tolerancia de 0.0001

f(x) = x^3 + 4x^2 -10 =0

Algoritmo:

# Algoritmo de falsa posicion para raices
# Los valores de [a,b] son seleccionados
# desde la gráfica de la función
# error = tolera

import numpy as np

def posicionfalsa_tabla(fx,a,b,tolera):
    fa = fx(a)
    fb = fx(b)
    c = b - fb*(a-b)/(fa-fb)
    fc = fx(c)
    tramo = abs(c-a)
    
    tabla = [[a,c,b,fa, fc, fb, tramo]]
    while (tramo > tolera):
        
        cambia = np.sign(fa)*np.sign(fc)
        if (cambia > 0):
            tramo = abs(c-a)
            a=c
        else:
            tramo = abs(b-c)
            b=c
        fa = fx(a)
        fb = fx(b)
        c = b - fb*(a-b)/(fa-fb)
        fc = fx(c)

        tabla.append([a,c,b,fa, fc, fb, tramo])
        
    tabla = np.array(tabla)
    
    return(tabla)


# PROGRAMA ############################
# INGRESO
fx = lambda x: x**3 + 4*x**2 - 10

a = 1 ; b = 2
tolera = 0.001
tramos = 100

# PROCEDIMIENTO
tabla = posicionfalsa_tabla(fx,a,b,tolera)
n=len(tabla)
raiz = tabla[n-1,1]

xi = np.linspace(a,b,tramos+1)
fi = fx(xi)
pendiente = (fx(b)-fx(a))/(b-a)
desde = fx(a) - pendiente*a
gi = desde + pendiente* xi 


# SALIDA
np.set_printoptions(precision=4)
for i in range(0,n,1):
    print('i =  ',i)
    print('   [a,c,b]: ', tabla[i,0:3])
    print('[fa,fc,fb]: ', tabla[i,3:6])
    print('     tramo: ', tabla[i,6]) 
print('raiz:', raiz)

Observe el número de iteraciones realizadas.
Resultado:

i =   0
   [a,c,b]:  [ 1.      1.2632  2.    ]
[fa,fc,fb]:  [ -5.      -1.6023  14.    ]
     tramo:  0.263157894737
i =   1
   [a,c,b]:  [ 1.2632  1.3388  2.    ]
[fa,fc,fb]:  [ -1.6023  -0.4304  14.    ]
     tramo:  0.075669944091
i =   2
   [a,c,b]:  [ 1.3388  1.3585  2.    ]
[fa,fc,fb]:  [ -0.4304  -0.11    14.    ]
     tramo:  0.0197185029969
i =   3
   [a,c,b]:  [ 1.3585  1.3635  2.    ]
[fa,fc,fb]:  [ -0.11    -0.0278  14.    ]
     tramo:  0.00500109821731
i =   4
   [a,c,b]:  [ 1.3635  1.3648  2.    ]
[fa,fc,fb]:  [ -2.7762e-02  -6.9834e-03   1.4000e+01]
     tramo:  0.00125959178469
i =   5
   [a,c,b]:  [ 1.3648  1.3651  2.    ]
[fa,fc,fb]:  [ -6.9834e-03  -1.7552e-03   1.4000e+01]
     tramo:  0.000316686057598
raiz: 1.36512371788
>>> 

Ejemplo 2 (Burden ejemplo 3 p.74/pdf.84)

Con el método de la posición falsa, determine la cantidad de iteraciones necesarias para resolver:

f(x) = \cos (x) - x

Realice una tabla que muestre: [ i, a, b, c, f(c) ].
Seleccióne el rango [a,b] usando una gráfica y compruebe los resultados.
Compare con otros métodos para encontrar raíces.