Referencia: Burden 9Ed ejemplo 1 p51
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 =0Desarrollo Analítico
Semejante a los métodos anteriores, el método posición falsa, falsa posición, regla falsa o regula falsi, usa un intervalo [a,b] para buscar la raiz.
Se divide el intervalo en dos partes al calcular el punto c que divide al intervalo siguiendo la ecuación:
c = b - f(b) \frac{a-b}{f(a)-f(b)}iteración 1
a = 1 , b = 2 f(1) = (1)^3 + 4(1)^2 -10 = -5 f(2) = (2)^3 + 4(2)^2 -10 = 14 c = 2 - 14 \frac{1-2}{-5-14} = 1.2631 f(1.2631) = (1.2631)^3 + 4(1.2631)^2 -10 = -1.6031el signo de f(c) es el mismo que f(a), se ajusta el lado izquierdo
tramo = |c-a| = | 1.2631 - 1| = 0.2631 a = c = 1.2631iteración 2
a = 1.2631 , b = 2 f(1.2631) = -1.6031 f(2) = 14 c = 2 - 14 \frac{1.2631-2}{-1.6031-14} = 1.3388 f(1.3388) = (1.3388)^3 + 4(1.3388)^2 -10 = -0.4308el signo de f(c) es el mismo que f(a), se ajusta el lado izquierdo
tramo = |c-a| = |1.3388 - 1.2631| = 0.0757 a = c = 1.3388iteración 3
a = 1.3388 , b = 2 f(1.3388) = -0.4308 f(2) = 14 c = 2 - 14 \frac{1.3388-2}{-0.4308-14} = 1.3585 f(1.3585) = (1.3585)^3 + 4(1.3585)^2 -10 = -0.1107el signo de f(c) es el mismo que f(a), se ajusta el lado izquierdo
tramo = |c-a| = |1.3585 - 1.3388| = 0.0197 a = c = 1.3585valores que se resumen en la tabla
a | c | b | f(a) | f(c) | f(b) | tramo |
1 | 1.2631 | 2 | -5 | -1.6031 | 14 | 0.2631 |
1.2631 | 1.3388 | 2 | -1.6031 | -0.4308 | 14 | 0.0757 |
1.3388 | 1.3585 | 2 | -0.4308 | -0.1107 | 14 | 0.0197 |
1.3585 | … | 2 |
se puede contrinuar con las iteraciones como tarea
Algoritmo en Python
Algoritmo básico del video
# Algoritmo Posicion Falsa para raices # busca en intervalo [a,b] import numpy as np # INGRESO fx = lambda x: x**3 + 4*x**2 - 10 a = 1 b = 2 tolera = 0.001 # PROCEDIMIENTO tramo = abs(b-a) while not(tramo<=tolera): fa = fx(a) fb = fx(b) c = b - fb*(a-b)/(fa-fb) fc = fx(c) cambia = np.sign(fa)*np.sign(fc) if (cambia > 0): tramo = abs(c-a) a = c else: tramo = abs(b-c) b = c raiz = c # SALIDA print(raiz)
Algoritmo aumentado para mostrar la tabla de cálculos
# Algoritmo Posicion Falsa para raices # busca en intervalo [a,b] # tolera = error import numpy as np # INGRESO fx = lambda x: x**3 + 4*(x**2) -10 a = 1 b = 2 tolera = 0.0001 # PROCEDIMIENTO tabla = [] tramo = abs(b-a) fa = fx(a) fb = fx(b) while not(tramo<=tolera): c = b - fb*(a-b)/(fa-fb) fc = fx(c) tabla.append([a,c,b,fa,fc,fb,tramo]) cambio = np.sign(fa)*np.sign(fc) if cambio>0: tramo = abs(c-a) a = c fa = fc else: tramo = abs(b-c) b = c fb = fc tabla = np.array(tabla) ntabla = len(tabla) # SALIDA np.set_printoptions(precision=4) for i in range(0,ntabla,1): print('iteración: ',i) print('[a,c,b]: ', tabla[i,0:3]) print('[fa,fc,fb]: ', tabla[i,3:6]) print('[tramo]: ', tabla[i,6]) print('raiz: ',c) print('error: ',tramo)
Observe el número de iteraciones realizadas, hasta presentar el valor de la raiz en 1.3652 con un error de 0.0003166860575976038 en la útlima fila de la tabla. Sin embargo, observe que la tabla solo muestra cálculos de filas completas, el último valor de c y error no se ingresó a la tabla, que se muestra como c y tramo, y es el más actualizado en los cálculos.
iteración: 0 [a,c,b]: [1. 1.2632 2. ] [fa,fc,fb]: [-5. -1.6023 14. ] [tramo]: 1.0 iteración: 1 [a,c,b]: [1.2632 1.3388 2. ] [fa,fc,fb]: [-1.6023 -0.4304 14. ] [tramo]: 0.26315789473684204 iteración: 2 [a,c,b]: [1.3388 1.3585 2. ] [fa,fc,fb]: [-0.4304 -0.11 14. ] [tramo]: 0.0756699440909967 iteración: 3 [a,c,b]: [1.3585 1.3635 2. ] [fa,fc,fb]: [-0.11 -0.0278 14. ] [tramo]: 0.019718502996940224 iteración: 4 [a,c,b]: [1.3635 1.3648 2. ] [fa,fc,fb]: [-2.7762e-02 -6.9834e-03 1.4000e+01] [tramo]: 0.005001098217311428 iteración: 5 [a,c,b]: [1.3648 1.3651 2. ] [fa,fc,fb]: [-6.9834e-03 -1.7552e-03 1.4000e+01] [tramo]: 0.0012595917846898175 iteración: 6 [a,c,b]: [1.3651 1.3652 2. ] [fa,fc,fb]: [-1.7552e-03 -4.4106e-04 1.4000e+01] [tramo]: 0.0003166860575976038 raiz: 1.3652033036626001 error: 7.958577822231305e-05
Ejemplo 2
Referencia: 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) - xRealice 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.