Ir al contenido principal

2.2 Métodos abiertos: Iteración punto fijo, Método de Newton Raphson y Método de la secante. Métodos para raíces múltiples.


2.2 Métodos abiertos: Iteración punto fijo, Método de Newton Raphson y Método de la secante. Métodos para raíces múltiples.





Método de Punto Fijo


El método de punto fijo o de aproximaciones sucesivas es, junto con el de Bisección, uno de los primeros métodos que se utilizaron para resolver ecuaciones algebraicas y trascendentes. No obstante que en la actualidad existen otros métodos más eficientes, el de punto fijo se considera el más simple en sus pricipios y en él se pueden apreciar claramente todas las características de un método de aproximaciones sucesivas.


Sea F(x) = 0 una ecuación algebraica o trascendente caulquiera. Se suma x en ambos miembros y se obtiene: (1)


F(x) + x = x


donde el miembro izquierdo es otra función de x que se define como (2)


G(x) + x = x


Se sustituye en la ecuación (1): (3)


x = G(x)


Obsérvese ahora que cualquier ecuación puede representarse en esta forma, siguiendo el procedimiento anterior.


Si x = a es una raíz de la ecuación, entonces


F (a) = 0


o bien, al sustituir en la ecuación (3)


a = G (a)


El método de aproximaciones sucesivas consiste en sustituir un valor inicial (x0) apropiado (cercano a la raíz) en el segundo miembro de la ecuación (3). Si x0 es la raíz, se deberá cumplir la ecuación (4); esto es:


x0 = G(xo)


pero esto será difícil de que ocurra; seguramente el valor inicial principal proporcionado xo será solo un valor cercano a la raíz. Entonces, en el caso general:


x0 =/ G(x0) o bien, x1 = G(x0)


donde x1 es la nueva aproximación de la raíz a. se sustituye x1 en el segundo miembro de la ecuación (3) y se obtiene:


x2 = G(x1)


Al proceder reiteradamente en esta forma se induce que la n-ésima aproximación es:


Xn = G(Xn-1)


n = 1,2,3,.....


De acuerdo con lo visto en los temas anteriores, puede afirmarse que si el método converge, la diferencia en valor absoluto entre valores proporcionados en dos iteraciones sucesivas será cada vez más pequeña a medida que n aumnete, y con esto se tendrá un criterio para saber cuándo termina la aplicación del método.


Es posible afirmar que si en la n-ésima iteración el método se está aproximando a la raíz o converge a ella, entonces:


|G´(t)| = |a - Xn| / |a - Xn-1| <1


Es decir, el método es convergente si:


|G´(t)|<1 Xn-1<t<a


Esto significa que el método converge en la n-ésima iteración cuando el valor absoluto de la derivada de G(x) en cualquier punto del intervalo (Xn-1, a) es menor que la unidad.


Por otra parte el método es divergente si


|a - Xn| > |a - Xn-1|
Recordar que el método dePunto Fijo, nos dice que, solo podra haber y tener un unico punto o raíz














Método de Newton-Raphson

Entre los métodos de aproximaciones sucesivas para encontrar algunas de las raíces de una ecuacíon algebraica o tracendente, el de Newton-Raphson es el que presenta mejores características de eficiencia, debido a que casi siempre converge a la solución y lo hace en un número reducido de iteraciónes.
Este método es aplicable tanto en ecuaciones algebraicas como tracendentes y con él es posible obtener raíces complejas. Tal vez, de las fórmulas para localizar raíces, la fórmula de Newton-Raphson sea la más ampliamente utilizada. Si el valor inicial para la raíz es xi, entonces se puede trazar una tangente desde el punto [xi,f(xi)] de la curva. por lo común, el punto donde esta tangente cruza el eje x representa una aproximación mejorada de la raíz.



El método de Newton-Rapshon se deduce a partir de esta interpretación geométrica.







El método de Newton-Raphson, como todos los de aproximaciones sucesivas, parte de una primera aproximación y mediante la aplicación de una formula de recurrencia se acercara a la raíz buscada, de tal manera que la nueva aproximación se localiza en la interseccíon de la tangente a la curva de la función en el punto y el eje de las abscisas.





De la figura se tiene que la primer derivada en x es equivalente a la pendiente:

que se reordena para obtener:


la cual se conoce como fórmula de Newton-Raphson.










Método de la Secante


La recta secante es una recta que corta a una circunferencia en dos puntos. Conforme estos puntos de corte se acercan, dicha recta se aproxima a un punto y, cuando solo existe un punto que toca la circunferencia, se le llama tangente.

Dados los puntos de intersección A y B puede calcularse la ecuación de la recta secante empleando para saber la respuesta de ésta operación se emplea en matemáticas la ecuación de la recta que pasa por dos puntos.


En análisis numérico el método de la secante es un método para encontrar los ceros de una función de forma iterativa. Uno de los objetivos de este método es eliminar el problema de la derivada de la función, ya que existen funciones que describen fenómenos físicos en la vida real, cuya derivada es muy compleja.El método de la secante es muy similar al de Newton con la diferencia principal que en este método de la secante no requiere de la segunda derivada.


El método se basa en obtener la ecuación de la recta que pasa por los puntos (xn−1), f(xn−1)) y (xn, f(xn)). A dicha recta se le llama secante por cortar la gráfica de la función. Posteriormente se escoge como siguiente elemento de la relación de recurrencia, xn+1, la intersección de la recta secante con el eje de abscisas obteniendo la fórmula.






Este método, a diferencia del de bisección y regla falsa, casi nunca falla ya que solo requiere de 2 puntos al principio, y después el mismo método se va retroalimentando. Lo que hace básicamente es ir tirando rectas secantes a la curva de la ecuación que se tiene originalmente, y va checando la intersección de esas rectas con el eje de las X para ver si es la raíz que se busca.


El método de la secante parte de dos puntos (y no sólo uno como el método de Newton) y estima la tangente (es decir, la pendiente de la recta) por una aproximación de acuerdo con la expresión grafica siguiente:









En la siguiente iteración, emplearemos los puntosx1 yx2 para estimar un nuevo punto más próximo a la raíz de acuerdo con la ecuación de arriba. En la figura se representa geométricamente este método.


En general, el método de la secante presenta las mismas ventajas y limitaciones que el método de Newton-Raphson.


Forma de hacerlo:


Primero hay que definir algunos conceptos como:


Xn: es el valor actual de X


Xn- 1: es el valor anterior de X


Xn+1: es el valor siguiente de X


Para simplificar la formula que se usa en este método se dirá que:


A=Xn-1


B=Xn+1


C=Xn


Como su nombre lo dice, este método va trazando rectas secantes a la curva original, y como después del primer paso no depende de otras cantidades sino que solito va usando las que ya se obtuvieron, casi nunca falla porque se va acomodando hasta que encuentra la raíz.


El método se define por la relación de recurrencia:








CODIGOS:

Punto Fijo



Datos de entrada:
la función original
la función g(x)
el punto de inicio
la tolerancia o error absoluto
numero máximo de iteraciones
Este método genera a partir de f(x)=0 una ecuación x=g(x), para la cual se busca su solución. Si g(en) corta la recta y=x, entonces f(xn)=0, por lo tanto xn es una raíz de f(x). En otras palabras, se busca un valor de x que al reemplazarlo en g(x) se obtenga el mismo valor de x, esta x seria entonces una raíz de la función f(x). En este método no se parte de un intervalo sino de una aproximación inicial, esta y todas las aproximaciones iniciales pueden calcularse con ayuda del método de búsqueda de intervalos, donde x0 sería el punto medio de un subintervalo que contenga una raíz. Después de tener x0 calculamos x1 reemplazando x0 en g(x), es decir x1=g(x0). luego x2=g(x1). así sucesivamente hasta que la diferencia xn - x(n-1) sea menor a la tolerancia definida por el usuario.

Pseudocodigo

Pseudocodigo punto fijo

Datos de entrada: f(x), g(x), xi, error absoluto máximo, numero máximo de iteraciones

Datos de salida: raíz, numero iteraciones

Lea : f, g, xi, n, tol

fx=f(xi)

error=tol+1

i=1

mientras i<=n y fx~=0 y error>tol

x=g(xi)

fx=f(xi)

error=abs(x-xi)

xi=x

i=i+1

fin mientras



si f(xi)=0

Escriba ‘La raíz es: xi’

Sino si error<tol

Escriba ‘xi es una aproximación a la raíz con un error máximo de tol’

Sino

Escriba ‘El método fallo en n iteraciones’

Fin si

Codigo Matlab/Octave


se debe crear un archivo .m llamado puntofijo1 y copiar y pegar el siguiente codigo

function puntofijo1

f=input('Ingrese la funcion f(x): ','s');
f=inline(f);
g=input('Ingrese la funcion g(x): ','s');
g=inline(g);
xi=input('Ingrese el punto de inicio: ');
tol=input('Ingrese el error admisible: ');
n=input('Ingrese el numero maximo de iteraciones permitidas: ');
fx=f(xi);
error=tol+1;
i=1;
fprintf('\n n         x        g(x)       f(x)            \n')
while i<=n && fx~=0 && error>tol  
    x=g(xi);
    fx=f(xi);
    error=abs(x-xi);
    xi=x;    
    i=i+1;
    fprintf('%3.0f %10.10f %10.10f %10.10f \n',i,x,g(x),f(x))  
end

if f(xi)==0
    fprintf('\n La raíz es: %1.10f \n\n',xi)
else if error<tol
        fprintf('\n %1.10f es una aproximacion a la raiz con un error maximo de %1.10f \n',xi,tol)
    else
     fprintf('\n El metodo fallo en %0.0f iteraciones \n\n',n)  
    end
end





Newton-Raphson

Datos de Entrada 
Punto de Aproximación Inicial
Error absoluto (Tolerancia de error)
Numero de iteraciones

Este método utiliza una aproximación inicial para comenzar el proceso iterativo. Básicamente opera evaluando en ese punto inicial la función y la derivada de la función creando una recta tangente que se extiende hasta cortar el eje x, en este punto donde se corta el eje se toma el segundo valor que reemplazara a la aproximación inicial y realizara el mismo proceso una y otra vez hasta acercarse cada vez más a la raíz de la función. 


Este método tiene una rápida convergencia pero no garantiza que pueda encontrar la raíz debido a complicaciones asociadas a la planitud de la función (la derivada tiende a cero), también complicaciones con raíces múltiples o por proximidad de raíces, esto puede llevar a que el proceso entre en un ciclo repetitivo comúnmente llamado "Loop".     
La formula es la sigiente


Pseudocodigo

Datos de entrada: función, derivada de la función, punto inicio, n max, error absoluto.

Datos de salida: raíz, numero iteraciones, derivada en la raíz.

Lea: f,g,tol,n,xi

fx=f(xi)

fpx=fp(xi)

i=1

error=tol+1

mientras  i<=n y fx~=0 y error>tol y fpx~=0

x=xi-(fx/fpx)

fx=f(x)

fpx=fp(x)

error=abs(x-xi)

xi=x

i=i+1

fin mientras

si fx=0

Escriba ‘La raíz es: xi’

Sino si error<tol

Escriba ‘ xi es una aproximación a la raíz con un error máximo de tol’

Sino si fpx=0

Escriba ‘xi es una posible raíz múltiple.'

sino

Escriba ‘El método fallo en n iteraciones’

Fin si

Codigo Matlab/Octave
se debe crear un archivo .m y copiar y pegar el siguiente codigo
function newton
    f=input('ingrese la funcion: ','s');
    f=inline(f);
    fp=input('ingrese la dervidad de la funcion: ','s');
    fp=inline(fp);
    xi=input('escriba el punto de inicio: ');
    tol=input('Ingrese el error maximo admisible: ');
    n=input('Ingrese el numero maximo de iteraciones permitidas: ');
    fx=f(xi);
    fpx=fp(xi);
    i=1;
    error=tol+1;
    fprintf('\n n         x        f(x)         fp(x)          \n')
    while  i<=n && fx~=0 && error>tol && fpx~=0
        x=xi-(fx/fpx);
        fx=f(x);
        fpx=fp(x);
        fprintf('%1.0f %10.10f %10.10f %10.10f \n',i,x,f(x),fp(x))
        error=abs(x-xi);
        xi=x;
        i=i+1;
    end

if fx==0
    fprintf('\n La raíz es: %1.10f \n\n',xi)
  else if error<tol
        fprintf('\n %1.10f es una aproximacion a la raiz con un error maximo de %1.10f \n',xi,tol)
      else if fpx==0
           fprintf(' %1.10 es una posible raiz multiple.',xi)
          else
           fprintf('\n El metodo fallo en %0.0f iteraciones \n\n',n)
          end
      end
end
end




Secante

Datos de Entrada

Dos aproximaciones iniciales (no tienen que garantizar que haya una raíz entre ellas)
Error absoluto (tolerancia de error)
Numero de iteraciones máximo (Criterio de paro) 


Este método es muy similar al método de la "Regla Falsa", Evalúa las dos aproximaciones iniciales en la función y traza una recta secante entre los puntos correspondientes de la función, la recta secante corta al eje x en un punto p que nos determinara un nuevo valor de aproximación. Basándose en este nuevo valor y el anterior, se evalúa de nuevo la función en estos dos puntos y se traza una nueva recta secante que cruce nuevamente el eje y se toma el nuevo valor aproximado, este proceso se itera hasta aproximarse cada vez a la raíz.
La formula es la siguiente:



Pseudocodigo
Pseudocódigo secante

Datos entrada: función, dos puntos de inicio, n max, error absoluto

Datos de salida: raíz, numero iteraciones

Lea: x0,x1,f,n,tol

fx0=f(x0)

fx1=f(x1)

si fx0=0

Escriba: ‘x0 es Raíz.'

sino

fx1=f(x1)

denominador=fx1-fx0

error=tol+1

i=1

mientras i<=n y fx1~=0 y error>tol y denominador~=0

xn=x1-fx1*((x1-x0)/(fx1-fx0))

error=abs(xn-x1)

x0=x1

fx0=fx1

x1=xn

fx1=f(x1)

denominador=fx1-fx0

i=i+1

fin mientras

fin si



si fx1=0

Escriba ‘x1 es Raíz.'

Sino si error<tol

Escriba ‘x1 es una aproximación a la raíz con un error máximo de tol’

Sino si denominador==0

Escriba ‘Hay una posible raíz múltiple'

sino

Escriba ‘El método fallo en n iteraciones’

fin si

Codigo Matlab/Octave

Se debe crear un archivo .m llamado secante y copiar y pegar el siguiente codigo

function secante
    f=input('ingrese la funcion: ','s');
    f=inline(f);
    x0=input('ingrese x0: ');
    x1=input('ingrese x1: ');
    tol=input('Ingrese el error maximo admisible: ');
    n=input('Ingrese el numero maximo de iteraciones permitidas: ');
    fx0=f(x0);
    fx1=f(x1);
    if fx0==0
        fprintf('\n%1.10f es Raiz.\n',x0)
    else
        fx1=f(x1);
        denominador=fx1-fx0;
        error=tol+1;
        i=1;
        fprintf('\n n         xn        f(x)         \n')
        while i<=n && fx1~=0 && error>tol && denominador~=0
            xn=x1-fx1*((x1-x0)/(fx1-fx0));
            error=abs(xn-x1);
            x0=x1;
            fx0=fx1;
            x1=xn;
            fx1=f(x1);
            denominador=fx1-fx0;
            fprintf('%0.0f %10.10f %10.10f \n',i,x1,fx1)
            i=i+1;        
        end
    end

    if fx1==0
       fprintf('%1.10f es Raiz.\n',x1) 
    else if error<tol
        fprintf('\n %1.10f es una aproximacion a la raiz con un error maximo de %1.10f \n',x1,tol)
        else if denominador==0
        fprintf('Hay una posible raiz multiple')
       
    else
     fprintf('\n El metodo fallo en %0.0f iteraciones \n\n',n)
            end
        end
    end     

Raices Multiples




Uno de los inconvenientes que presenta el método de Newton es cuando la derivada de la función tiende a cero al ser evaluada en x y por ende la convergencia disminuye o incluso se suspende si se alcanza una división por cero. Similarmente sucedería con el método de la secante si la función es muy plana y f(x) y f(x-1) son aproximadamente iguales. Con el fin de darle solución a este inconveniente se crearon estos métodos.

Métodos para determinar raíces múltiples

Hay dos formas desarrolladas para determinar raíces múltiples. Estos métodos no son más que modificaciones del método de newton y a continuación se presentaran estos.
El primero de ellos añade un factor a la formula normal del método de newton con el fin de retornar  la convergencia de este, simplemente añade la multiplicidad de la raíz como una constante al segundo término de la formula.



El segundo crea una función auxiliar u(x)=f(x)/f'(x), así xn+1 =xn-(u(x)/u'(x)) reemplazando en términos de f(x) se obtiene :






Pseudocodigo Metodo 1


Pseudo codigo raices multiples 1

Datos de entrada: función, derivada, punto inicio, multiplicidad, n max, error absoluto

Datos de salida: raíz, numero iteraciones

Lea: f, fp, xi, n, tol, m

fx=f(xi)

fpx=fp(xi)

i=1

error=tol+1

mientras  i<=n y fx~=0 y error>tol y fpx~=0

x=xi-m*(fx/fpx)

fx=f(x)

fpx=fp(x)

error=abs(x-xi)

xi=x

i=i+1

fin mientras

si fx=0

Escriba ‘La raíz es: xi’

Sino si error<tol

Escriba ‘ xi es una aproximación a la raíz con un error máximo de tol’

Sino si fpx=0

Escriba ‘xi es una posible raíz múltiple.'

sino

Escriba ‘El método fallo en n iteraciones’

Fin si





Pseudocodigo metodo 2
Pseudocodigo raices multiples 1
Datos entrada :  función, primera y segunda derivada, punto inicio, n max, error máximo
Datos salida: raíz, numero de iteraciones
Lea: f, fp, fpp, xi, n, tol

fx=f(xi)

fpx=fp(xi)

fppx=fpp(xi)

denominador=(fpx^2-fx*fppx)

i=1

error=tol+1

mientras  i<=n y fx~=0 y error>tol y denominador~=0

x=xi-(fx*fpx)/denominador

fx=f(x)

fpx=fp(x)

fppx=fpp(x)

denominador=(fpx^2-fx*fppx)

error=abs(x-xi)

xi=x

i=i+1

fin mientras



si fx=0

Escriba ‘ La raíz es: xi’

Sino si error<tol

Escriba ‘xi es una aproximación a la raíz con un error máximo de tol’

sino

Escriba ‘El método fallo en n iteraciones’

fin si

Codigos Matlab/Octave

function raicesmultiplesb
    f=input('ingrese la funcion: ','s');
    f=inline(f);
    fp=input('ingrese la dervidad de la funcion: ','s');
    fp=inline(fp);
    m=input('Ingrese la multiplicidad de la raiz: ');
    xi=input('escriba el punto de inicio: ');
    tol=input('Ingrese el error maximo admisible: ');
    n=input('Ingrese el numero maximo de iteraciones permitidas: ');
    fx=f(xi);
    fpx=fp(xi);
    i=1;
    error=tol+1;
    fprintf('\n n         x        f(x)         fp(x)          \n')
    while  i<=n && fx~=0 && error>tol && fpx~=0
        x=xi-m*(fx/fpx);
        fx=f(x);
        fpx=fp(x);
        fprintf('%1.0f %10.10f %10.10f %10.10f \n',i,x,f(x),fp(x))
        error=abs(x-xi);
        xi=x;
        i=i+1;
    end

if fx==0
    fprintf('\n La raíz es: %1.10f \n\n',xi)
  else if error<tol
        fprintf('\n %1.10f es una aproximacion a la raiz con un error maximo de %1.10f \n',xi,tol) 
          else
           fprintf('\n El metodo fallo en %0.0f iteraciones \n\n',n)
      end
end
end



function raicesmultiples
  f=input('ingrese la funcion: ','s');
  f=inline(f);
  fp=input('ingrese la dervidad de la funcion: ','s');
  fp=inline(fp);
  fpp=input('ingrese la segunda dervidad de la funcion: ','s');
  fpp=inline(fpp);
  xi=input('escriba el punto de inicio: ');
  tol=input('Ingrese el error maximo admisible: ');
  n=input('Ingrese el numero maximo de iteraciones permitidas: ');
  fx=f(xi);
  fpx=fp(xi);
  fppx=fpp(xi);
  denominador=(fpx^2-fx*fppx);
  i=1;
  error=tol+1;
  fprintf('\n n         x        f(x)               \n')
  while  i<=n && fx~=0 && error>tol && denominador~=0
        x=xi-(fx*fpx)/denominador;
        fx=f(x);
        fpx=fp(x);
        fppx=fpp(x);
        denominador=(fpx^2-fx*fppx);
        fprintf('%1.0f %10.10f %10.10f %10.10f \n',i,x,f(x))
        error=abs(x-xi);
        xi=x;
        i=i+1;
  end

if fx==0
    fprintf('\n La raíz es: %1.10f \n\n',xi)
  else if error<tol
        fprintf('\n %1.10f es una aproximacion a la raiz con un error maximo de %1.10f \n',xi,tol)
    else
     fprintf('\n El metodo fallo en %0.0f iteraciones \n\n',n)
       end
end




Comentarios

Entradas populares de este blog

6.3 Métodos de pasos múltiples

6.3 Métodos de pasos múltiples Los métodos de un paso descritos en las secciones anteriores utilizan información en un solo punto xi para predecir un valor de la variable dependiente yi+1 en un punto futuro xi+1. Procedimientos alternativos, llamados métodos multipaso, se basan en el conocimiento de que una vez empezado el cálculo, se tiene información valiosa de los puntos anteriores y esta a nuestra disposición. La curvatura de las líneas que conectan esos valores previos proporciona información con respecto a la trayectoria de la solución. Los métodos multipaso que exploraremos aprovechan esta información para resolver las EDO. Antes de describir las versiones de orden superior, presentaremos un método simple de segundo orden que sirve para demostrar las características generales de los procedimientos multipaso. Observe la ecuación ec. 2  alcanza ) a expensas de emplear un tamaño de paso mas grande, 2h. Además, ob

6.2 Métodos de un paso: Método de Euler, Método de Euler mejorado y Método de Runge-Kutta

6.2 Métodos de un paso: Método de Euler, Método de Euler mejorado y Método de Runge-Kutta   Método de Euler El método de Euler es un procedimiento de integración numérica para resolver ecuaciones diferenciales ordinarias a partir de un valor inicial dado. El método de Euler es el más simple de los métodos numéricos para resolver un problema del siguiente tipo: Consiste en multiplicar los intervalos que van de x0 a xf en n subintervalos de ancho h; Osea: de manera que se obtiene un conjunto discreto de n+1 puntos: x0, x1, x2, ... , xn del intervalo de interés [x0,xf]. Para cualquiera de estos puntos de cumple que:  0<i<n. La condición inicial y(x0)=y0, representa el punto P0=(x0,y0) por donde pasa la curva solución de la ecuación del plantamiento inicial, la cual se denotará cmo F(x)=y. Ya teniendo el punto P0 se puede evaluar la primera derivada de F(x) en ese punto; por lo tanto: Con esta información se traza una recta, aquella que pasa por

6.1 Fundamentos de Ecuaciones Diferenciales

UNIDAD 6 ECUACIONES DIFERENCIALES ORDINARIAS 6.1 Fundamentos de Ecuaciones Diferenciales Una  ecuación diferencial  es una  ecuación  en la que intervienen  derivadas  de una o más funciones desconocidas. Dependiendo del número de variables independientes respecto de las que se deriva, las ecuaciones diferenciales se dividen en Ecuaciones diferenciales ordinarias : aquellas que contienen derivadas respecto a una sola variable independiente. Ecuaciones en derivadas parciales : aquellas que contienen derivadas respecto a dos o más variables. Una ecuación diferencial es una ecuación que incluye expresiones o términos que involucran a una función matemática incógnita y sus derivadas. Algunos ejemplos de ecuaciones diferenciales son: es una ecuación diferencial ordinaria, donde   representa una función no especificada de la variable independiente  , es decir,  ,   es la derivada de   con respecto a  . La expresión es una ecuación en derivadas pa