Método de la regla Falsa
Método de regula falsi o falsa posición.
Esta técnica es semejante a la bisección, salvo que la siguiente iteración se toma en la intersección de una recta entre el par de valores x y el eje x, en vez de en el punto medio. De esta manera se obtiene convergencia más rápida que con la bisección, pero por otra parte obtenemos un algoritmo más complicado.
| (Chapra & Canale, 2007). |
Determinar una raíz \(f(x)=0\) dados valores iniciales \(x_0 y x_1\) y que contienen a la raíz de la función, es decir que cumplen el teorema de Bolzano
Algoritmo del método de la regla falsa.
Hacer
Repeat
\(x_2=x_1-f(x_1)\frac{x_0-x_1}{f(x_0)-f(x_1)}\)
if \(f(x_2)\) es de signo opuesto a \(f(x_0)\)
Hacer \(x_1=x_2\)
Else
Hacer \(x_0=x_2\)
Endif
Until \(|f(x_2)|<tolerancia\)
Aplicar el método de la falsa posición para resolver la siguiente ecuación:
\(3x+sin(x)-e^x=0\) con \(x_0=0\) y \(x_1=1\)
iteración | x0 | x1 | f(x0) | f(x1) | x2 | f(x2) |
1 | 0.000000 | 1.000000 | -1.000000 | 1.123189 | 0.470990 | 0.265159 |
2 | 0.000000 | 0.470990 | -1.000000 | 0.265159 | 0.372277 | 0.029534 |
3 | 0.000000 | 0.372277 | -1.000000 | 0.029534 | 0.361598 | 0.002941 |
4 | 0.000000 | 0.361598 | -1.000000 | 0.002941 | 0.360537 | 0.000289 |
5 | 0.000000 | 0.360537 | -1.000000 | 0.000289 | 0.360433 | 0.000028 |
6 | 0.000000 | 0.360433 | -1.000000 | 0.000028 | 0.360423 | 0.000003 |
| Grafica generada en GeoGebra. |
Puedes probar el siguiente código de Matlab y verificar los resultados del ejemplo mostrado.
clear all clc format short; %format long; x_0 = input('Introduzca el valor de x_0: '); x_1 = input('Introduzca el valor de x_1: '); cont = input('Introduzca el número de iteraciones cont: '); fun = input('Introduzca la funcion f(x)=','s'); f = inline(fun); x_anterior = x_1; % Inicializamos x_anterior for k = 1:cont x_2 = x_1 - f(x_1) * (x_0 - x_1) / (f(x_0) - f(x_1)); e = abs(x_2 - x_anterior); % Calculamos el error como la diferencia con el valor anterior de x_2 A(k,:) = [k x_0 x_1 x_2 f(x_2) e]; % Actualizamos x_anterior para la siguiente iteración x_anterior = x_2; if f(x_0) * f(x_2) < 0 x_1 = x_2; else x_0 = x_2; end end fprintf('\n \tk \tx_0 \tx_1 \tx_2 \tf(x_2) \terror \n') disp(A) fprintf('Solución:\n c=%8.5f\n', x_2) fprintf('f(c)=%8.5f\n', f(x_2)) fprintf('error=%8.5f\n', e)
| Generado en Matlab |
Comentarios
Publicar un comentario