ITERACION DE PUNTO FIJO

mayo 15, 2018 0
La iteración de punto fijo también llamada iteración de punto, sustitución sucesiva o método de punto fijo es utilizado en la búsqueda de raíces o soluciones de funciones. Consiste en realizar un arreglo a la ecuación f(x)=0 dejando a x de lado izquierdo, quedandonos una nueva ecuación de la forma x=g(x). Esta transformación se realiza mediante operaciones algebraicas o simplemente sumando x a cada lado de la ecuación original.
A continuación gráficamente se observa como la línea imaginaria de corte se intersecta con la función f(x) en el punto donde la función es cero.
a)
En la gráfica b) aplicando el método de punto fijo la función g(x)=0 se intersecta con la ecuación x=0 precisamente en un x1 igual al valor de la raíz de la función.
b)
De esta forma g(x) es cero con un valor igual a x.
Ejemplo:

Realizando un arreglo nos quedaría

En funciones donde no se puede despejar x como:

Se puede sumar x a cada lado.

Sin embargo cabe recalcar que existen otras posibilidades en las que se podría transformar una función, en el primer ejemplo, también son validas las siguientes funciones,


Cualquiera de las ecuaciones anteriores son válidas, pero eso no significa que todas convergerán a la respuesta, para evitar esto, es importante tener en cuanta que mientras |g'(x)|<1 la ecuación se aproximara a la solución.

Pseudocódigo

ENTRADA: aproximación p0; tolerancia Tol; número máximo de iteraciones Nmax
SALIDA: solución aproximada p o mensaje de error
Paso 1: Tome i=1
Paso 2: Mientras i<Nmax repita los pasos 3 a 6
        Paso 3: Tome p=g(p0)
        Paso 4: Si |p-p0|<Tol entonces
                        SALIDA: "La raíz de la función es", p (Procedimiento terminado exitosamente.)
                        PARAR
        Paso 5: Tome i=i+1
        Paso 6: Tome p0=p   (Define el nuevo valor de p0)
Paso 7: SALIDA: "Se ha superado el número máximo de iteraciones"  (Procedimiento terminado sin éxito)
                PARAR

Algoritmo en Matlab

%Punto Fijo
clear;
nmax = input('Número de iteraciones: ');
tol = input('Tolerancia: ');
p0 = input('Aproximación inicial: p0 = ');
syms x;
f = input('Función: g(x) = ');
stop=0;
i = 1;
while(i<=nmax)
    p = subs(f,x,p0);
    if(abs(p-p0)<tol)
        disp('La raíz de la función es');
        disp(vpa(p,8));
        stop = 1;
        break
    end
    p0 = p;
    i=i+1;
end
if(stop~=1)
    disp('Se ha superado el número máximo de iteraciones');
end

El pseudocódigo permite comprender mejor el algoritmo, una vez comprendido este, se puede aplicar en cualquier lenguaje de programación, el código presentado en Matlab es solo un ejemplo de su aplicación.

METODO DE BISECCION

mayo 15, 2018 0
El método de bisección es uno de los problemas básicos dentro de las aproximaciones numéricas, "búsqueda de raíces". Consiste en obtener una raíz o solución para ecuaciones de la forma f(x)=0.

Demostración gráfica del método de bisección
Se basa en el teorema del valor medio, de ahí su nombre método de bisección o búsqueda binaria. Supongamos que f es una función continua definida dentro del intervalo [a,b], con f(a) y f(b) con signos opuestos. De acuerdo con el teorema del valor medio, existe un valor p tal que f(p)=0. El método consiste en dividir varias veces a los subintervalos de [a,b], y en cada división aproximarse a la mitad que contenga al valor p
Para empezar, supongamos que tenemos un intervalo cualesquiera [a,b] que encierre la raíz, para esto la función debe de cambiar de signo dentro del intervalo. Esto se verifica comprobando que f(a)*f(b)<0.

Una aproximación de la raíz se obtiene mediante:
p=(a+b)/2
Se comprueba en que subintervalo se encuentra ahora la raíz.
  1. Si f(a)*f(p)<0 entonces la raíz se encuentra dentro del subintervalo [a,p]. Por lo tanto b=p, y repetimos la búsqueda.
  2. Si f(a)*f(p)>0 entonces la raíz se encuentra dentro del subintervalo [p,b]. Por lo tanto a=p, y repetimos la búsqueda.
  3. Si f(a)*f(p)=0 la raíz de la función es p, sin embargo este caso no siempre llega a darse, por lo que generalmente no se tiene en cuenta dentro de los códigos de programación.
Cuando se crean los algoritmos generalmente para métodos como este se tiene en cuenta una tolerancia, con la cual podemos comprobar que el resultado obtenido es lo más próximo a la raíz. Dicho valor se compara con el absoluto de la función del último valor calculado, es decir, debe cumplir que:
|f(p)|<Tolerancia
Mientras más pequeño sea la tolerancia aceptada, más próximo es el resultado a la raíz.

Pseudocódigo

ENTRADA: valores a y b, la tolerancia Tol y un máximo de iteraciones Nmax.
SALIDA: solución aproximada p o mensaje de fracaso.
Paso 1: Tome i=1
Paso 2: Mientras i<Nmax repita los pasos 3 a 6
        Paso 3: Tome p=(a+b)/2 (Calculamos p)
        Paso 4: Si f(p)<Tol entonces
                            SALIDA: "La raíz de la función es: ", p (Procedimiento termino con éxito).
                            PARAR
        Paso 5: Tome i=i+1
        Paso 6: Si f(a)*f(p)<0 entonces (Actualizamos nuestros valores a y b)
                            tome b=p
                        De lo contrario
                            tome a=p
Paso 7: SALIDA: "Se ha superado el máximo número de iteraciones" (Procedimiento termino sin éxito).
                PARAR

Algoritmo en Matlab

%Bisección
clear; nmax = input('Número de iteraciones: '); tol = input('Tolerancia: '); disp('Intervalo'); a = input('a= '); b = input('b= '); disp('Ingrese la función'); syms x; f = input('f(x)='); stop=0; i=1; while(i<nmax) p = (a+b)/2; fp = subs(f,x,p); fa = subs(f,x,a); if(abs(fp)<tol) disp('La raíz de la función es'); disp(vpa(p,8)); stop = 1; break; end if(fa*fp<0) b=p; else a=p; end i = i+1; end if(stop~=1) disp('Se ha superado el número máximo de iteraciones'); end

El if(stop~=1) es una forma de evitar que el mensaje de error se muestre si se ha encontrado la aproximación de la raíz.

Si tienen alguna duda o comentario no duden en hacérmelo saber en los comentarios.