El método de la falsa posición modificado evita que uno de los límites del intervalo permanezca constante.
Si $f(x_{inferior})$ permanece constante se usa su promedio
grafico
Interpolando los puntos $(x_{inferior}, \frac{f(x_{inferior})}{2})$ y $(x_{superior}, f(x_{superior}))$
\begin{equation*} \frac{f(x_{superior}) - \frac{f(x_{inferior})}{2}}{x_{superior} - x_{inferior}} = \frac{f(x_{superior}) - y}{x_{superior} - x} \end{equation*}Según el gráfico $y = 0$ y $x \approx x_{raiz}$
\begin{equation*} \frac{f(x_{superior}) - \frac{f(x_{inferior})}{2}}{x_{superior} - x_{inferior}} = \frac{f(x_{superior})}{x_{superior} - x_{raiz}} \end{equation*}Despejando $x_{raiz}$
\begin{equation} x_{raiz} = x_{superior} - \frac{x_{superior} - x_{inferior}}{2 f(x_{superior}) - f(x_{inferior})} 2 f(x_{superior}) \end{equation}Si $f(x_{superior})$ permanece constante se usa su promedio
grafico
Interpolando los puntos $(x_{inferior}, f(x_{inferior}))$ y $(x_{superior}, \frac{f(x_{superior})}{2})$
\begin{equation*} \frac{\frac{f(x_{superior})}{2} - f(x_{inferior})}{x_{superior} - x_{inferior}} = \frac{\frac{f(x_{superior})}{2} - y}{x_{superior} - x} \end{equation*}Según el gráfico $y = 0$ y $x \approx x_{raiz}$
\begin{equation*} \frac{\frac{f(x_{superior})}{2} - f(x_{inferior})}{x_{superior} - x_{inferior}} = \frac{\frac{f(x_{superior})}{2}}{x_{superior} - x_{raiz}} \end{equation*}Despejando $x_{raiz}$
\begin{equation} x_{raiz} = x_{superior} - \frac{x_{superior} - x_{inferior}}{f(x_{superior}) - 2 f(x_{inferior})} f(x_{superior}) \end{equation}Algoritmo
la raiz verdadera está en el intervalo [x_inferior, x_superior]
si f(x_inferior) es constante
f(x_inferior) = f(x_inferior)/2
si f(x_superior) es constante
f(x_superior) = f(x_superior)/2
calcular x_raiz
si f(x_inferior)*f(x_raiz) < 0
la raiz verdadera está en el intervalo [x_inferior, x_raiz]
calcular x_raiz
si f(x_inferior)*f(x_raiz) > 0
la raiz verdadera está en el intervalo [x_raiz, x_superior]
calcular x_raiz
si f(x_inferior)*f(x_raiz) = 0
se encontró la raiz verdadera
Encontrar la raiz de
\begin{equation*} y = x^{3} + 4 x^{2} - 10 \end{equation*}la raíz posiblemente se encuentre en $[x_{l}, x_{u}] = [1,2]$
Intervalo actual
\begin{equation*} [x_{l_{0}}, x_{u_{0}}] = [1,2] \end{equation*}Ordenadas en el intervalo actual
\begin{align*} f(x_{l_{0}}) &= f(1) = -5 \\ f(x_{u_{0}}) &= f(2) = 14 \end{align*}Raíz aproximada
\begin{equation*} x_{r_{0}} = x_{u_{0}} - \frac{x_{u_{0}} - x_{l_{0}}}{f(x_{u_{0}}) - f(x_{l_{0}})} f(x_{u_{0}}) = 2 - \frac{2 - 1}{14 - (-5)} 14 = 1.263158 \end{equation*}Siguiente intervalo
\begin{equation*} [x_{l_{1}}, x_{u_{1}}] = \left \{ \begin{array}{llcll} si & f(x_{l_{0}}) \cdot f(x_{r_{0}}) = f(1) \cdot f(1.263158) < 0 & \longrightarrow & [x_{l_{0}}, x_{r_{0}}] = [1, 1.263158] & \\ si & f(x_{l_{0}}) \cdot f(x_{r_{0}}) = f(1) \cdot f(1.263158) > 0 & \longrightarrow & [x_{r_{0}}, x_{u_{0}}] = [1.263158, 2] & \checkmark \end{array} \right . \end{equation*}Error relativo
\begin{equation*} e_{r} = ? \end{equation*}Intervalo actual
\begin{equation*} [x_{l_{1}}, x_{u_{1}}] = [1.263158, 2] \end{equation*}Ordenadas en el intervalo actual
\begin{align*} f(x_{l_{1}}) &= \left \{ \begin{array}{llcll} si & f(x_{l_{1}}) = f(x_{l_{0}}) & \longrightarrow & \frac{f(x_{l_{1}})}{2} & \\ si & f(x_{l_{1}}) \neq f(x_{l_{0}}) & \longrightarrow & f(x_{l_{1}}) = f(1.263158) = -1.602273 & \checkmark \end{array} \right . \\ f(x_{u_{1}}) &= \left \{ \begin{array}{llcll} si & f(x_{u_{1}}) = f(x_{u_{0}}) & \longrightarrow & \frac{f(x_{u_{1}})}{2} = \frac{f(2)}{2} = 7 & \checkmark \\ si & f(x_{u_{1}}) \neq f(x_{u_{0}}) & \longrightarrow & f(x_{u_{1}}) & \end{array} \right . \end{align*}Raíz aproximada
\begin{equation*} x_{r_{1}} = x_{u_{1}} - \frac{x_{u_{1}} - x_{l_{1}}}{f(x_{u_{1}}) - f(x_{l_{1}})} f(x_{u_{1}}) = 2 - \frac{2 - 1.263158}{7 - (-1.602273)} 7 = 1.400403 \end{equation*}Siguiente intervalo
\begin{equation*} [x_{l_{2}}, x_{u_{2}}] = \left \{ \begin{array}{llcll} si & f(x_{l_{1}}) \cdot f(x_{r_{1}}) = f(1.263158) \cdot f(1.400403) < 0 & \longrightarrow & [x_{l_{1}}, x_{r_{1}}] = [1.263158, 1.400403] & \checkmark \\ si & f(x_{l_{1}}) \cdot f(x_{r_{1}}) = f(1.263158) \cdot f(1.400403) > 0 & \longrightarrow & [x_{r_{1}}, x_{u_{1}}] = [1.400403, 2] & \end{array} \right . \end{equation*}Error relativo
\begin{equation*} e_{r} = \bigg|\frac{x_{r_{1}} - x_{r_{0}}}{x_{r_{1}}}\bigg| \times 100\% = \bigg|\frac{1.400403 - 1.263158}{1.400403}\bigg| \times 100\% = 9.80\% \end{equation*}Intervalo actual
\begin{equation*} [x_{l_{2}}, x_{u_{2}}] = [1.263158, 1.400403] \end{equation*}Ordenadas en el intervalo actual
\begin{align*} f(x_{l_{2}}) &= \left \{ \begin{array}{llcll} si & f(x_{l_{2}}) = f(x_{l_{1}}) & \longrightarrow & \frac{f(x_{l_{2}})}{2} = \frac{f(1.263158)}{2} = -0.801137 & \checkmark \\ si & f(x_{l_{2}}) \neq f(x_{l_{1}}) & \longrightarrow & f(x_{l_{2}}) & \end{array} \right . \\ f(x_{u_{2}}) &= \left \{ \begin{array}{llcll} si & f(x_{u_{2}}) = f(x_{u_{1}}) & \longrightarrow & \frac{f(x_{u_{2}})}{2} & \\ si & f(x_{u_{2}}) \neq f(x_{u_{1}}) & \longrightarrow & f(x_{u_{2}}) = f(1.400403) = 0.590885 & \checkmark \end{array} \right . \end{align*}Raíz aproximada
\begin{equation*} x_{r_{2}} = x_{u_{2}} - \frac{x_{u_{2}} - x_{l_{2}}}{f(x_{u_{2}}) - f(x_{l_{2}})} f(x_{u_{2}}) = 1.400403 - \frac{1.400403 - 1.263158}{0.590885 - (-0.801137)} 0.590885 = 1.342145 \end{equation*}Siguiente intervalo
\begin{equation*} [x_{l_{3}}, x_{u_{3}}] = \left \{ \begin{array}{llcll} si & f(x_{l_{2}}) \cdot f(x_{r_{2}}) = f(1.263158) \cdot f(1.342145) < 0 & \longrightarrow & [x_{l_{2}}, x_{r_{2}}] = [1.263158, 1.342145] & \\ si & f(x_{l_{2}}) \cdot f(x_{r_{2}}) = f(1.263158) \cdot f(1.342145) > 0 & \longrightarrow & [x_{r_{2}}, x_{u_{2}}] = [1.342145, 1.400403] & \checkmark \end{array} \right . \end{equation*}Error relativo
\begin{equation*} e_{r} = \bigg|\frac{x_{r_{2}} - x_{r_{1}}}{x_{r_{2}}}\bigg| \times 100\% = \bigg|\frac{1.342145 - 1.400403}{1.342145}\bigg| \times 100\% = 4.34\% \end{equation*}Intervalo actual
\begin{equation*} [x_{l_{3}}, x_{u_{3}}] = [1.342145, 1.400403] \end{equation*}Ordenadas en el intervalo actual
\begin{align*} f(x_{l_{3}}) &= \left \{ \begin{array}{llcll} si & f(x_{l_{3}}) = f(x_{l_{2}}) & \longrightarrow & \frac{f(x_{l_{3}})}{2} & \\ si & f(x_{l_{3}}) \neq f(x_{l_{2}}) & \longrightarrow & f(x_{l_{3}}) = f(1.342145) = -0.376910 & \checkmark \end{array} \right . \\ f(x_{u_{3}}) &= \left \{ \begin{array}{llcll} si & f(x_{u_{3}}) = f(x_{u_{2}}) & \longrightarrow & \frac{f(x_{u_{3}})}{2} = \frac{f(1.400403)}{2} = 0.295443 & \checkmark \\ si & f(x_{u_{3}}) \neq f(x_{u_{2}}) & \longrightarrow & f(x_{u_{3}}) & \end{array} \right . \end{align*}Raíz aproximada
\begin{equation*} x_{r_{3}} = x_{u_{3}} - \frac{x_{u_{3}} - x_{l_{3}}}{f(x_{u_{3}}) - f(x_{l_{3}})} f(x_{u_{3}}) = 1.400403 - \frac{1.400403 - 1.342145}{0.295443 - (-0.376910)} 0.295443 = 1.374803 \end{equation*}Siguiente intervalo
\begin{equation*} [x_{l_{4}}, x_{u_{4}}] = \left \{ \begin{array}{llcll} si & f(x_{l_{3}}) \cdot f(x_{r_{3}}) = f(1.342145) \cdot f(1.374803) < 0 & \longrightarrow & [x_{l_{3}}, x_{r_{3}}] = [1.342145, 1.374803] & \checkmark \\ si & f(x_{l_{3}}) \cdot f(x_{r_{3}}) = f(1.342145) \cdot f(1.374803) > 0 & \longrightarrow & [x_{r_{3}}, x_{u_{3}}] = [1.374803, 1.400403] & \end{array} \right . \end{equation*}Error relativo
\begin{equation*} e_{r} = \bigg|\frac{x_{r_{3}} - x_{r_{2}}}{x_{r_{3}}}\bigg| \times 100\% = \bigg|\frac{1.374803 - 1.342145}{1.374803}\bigg| \times 100\% = 2.38\% \end{equation*}Seudocódigo para calcular la raíz
function raiz(f(x), x_l, x_u)
x_r = x_u - f(x_u)*(x_u - x_l)/f(x_u) - f(x_l)
return x_r
end function
Seudocódigo para calcular la raíz modificada
function raiz_modificada(x_l, x_u, y_l, y_u)
x_r = x_u - y_u*(x_u - x_l)/(y_u - y_l)
return x_r
end function
Seudocódigo para determinar el siguiente intervalo
function intervalo_de_raiz(f(x), x_l, x_u, y_l, y_u)
x_r = raiz_modificada(x_l, x_u, y_l, y_u)
if y_l*f(x_r) < 0
x_u = x_r
end if
if y_l*f(x_r) > 0
x_l = x_r
end if
return x_l, x_u
end function
In [1]:
def raiz(f, x_l, x_u):
x_r = x_u - (f(x_u)*(x_u - x_l))/(f(x_u) - f(x_l))
return x_r
def raiz_modificada(x_l, x_u, y_l, y_u):
x_r = x_u - (y_u*(x_u - x_l))/(y_u - y_l)
return x_r
def intervalo_de_raiz(f, x_l, x_u, y_l, y_u):
x_r = raiz_modificada(x_l, x_u, y_l, y_u)
if y_l*f(x_r) < 0:
x_u = x_r
if y_l*f(x_r) > 0:
x_l = x_r
return x_l, x_u
function falsa_posicion_modificada(f(x), x_inferior, x_superior)
f_inferior_actual = f(x_inferior)
f_superior_actual = f(x_superior)
x_raiz_actual = raiz(f, x_inferior, x_superior)
error_permitido = 0.000001
while(True)
f_inferior_anterior = f_inferior_actual
f_superior_anterior = f_superior_actual
x_raiz_anterior = x_raiz_actual
x_inferior, x_superior = intervalo_de_raiz(f(x), x_inferior, x_superior,f_inferior_actual,f_superior_actual)
f_inferior_actual = f(x_inferior)
f_superior_actual = f(x_superior)
if f_inferior_actual = f_inferior_anterior
f_inferior_actual = f_inferior_actual/2
end if
if f_superior_actual = f_superior_anterior
f_superior_actual = f_superior_actual/2
end if
x_raiz_actual = raiz_modificada(x_inferior, x_superior, f_inferior_actual, f_superior_actual)
if x_raiz_actual != 0:
error_relativo = abs((x_raiz_actual - x_raiz_anterior)/x_raiz_actual)*100
end if
if error_relativo < error_permitido
exit
end if
end while
return x_raiz_actual
end function
o tambien
function falsa_posicion_modificada(f(x), x_inferior, x_superior)
f_inferior_actual = f(x_inferior)
f_superior_actual = f(x_superior)
x_raiz_actual = raiz(f, x_inferior, x_superior)
for i to iteracion_maxima do
f_inferior_anterior = f_inferior_actual
f_superior_anterior = f_superior_actual
x_raiz_anterior = x_raiz_actual
x_inferior, x_superior = intervalo_de_raiz(f(x), x_inferior, x_superior,f_inferior_actual,f_superior_actual)
f_inferior_actual = f(x_inferior)
f_superior_actual = f(x_superior)
if f_inferior_actual = f_inferior_anterior
f_inferior_actual = f_inferior_actual/2
end if
if f_superior_actual = f_superior_anterior
f_superior_actual = f_superior_actual/2
end if
x_raiz_actual = raiz_modificada(x_inferior, x_superior, f_inferior_actual, f_superior_actual)
end for
return x_raiz_actual
end function
In [2]:
def falsa_posicion_modificada(f, x_inferior, x_superior):
print("{0:2s}\t{1:12s}\t{2:12s}\t{3:12s}\t{4:16s}".format(' i', 'x inferior', 'x superior', 'raiz', 'error relativo %'))
f_inferior_actual = f(x_inferior)
f_superior_actual = f(x_superior)
x_raiz_actual = raiz(f, x_inferior, x_superior)
i = 0
print("{0:2d}\t{1:12.10f}\t{2:12.10f}\t{3:12.10f}\t{4:16s}".format(i, x_inferior, x_superior, x_raiz_actual, '????????????????'))
error_permitido = 0.000001
while True:
f_inferior_anterior = f_inferior_actual
f_superior_anterior = f_superior_actual
x_raiz_anterior = x_raiz_actual
x_inferior, x_superior = intervalo_de_raiz(f, x_inferior, x_superior,f_inferior_actual,f_superior_actual)
f_inferior_actual = f(x_inferior)
f_superior_actual = f(x_superior)
if f_inferior_actual == f_inferior_anterior:
f_inferior_actual = f_inferior_actual/2
if f_superior_actual == f_superior_anterior:
f_superior_actual = f_superior_actual/2
x_raiz_actual = raiz_modificada(x_inferior, x_superior, f_inferior_actual, f_superior_actual)
if x_raiz_actual != 0:
error_relativo = abs((x_raiz_actual - x_raiz_anterior)/x_raiz_actual)*100
i = i + 1
print("{0:2d}\t{1:12.10f}\t{2:12.10f}\t{3:12.10f}\t{4:16.13f}".format(i, x_inferior, x_superior, x_raiz_actual, error_relativo))
if (error_relativo < error_permitido) or (i>=20):
break
print('\nx =', x_raiz_actual)
In [3]:
def f(x):
y = x**3 + 4*x**2 - 10
return y
In [4]:
intervalo_de_raiz(f, 1, 2, f(1), f(2))
Out[4]:
In [5]:
intervalo_de_raiz(f, 1.263157894736842, 2, f(1.263157894736842), f(2))
Out[5]:
In [6]:
falsa_posicion_modificada(f,1,2)
In [7]:
from math import sin, cos
def g(x):
y = sin(10*x) + cos(3*x)
return y
In [8]:
intervalo_de_raiz(g, 12, 16, g(12), g(16))
Out[8]:
In [9]:
intervalo_de_raiz(g, 14.730875967228018, 16, f(14.730875967228018), f(16))
Out[9]:
In [10]:
falsa_posicion_modificada(g,12,16)
In [11]:
falsa_posicion_modificada(g,14,16)