Métodos de Análisis Numérico Método de Newton-Raphson Es un método que se utiliza para calcular los ceros de una función real de variable real. Aunque no sea siempre el mejor método para un problema dado, su simplicidad formal y su rapidez de convergencia hacen que con frecuencia, sea el primer algoritmo a considerar para esta tarea. El método de Newton-Raphson se basa en el desarrollo de Taylor de la función cuya raíz se quiere calcular. Consideremos la ecuación 𝑓(𝑥) = 0, y supongamos que posee una y sólo una solución 𝛼 ∈ [𝑎, 𝑏]. Partiendo de un punto 𝑥0 suficientemente cercano a dicha raíz, podemos escribir: 𝑓(𝛼) = 𝑓(𝑥0 ) + (𝛼 − 𝑥0 ) 𝑓′(𝑥0 ) + (𝛼−𝑥0 )2 2 𝑓′′(𝜉(𝛼) 𝑐𝑜𝑛 𝛼 < 𝜉(𝑝) < 𝑥0 . Suponiendo que 𝑓′(𝑥) no se anula en [𝑎, 𝑏], y que la diferencia 𝛼 − 𝑥0 es muy pequeña, el método de Newton-Raphson consiste en despreciar el sumando en (𝛼 − 𝑥0)2 2 del desarrollo anterior, quedándonos con la aproximación: 𝑓(𝛼) ≅ 𝑓(𝑥0 ) + (𝛼 − 𝑥0 ) 𝑓′(𝑥0 ) Como α es la solución de la ecuación f(x)=0, se tiene que f(α)=0 y por tanto, de la expresión anterior se sigue que: 𝑓(𝑥0 ) + (𝛼 − 𝑥0 ) 𝑓′𝑥0 ) ≅ 0 y despejando 𝛼 resulta: 𝛼 ≅ 𝑥0 − 𝑓(𝑥0 ) = 𝑥1 𝑓′(𝑥0 ) Esto constituye la base para el método de Newton, que empieza con una aproximación inicial 𝑥0 y genera la sucesión {𝑝𝑛 }∞ 𝑛 = 0, mediante 𝑥𝑛 = 𝑥𝑛−1 − 𝑓 (𝑥𝑛−1 ) , 𝑝𝑎𝑟𝑎 𝑛 ≥ 1. 𝑓 ′(𝑥𝑛−1 ) Figura 1. Al empezar con la aproximación inicial 𝑥0 , la aproximación 𝑥1 es la intersección con el eje x de la recta tangente a la gráfica de 𝑓 en (𝑥0 , f(𝑥0 )). La aproximación 𝑥2 es la intersección con el eje x de la recta tangente a la gráfica 𝑓 en (𝑥1 ,f(𝑥1 )) y así sucesivamente. Figura 1. Convergencia con el método de Newton La derivación del método de Newton por medio de la serie de Taylor señala la importancia de una aproximación precisa. La suposición crucial es que el término relacionado con (𝑝 − 𝑝0 )2 es, en comparación con |𝑝 − 𝑝0 |, tan pequeño que se puede eliminar. Esto será falso a menos que 𝑝0 sea una buena aproximación para 𝑝. Sólo así el método convergerá en la raíz, a excepción de algunos casos. Teorema: Sea 𝑓 ∈ 𝐶 2 > [𝑎, 𝑏]. Si 𝑝 ∈ (𝑎, 𝑏) es tal que 𝑓 (𝑝) = 0 y 𝑓 ′ (𝑝) ≠ 0, entonces existe una 𝛿 > 0 tal que el método de Newton genera una sucesión {𝑝𝑛 }∞ 𝑛=1 que converge a 𝑝 para cualquier aproximación inicial 𝑝0 ∈ [𝑝 − 𝛿, 𝑝 + 𝛿]. Este teorema establece que, de acuerdo con suposiciones razonables, el método de Newton converge, siempre que se seleccione una aproximación inicial suficientemente exacta. También implica que la constante 𝑘 que acota la derivada de 𝑔 y, por consiguiente, indica que la velocidad de convergencia del método disminuye a 0, conforme el procedimiento continúa. Este resultado es importante para la teoría del método de Newton, pero casi nunca se aplica en la práctica porque no nos dice cómo determinar δ. En una aplicación práctica, se selecciona una aproximación inicial y se generan aproximaciones sucesivas con el método de Newton. Ya sea que éstos converjan rápidamente a la raíz o será claro que la convergencia es poco probable. Método de la secante Es una variante del método de Newton-Raphson en la que el cálculo de la derivada se sustituye por una aproximación. Por definición, 𝑓 ′ (𝑝𝑛−1 ) = 𝑓(𝑥) − 𝑓(𝑝𝑛−1 ) 𝑥 → 𝑝𝑛−1 𝑥 − 𝑝𝑛−1 lim Si 𝑝𝑛−2 está cerca de 𝑝𝑛−1 , entonces 𝑓′(𝑝𝑛−1 ) ≈ 𝑓(𝑝𝑛−2 ) − 𝑓(𝑝𝑛−1 ) 𝑓(𝑝𝑛−1 ) − 𝑓(𝑝𝑛−2 ) = 𝑝𝑛−2 − 𝑝𝑛−1 𝑝𝑛−1 − 𝑝𝑛−2 Usando esa aproximación para 𝑓′(𝑝𝑛−1 ) en la fórmula de Newton se obtiene 𝑝𝑛 = 𝑝𝑛−1 − 𝑓(𝑝𝑛−1 )(𝑝𝑛−1 − 𝑝𝑛−2 ) 𝑓(𝑝𝑛−1 ) − 𝑓(𝑝𝑛−2 ) El método de la secante empieza con dos aproximaciones iniciales 𝑝0 y 𝑝1 , la aproximación 𝑝2 es la intersección en x de la recta que une los puntos (𝑝0 , 𝑓(𝑝0 )) y (𝑝1 , 𝑓(𝑝1 )). La aproximación 𝑝3 es la intersección en x de la recta que une los puntos (𝑝1 , 𝑓(𝑝1 ) y (𝑝2 , 𝑓(𝑝2 )) y así sucesivamente. Sólo se necesita una evaluación de la función por cada paso para el método de la secante después de haber obtenido 𝑝2 . En contraste, cada paso del método de Newton requiere una evaluación tanto de la función como de su derivada. Figura 2. Código Fuente function [NR] = NewtonRaphson(e,ite) function [S] = secante(e,p0,p1,ite) p0 = biseccion1(3); NR = zeros(15,1); tol = 0.00001; i=1; tol = 0.00001; i = 2; S = zeros(15,1); syms x; if e == 1 fx = x^5 + 3*x^3 + x - 1; if e == 1 while i <= ite q0 = p0^5 + 3*p0^3 + p0 - 1; q1 = p1^5 + 3*p1^3 + p1 - 1; p = p1 - ((q1*(p0 - p1))/(q0 - q1)); while i <= ite fp0=subs(fx,p0); z=diff(fx); dp0=subs(z,p0); p = p0 - (fp0 / dp0); NR(i,1) = p; S(i,1) = p; if (abs(p - p1)) < tol return end i = i + 1; p0 = p1; p1 = p; if abs(p - p0) < tol return; end i = i + 1; p0 = p; end end elseif e == 2 while i <= ite q0 = p0^7 - p0^2 - 3*p0 - 1; q1 = p1^7 - p1^2 - 3*p1 - 1; elseif e == 2 fx = x^7 - x^2 - 3*x - 1; p = p1 - ((q1*(p0 - p1))/(q0 - q1)); S(i,1) = p; while i <= ite fp0=subs(fx,p0); z=diff(fx); dp0=subs(z,p0); p = p0 - (fp0 / dp0); NR(i,1) = p; if abs(p - p0) < tol return; end i = i + 1; p0 = p; end end end if (abs(p - p1)) < tol return end i = i + 1; p0 = p1; p1 = p; end end N=zeros(15,3); e = input('\nNúmero de ejercicio: '); p0 = input('\nPunto inicial: '); p1 = input('\nPunto final: '); ite = 15; N(:,3)=secante(e,p0,p1,ite); N(:,2)=NewtonRaphson(e,ite); N(:,1) = 1:1:ite; T=array2table(N,'VariableNames',{'iteraciones','New ton-Raphson','Secante'}); disp(T); Ejecución del Código