Diferencia entre revisiones de «Método de Whittaker»

(Página creada con 'El '''método de Whittaker''' es un método de la matemática numérica (por tanto interativo), utilizado para la solución numérica de ecuaciones lin...')
 
Línea 1: Línea 1:
 
El '''método de Whittaker''' es un método de la [[Matemática numérica|matemática numérica]] (por tanto interativo), utilizado para la solución numérica de ecuaciones lineales. Se dice que es un método quasi-[[Isaac Newton|Newton]] por sus semejanzas con el mismo. El [[Método de Newton|método de Newton-Raphson]] tiene la ventaja de que su convergencia es cuadrática, por tanto es mucho más “rápida” que la lineal que se obtiene con otros métodos como el de [[Método de la bisección|Bisección]].  
 
El '''método de Whittaker''' es un método de la [[Matemática numérica|matemática numérica]] (por tanto interativo), utilizado para la solución numérica de ecuaciones lineales. Se dice que es un método quasi-[[Isaac Newton|Newton]] por sus semejanzas con el mismo. El [[Método de Newton|método de Newton-Raphson]] tiene la ventaja de que su convergencia es cuadrática, por tanto es mucho más “rápida” que la lineal que se obtiene con otros métodos como el de [[Método de la bisección|Bisección]].  
  
== Descripción del método ==
+
== Descripción del método ==
  
El método de Whittaker resuelve el problema presente en el método de Newton pues solamente se evalúa la derivada de la función para el primer punto y se hace este valor constante para las iteraciones restantes.
+
El método de Whittaker resuelve el problema presente en el método de Newton pues solamente se evalúa la derivada de la función para el primer punto y se hace este valor constante para las iteraciones restantes.  
  
x_(n+1)= x_n-(f(x_n))/m
+
x_(n+1)= x_n-(f(x_n))/m  
  
donde:
+
donde:  
  
 
m = f'(x_0)  
 
m = f'(x_0)  
  
mientras que el método de Newton realiza las aproximaciones a la solución de la forma:
+
mientras que el método de Newton realiza las aproximaciones a la solución de la forma:  
  
x_(n+1)= x_n-(f(x_n))/(f'(x_n))
+
x_(n+1)= x_n-(f(x_n))/(f'(x_n))  
  
La desventaja de este método reside en que es necesario evaluar la derivada de la función tantas veces como iteraciones se realicen, lo cual es muy costoso desde el punto de vista computacional, y es posible que la derivada se anule o cambie de signo lo que puede provocar la aparición de una tangente horizontal o una aproximación muy alejada de la raíz donde incluso no podría estar definida la función.
+
La desventaja de este método reside en que es necesario evaluar la derivada de la función tantas veces como iteraciones se realicen, lo cual es muy costoso desde el punto de vista computacional, y es posible que la derivada se anule o cambie de signo lo que puede provocar la aparición de una tangente horizontal o una aproximación muy alejada de la raíz donde incluso no podría estar definida la función.  
  
El éxito del método de Whittaker radica en la selección de un buen X0 que no anule a m y garantice una rápida convergencia.
+
El éxito del método de Whittaker radica en la selección de un buen X0 que no anule a m y garantice una rápida convergencia.  
  
Este método no tiene una convergencia cuadrática como el de Newton pero siempre es más rápida que la convergencia lineal del método de Bisección.
+
Este método no tiene una convergencia cuadrática como el de Newton pero siempre es más rápida que la convergencia lineal del método de Bisección.  
  
== Algoritmo ==  
+
== Algoritmo ==
  
=== En pseudocódigo ===
+
=== En pseudocódigo ===
  
#Entrar X0
+
#Entrar X0  
#Entrar TE
+
#Entrar TE  
#xanterior = x
+
#xanterior = x  
#repeat
+
#repeat  
# x = xanterior – f(xanterior) / f’(xanterior)
+
#x = xanterior – f(xanterior) / f’(xanterior)  
# Error = | x - xanterior |
+
#Error = | x - xanterior |  
#xanterior = x
+
#xanterior = x  
#until Error < TE
+
#until Error &lt; TE  
 
#
 
#
#La raíz buscada es x y su error absoluto máximo es Error
+
#La raíz buscada es x y su error absoluto máximo es Error  
 
#Terminar
 
#Terminar
  
=== Implementación en C++ ===
+
=== Implementación en C++ ===
<syntaxhighlight lang='cpp'>
+
<div style="text-align: left;" class="mw-geshi" dir="ltr"><div class="cpp source-cpp"><pre class="de1"><span class="co1">// devuelve el valor de la función evaluada en la variable x</span> <span class="kw4">double</span> funcion<span class="br0">(</span><span class="kw4">double</span> x<span class="br0">)</span><span class="br0">{</span> <span class="kw4">double</span> res <span class="sy1">=</span> ... <span class="co1">// ecuación que se desea solucionar evaluada en x;</span> <span class="kw1">return</span> res<span class="sy4">;</span> <span class="br0">}</span> &nbsp; <span class="co1">// devuelve el valor de la derivada de la función evaluada en la variable x</span> <span class="kw4">double</span> derivada<span class="br0">(</span><span class="kw4">double</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw4">double</span> res <span class="sy1">=</span> ... <span class="co1">// derivada de la ecuación que se desea solucionar evaluada en x;</span> <span class="kw1">return</span> res<span class="sy4">;</span> <span class="br0">}</span> &nbsp; <span class="co1">// devuelve el resultado de la ecuación mediante el método de Whittaker.</span> <span class="co1">// recibe una aproximación arbitraria a la solución y el error máximo permitido.</span> <span class="co1">// puede ser necesario devolver el ERROR. </span> <span class="co1">// Considérese el uso de una estructura que contenga el valor de x y el ERROR.</span> <span class="co1">// en este ejemplo solo se devuelve el valor de x.</span> <span class="kw4">double</span> whittaker<span class="br0">(</span><span class="kw4">double</span> x0, <span class="kw4">double</span> eMaximo<span class="br0">)</span><span class="br0">{</span> <span class="kw4">double</span> ERROR <span class="sy1">=</span> <span class="nu0">1000000000</span><span class="sy4">;</span> <span class="co1">// valor muy grande.</span> <span class="kw4">double</span> xAnterior <span class="sy1">=</span> x0<span class="sy4">;</span> <span class="kw4">double</span> m <span class="sy1">=</span> derivada<span class="br0">(</span>x0<span class="br0">)</span><span class="sy4">;</span> <span class="kw4">double</span> x<span class="sy4">;</span> &nbsp; <span class="kw1">while</span><span class="br0">(</span>ERROR <span class="sy1">&gt;</span> eMaximo<span class="br0">)</span><span class="br0">{</span> x <span class="sy1">=</span> xAnterior – f<span class="br0">(</span>xAnterior<span class="br0">)</span> <span class="sy2">/</span> m<span class="sy4">;</span> Error <span class="sy1">=</span> <span class="sy3">|</span> x <span class="sy2">-</span> xAnterior <span class="sy3">|</span><span class="sy4">;</span> xAnterior <span class="sy1">=</span> x<span class="sy4">;</span> <span class="br0">}</span> &nbsp; <span class="kw1">return</span> x<span class="sy4">;</span> <span class="br0">}</span> &nbsp; <span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span><span class="br0">{</span> <span class="kw4">double</span> x0, eMaximo<span class="sy4">;</span> <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> x0 <span class="sy1">&gt;&gt;</span> eMaximo<span class="sy4">;</span> <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> whittaker<span class="br0">(</span>x0, eMaximo<span class="br0">)</span><span class="sy4">;</span> <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="br0">}</span></pre></div></div>
// devuelve el valor de la función evaluada en la variable x
+
== Véase también  ==
double funcion(double x){
 
    double res = ... // ecuación que se desea solucionar evaluada en x;
 
    return res;
 
}
 
  
// devuelve el valor de la derivada de la función evaluada en la variable x
+
*[[Matemática numérica]]  
double derivada(double)
+
*[[Solución numérica de ecuaciones]]  
{
 
    double res = ... // derivada de la ecuación que se desea solucionar evaluada en x;
 
    return res;
 
}
 
 
 
// devuelve el resultado de la ecuación mediante el método de Whittaker.
 
// recibe una aproximación arbitraria a la solución y el error máximo permitido.
 
// puede ser necesario devolver el ERROR.
 
// Considérese el uso de una estructura que contenga el valor de x y el ERROR.
 
// en este ejemplo solo se devuelve el valor de x.
 
double whittaker(double x0, double eMaximo){
 
    double ERROR = 1000000000; // valor muy grande.
 
    double xAnterior = x0;
 
    double m = derivada(x0);
 
    double x;   
 
   
 
    while(ERROR > eMaximo){
 
        x = xAnterior – f(xAnterior) / m;
 
        Error = | x - xAnterior |;
 
        xAnterior = x;
 
    } 
 
   
 
    return x;
 
}
 
 
 
int main(void){
 
    double x0, eMaximo;
 
    cin >> x0 >> eMaximo;   
 
    cout << whittaker(x0, eMaximo);
 
    return 0;
 
}
 
</syntaxhighlight>
 
 
 
== Véase también ==
 
 
 
*[[Matemática numérica]]
 
*[[Solución numérica de ecuaciones]]
 
 
*[[Algoritmo]]
 
*[[Algoritmo]]
  
== Bibliografía ==
+
== Bibliografía ==
  
 
*Colectivo de autores. (2004). Matemática numérica, Volumen 1. La Habana: Editorial Félix Varela. ISBN 959-258-713-2.
 
*Colectivo de autores. (2004). Matemática numérica, Volumen 1. La Habana: Editorial Félix Varela. ISBN 959-258-713-2.
  
[[Category:Solicitada]]
+
[[Category:Análisis_numérico]][[Category:Ecuaciones_lineales]]

Revisión del 17:37 12 abr 2011

El método de Whittaker es un método de la matemática numérica (por tanto interativo), utilizado para la solución numérica de ecuaciones lineales. Se dice que es un método quasi-Newton por sus semejanzas con el mismo. El método de Newton-Raphson tiene la ventaja de que su convergencia es cuadrática, por tanto es mucho más “rápida” que la lineal que se obtiene con otros métodos como el de Bisección.

Descripción del método

El método de Whittaker resuelve el problema presente en el método de Newton pues solamente se evalúa la derivada de la función para el primer punto y se hace este valor constante para las iteraciones restantes.

x_(n+1)= x_n-(f(x_n))/m

donde:

m = f'(x_0)

mientras que el método de Newton realiza las aproximaciones a la solución de la forma:

x_(n+1)= x_n-(f(x_n))/(f'(x_n))

La desventaja de este método reside en que es necesario evaluar la derivada de la función tantas veces como iteraciones se realicen, lo cual es muy costoso desde el punto de vista computacional, y es posible que la derivada se anule o cambie de signo lo que puede provocar la aparición de una tangente horizontal o una aproximación muy alejada de la raíz donde incluso no podría estar definida la función.

El éxito del método de Whittaker radica en la selección de un buen X0 que no anule a m y garantice una rápida convergencia.

Este método no tiene una convergencia cuadrática como el de Newton pero siempre es más rápida que la convergencia lineal del método de Bisección.

Algoritmo

En pseudocódigo

  1. Entrar X0
  2. Entrar TE
  3. xanterior = x
  4. repeat
  5. x = xanterior – f(xanterior) / f’(xanterior)
  6. Error = | x - xanterior |
  7. xanterior = x
  8. until Error < TE
  9. La raíz buscada es x y su error absoluto máximo es Error
  10. Terminar

Implementación en C++

<span class="co1">// devuelve el valor de la función evaluada en la variable x</span> <span class="kw4">double</span> funcion<span class="br0">(</span><span class="kw4">double</span> x<span class="br0">)</span><span class="br0">{</span> <span class="kw4">double</span> res <span class="sy1">=</span> ... <span class="co1">// ecuación que se desea solucionar evaluada en x;</span> <span class="kw1">return</span> res<span class="sy4">;</span> <span class="br0">}</span>   <span class="co1">// devuelve el valor de la derivada de la función evaluada en la variable x</span> <span class="kw4">double</span> derivada<span class="br0">(</span><span class="kw4">double</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw4">double</span> res <span class="sy1">=</span> ... <span class="co1">// derivada de la ecuación que se desea solucionar evaluada en x;</span> <span class="kw1">return</span> res<span class="sy4">;</span> <span class="br0">}</span>   <span class="co1">// devuelve el resultado de la ecuación mediante el método de Whittaker.</span> <span class="co1">// recibe una aproximación arbitraria a la solución y el error máximo permitido.</span> <span class="co1">// puede ser necesario devolver el ERROR. </span> <span class="co1">// Considérese el uso de una estructura que contenga el valor de x y el ERROR.</span> <span class="co1">// en este ejemplo solo se devuelve el valor de x.</span> <span class="kw4">double</span> whittaker<span class="br0">(</span><span class="kw4">double</span> x0, <span class="kw4">double</span> eMaximo<span class="br0">)</span><span class="br0">{</span> <span class="kw4">double</span> ERROR <span class="sy1">=</span> <span class="nu0">1000000000</span><span class="sy4">;</span> <span class="co1">// valor muy grande.</span> <span class="kw4">double</span> xAnterior <span class="sy1">=</span> x0<span class="sy4">;</span> <span class="kw4">double</span> m <span class="sy1">=</span> derivada<span class="br0">(</span>x0<span class="br0">)</span><span class="sy4">;</span> <span class="kw4">double</span> x<span class="sy4">;</span>   <span class="kw1">while</span><span class="br0">(</span>ERROR <span class="sy1">></span> eMaximo<span class="br0">)</span><span class="br0">{</span> x <span class="sy1">=</span> xAnterior – f<span class="br0">(</span>xAnterior<span class="br0">)</span> <span class="sy2">/</span> m<span class="sy4">;</span> Error <span class="sy1">=</span> <span class="sy3">|</span> x <span class="sy2">-</span> xAnterior <span class="sy3">|</span><span class="sy4">;</span> xAnterior <span class="sy1">=</span> x<span class="sy4">;</span> <span class="br0">}</span>   <span class="kw1">return</span> x<span class="sy4">;</span> <span class="br0">}</span>   <span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span><span class="br0">{</span> <span class="kw4">double</span> x0, eMaximo<span class="sy4">;</span> <span class="kw3">cin</span> <span class="sy1">>></span> x0 <span class="sy1">>></span> eMaximo<span class="sy4">;</span> <span class="kw3">cout</span> <span class="sy1"><<</span> whittaker<span class="br0">(</span>x0, eMaximo<span class="br0">)</span><span class="sy4">;</span> <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="br0">}</span>

Véase también

Bibliografía

  • Colectivo de autores. (2004). Matemática numérica, Volumen 1. La Habana: Editorial Félix Varela. ISBN 959-258-713-2.