1.2.2 Raízes de Equações — Métodos Abertos — Newton Raphson
1. Introdução
O método de Newton-Raphson é outro método aberto, pois a convergência à raiz não depende da delimitação de um intervalo, possuindo as propriedades descritas do Método do Ponto Fixo.
Provavelmente é o método numérico mais aplicado computacionalmente para a aproximação de raízes, graças à sua capacidade de rápida convergência.
2. Desenvolvimento do Método

Na Figura metodo, observamos que a partir da aproximação inicial da raiz é possível estender uma reta tangente do ponto
. O ponto onde esta tangente intercepta o eixo das abcissas é a segunda estimativa,
. Desta figura, é visível que a inclinação é equivalente à
isolando , aparece naturalmente a iteração conhecida como o Método de Newton:
Como no Método do Ponto Fixo, basta executar sucessivas aproximações para convergir à raiz, tendo como critério de parada um erro pré-definido.
3. Implementação
A implementação deste método consiste em basicamente alterar o código do Ponto Fixo de forma utilizar a chamada da expressão deduzida ao invés da própria função :
-
def newtonRaphson(G, diffG, x0, errto, imax):
-
"""
-
return the root of a function (using the Newton-Raphson Method)
-
-
newtonRaphson(fun, diffFun, x0, errto, imax)
-
-
* fun: Function where find the roots
-
* diffFun: analytic derivative of fun
-
* x0: next point (estimative)
-
* errto: tolerated error
-
* imax: max of iterations allowed
-
-
Author: Pedro Garcia [sawp@sawp.com.br]
-
see: http://www.sawp.com.br
-
License: Creative Commons
-
-
Dec 2009
-
"""
-
-
x1 = x0 – G(x0)/diffG(x0) # fixed point x1 = G(x0)
-
iterCount = 0
-
errno = fabs((x1 – x0)/x1)
-
-
while errno > errto and iterCount < imax:
-
x0 = x1
-
x1 = x0 – G(x0)/diffG(x0) # in fixed point will be x1 = G(x0)
-
iterCount += 1
-
-
if x1 != 0:
-
errno = fabs((x1 – x0)/x1)
-
-
return x1
Veja que a implementação do método de Newton-Raphson é dependente de mais uma função, que precisa ser declarada. Embora este método não dependa da escolha da melhor função G, como ocorre no método do Ponto Fixo, o codificador precisa implementar tanto a função que se deseja conhecer a raiz como a sua derivada.
Um exemplo de utilização deste código pode ser encontrado em http://www.sawp.com.br/code/rootfind/newtonraphson.py
4. Observações
Embora o método do Newton-Raphson seja quase sempre o mais eficiente na busca de raízes, ele nem sempre é aplicável. Um exemplo interessante está em comparar as funções de avaliação do Método do Ponto Fixo e as do código de Newton-Raphson.
Ao utilizarmos Newton-Raphson para buscar a raiz da função:
G1 = exp(1.d0)**(-x/2.d0)
e usando sua derivada:
diffG1 = (1/2)*(exp(1.d0))**(-(1.d0/2.d0)*x)
o programa gera um resultado que não converge à raiz. Provavelmente se o código for compilado e executado, o resultado será “NaN” ou “infinity”.
5. Copyright
Este documento está disponível sob a licença Creative Commons. As regras dos direitos de cópia deste conteúdo estão acessíveis em http://creativecommons.org/licenses/by-nc-nd/2.5/br/.
Você pode ler as eventuais respostas desta entrada
através do RSS 2.0 feed.
As respostas estão encerradas, mas você pode
trackback
a partir do seu próprio site.