Método de iteración punto fijo.
Este método pertenece a métodos abiertos. En análisis numérico los métodos abiertos se basan en fórmulas que requieren únicamente de un solo valor de inicio \(x_0\), o que empiecen con un par de ellos, pero que no necesariamente encierran la raíz. Éstos, algunas veces divergen o se alejan de la raíz verdadera a medida que se avanza en el cálculo. Sin embargo, cuando los métodos abiertos convergen lo hacen mucho más rápido que los métodos cerrados. (Chapra & Canale, 2007).
¿Cómo funciona el método?
Al arreglar la ecuación f(x)=0 de tal manera que x esté al lado izquierdo de la ecuación x=g(x) (es decir despejar x en términos de x), esto se logra al realizar operaciones algebraicas o simplemente sumando x en cada lado de la ecuación original. Al obtener este despeje \(x=g(x)\) obtenemos una función iterativa nos proporcionará las aproximaciones sucesivas a la raíz en función de los valores anteriores de x, este medo requiere de un valor inicial razonable \(x_0\) para que inicien las iteraciones. De esta manera la expresión, \(x=g(x)\) se convierte en \[x_{i+1}=g(x_i)\]
Por ejemplo para determinar las raíces de la ecuación \(f(x)=e^{-x}-x\), aplicando iteración punto fijo despejamos x en función de x, es decir. \(x=e^{-x}\), esta ecuación se convierte en la forma iterativa \[x_{i+1}=e^{-x_i}\]
Además, observemos que la grafica de la ecuación sugiere que hay un corte de la función con el eje x en un valor aproximado a x=0.5455 y que esta función evaluada en este valor f(0.5455) es aproximadamente igual a cero.
 |
| Grafica de la función f(x)=e^-x-x |
Realizamos las iteraciones requeridas de acuerdo al despeje realizado.
Iniciamos con \(x_0=0\)
Calculamos \(x_1\)
\(x_{0+1}=e^{-x_0}\)
\(x_{1}=e^{-x_0}\)
\(x_{1}=e^{-0}\)
\(x_{1}=1\)
Calculamos \(x_2\)
\(x_{1+1}=e^{-x_1}\)
\(x_{2}=e^{-x_1}\)
\(x_{2}=e^{-1}\)
\(x_{2}=0.3679\)
Calculamos \(x_3\)
\(x_{2+1}=e^{-x_2}\)
\(x_{3}=e^{-x_2}\)
\(x_{3}=e^{-0.3679}\)
\(x_{3}=0.6922\)
Y así, sucesivamente hasta considerar que el error aproximado porcentual sea menor que un valor de tolerancia preestablecido.
El calculo del error aproximado se determina por medio de la formula.
\( E_{a\%} = \left| \frac{x_{i+1} - x_i}{x_{i+1}} \right| *100\)
En un archivo de Excel las primeras 20 iteraciones se verían así, junto con su etiqueta de parada de acuerdo a una tolerancia de 0.01. y observamos que nos detenemos en la iteración 20 cuando alcanzamos un error menor que la tolerancia establecida y una raíz de 0.56716.
| itertación | x_i | ea% | Etiqueta |
| 0 | 0 | | |
| 1 | 1 | 100 | Seguir iterando |
| 2 | 0,36788 | 171,82818 | Seguir iterando |
| 3 | 0,69220 | 46,85364 | Seguir iterando |
| 4 | 0,50047 | 38,30915 | Seguir iterando |
| 5 | 0,60624 | 17,44679 | Seguir iterando |
| 6 | 0,54540 | 11,15662 | Seguir iterando |
| 7 | 0,57961 | 5,90335 | Seguir iterando |
| 8 | 0,56012 | 3,48087 | Seguir iterando |
| 9 | 0,57114 | 1,93080 | Seguir iterando |
| 10 | 0,56488 | 1,10887 | Seguir iterando |
| 11 | 0,56843 | 0,62442 | Seguir iterando |
| 12 | 0,56641 | 0,35557 | Seguir iterando |
| 13 | 0,56756 | 0,20120 | Seguir iterando |
| 14 | 0,56691 | 0,11426 | Seguir iterando |
| 15 | 0,56728 | 0,06475 | Seguir iterando |
| 16 | 0,56707 | 0,03674 | Seguir iterando |
| 17 | 0,56719 | 0,02083 | Seguir iterando |
| 18 | 0,56712 | 0,01182 | Seguir iterando |
| 19 | 0,56716 | 0,00670 | Detenerse |
Código de Matlab
% Definir la función g(x) tal que x = g(x)
g = @(x) exp(-x); % Ejemplo: x = exp(-x)
% Parámetros iniciales
x0 = 0; % Valor inicial
tol = 0.01; % Tolerancia (en porcentaje, por lo que debería ser más grande, por ejemplo 0.01)
max_iter = 100; % Número máximo de iteraciones
% Iteración de punto fijo
fprintf('Iteración \t x_n \t\t Error\n');
for iter = 1:max_iter
x1 = g(x0); % Aplicar la función g(x)
error = abs((x1 - x0) / x1) * 100; % Calcular el error porcentual
fprintf('%d \t\t %.8f \t %.8f\n', iter, x1, error);
if error < tol % Condición de convergencia
fprintf('Convergencia alcanzada en %d iteraciones.\n', iter);
break;
end
x0 = x1; % Actualizar x para la siguiente iteración
end
if iter == max_iter
fprintf('No se alcanzó la convergencia en el número máximo de iteraciones.\n');
end
Bibliografía:
Chapra, S. C., & Canale, R. P. (2007). Métodos numéricos para ingenieros (5ª ed.). McGraw-Hill.
Comentarios
Publicar un comentario