No post sobre o Método do Ponto Fixo terminei com a observação de que a vantagem real do MPF não é velocidade, mas sim que ele serve de base para métodos mais rápidos, por exemplo, o método de newton.

A ideia central do MPF é construir uma função de iteração φ(x)\varphi(x) tal que φ(ξ)<1|\varphi'(\xi)| < 1 na vizinhança da raiz. Quanto menor φ(ξ)|\varphi'(\xi)|, mais rápida a convergência. Então o que acontece se a gente escolher φ\varphi de forma que φ(ξ)=0\varphi'(\xi) = 0 exatamente?

Derivando a fórmula

Toda função de iteração válida tem a forma

φ(x)=x+A(x)f(x)\varphi(x) = x + A(x) \cdot f(x).

Derivando:

φ(x)=1+A(x)f(x)+A(x)f(x)\varphi'(x) = 1 + A'(x)f(x) + A(x)f'(x)

Na raiz ξ\xi, f(ξ)=0f(\xi) = 0, então

φ(ξ)=A(ξ)f(ξ)+1\varphi'(\xi) = A(\xi)f'(\xi) + 1.

Para que φ(ξ)=0\varphi'(\xi) = 0:

A(ξ)f(ξ)+1=0    A(ξ)=1f(ξ)A(\xi)f'(\xi) + 1 = 0 \implies A(\xi) = -\frac{1}{f'(\xi)}.

Assumindo essa forma para todo xx, ou seja, A(x)=1/f(x)A(x) = -1/f'(x), e substituindo:

φ(x)=xf(x)f(x)\varphi(x) = x - \frac{f(x)}{f'(x)}

Essa é a função de iteração do Método de Newton. A relação de recorrência fica:

xk+1=xkf(xk)f(xk),k=0,1,2,x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)}, \quad k = 0, 1, 2, \ldots

A interpretação geométrica

Tem uma forma mais intuitiva de chegar na mesma fórmula. A reta tangente à curva f(x)f(x) no ponto (xk,f(xk))(x_k, f(x_k)) é:

rk(x)=f(xk)+f(xk)(xxk)r_k(x) = f(x_k) + f'(x_k)(x - x_k)

O zero dessa reta, ou seja, onde ela cruza o eixo xx:

rk(x)=0    x=xkf(xk)f(xk)r_k(x) = 0 \implies x = x_k - \frac{f(x_k)}{f'(x_k)}

Que é exatamente xk+1x_{k+1}. Newton está aproximando a função por sua tangente a cada iteração e usando o zero dessa reta como próxima estimativa. Se a função for “bem comportada” perto da raiz, a tangente é uma boa aproximação local e o método avança rápido.

Método de Newton - f(x) = x·log10(x) − 1
Ponto inicial x₀ = 2 · precisão ε = 10−5
-0.400.422.53x1x0
x0 (atual)
2.00000000
x1 = xk − f(xk)/f'(xk)
2.54117607
f(xk)
-3.979e-1
erro relativo
2.13e-1
Iteração 0 / 4
f(x) ponto atual x_k reta tangente| x_k+1 (zero da tangente) raiz real ≈ 2.50618

Veja como as iterações saltam direto para perto da raiz. A partir do segundo passo, já está na 5ª casa decimal.

Convergência quadrática

O que faz Newton especial é a ordem de convergência. Para o MPF, em geral, a ordem é linear (p=1p = 1): o erro cai por um fator constante a cada iteração. Para Newton, como φ(ξ)=0\varphi'(\xi) = 0, a análise da convergência mostra que o erro satisfaz:

xk+1ξf(ξ)2f(ξ)xkξ2|x_{k+1} - \xi| \approx \frac{|f''(\xi)|}{2|f'(\xi)|} \cdot |x_k - \xi|^2

Ordem p=2p = 2: o erro na iteração seguinte é proporcional ao quadrado do erro atual. Na prática, isso significa que o número de dígitos corretos dobra a cada iteração.

A derivada de φ\varphi do método de Newton é φ(x)=f(x)f(x)/[f(x)]2\varphi'(x) = f(x)f''(x)/[f'(x)]^2. Na raiz, f(ξ)=0f(\xi) = 0, logo φ(ξ)=0\varphi'(\xi) = 0, que é justamente o que queríamos quando derivamos a fórmula.

Implementando em Python

newton.py
1
import math
2
3
def f(x):
4
return x * math.log10(x) - 1
5
6
def df(x):
7
return math.log10(x) + 1 / math.log(10)
8
9
def newton(f, df, x0, eps=1e-5):
10
x = x0
11
k = 0
12
while True:
13
fx = f(x)
14
dfx = df(x)
15
x_novo = x - fx / dfx
16
erro = abs(x_novo - x) / abs(x_novo)
17
k += 1
18
print(f"Iteração {k:2d}: x = {x_novo:.8f}, f(x) = {f(x_novo):.2e}, erro = {erro:.2e}")
19
if erro < eps:
20
return x_novo
21
x = x_novo
22
23
raiz = newton(f, df, x0=2)
24
print(f"\nRaiz encontrada: {raiz:.6f}")

Rodando para a mesma f(x)=xlog10(x)1f(x) = x \cdot \log_{10}(x) - 1 do post da bissecção, a partir de x0=2x_0 = 2:

1
Iteração 1: x = 2.54117607, f(x) = 2.93e-02, erro = 2.13e-01
2
Iteração 2: x = 2.50630938, f(x) = 1.04e-04, erro = 1.39e-02
3
Iteração 3: x = 2.50618415, f(x) = 1.36e-09, erro = 5.00e-05
4
Iteração 4: x = 2.50618415, f(x) = 0.00e+00, erro = 6.51e-10
5
6
Raiz encontrada: 2.506184

4 iterações para ε=105\varepsilon = 10^{-5}. A bissecção precisou de 17 para o mesmo resultado.

O padrão de convergência quadrática aparece nas colunas de erro: de 1.39e-02 para 1.06e-04 é uma queda de 10410^4, não 10210^2 como seria no caso linear, porque o erro já está pequeno o suficiente para o termo quadrático dominar.

A influência do chute inicial

Para ver na prática o que o teorema diz, considere f(x)=x3x1f(x) = x^3 - x - 1, com f(x)=3x21f'(x) = 3x^2 - 1.

a) Chute inicial x1=1x_1 = 1

kkxkx_kf(xk)f(x_k)f(xk)f'(x_k)xk+1x_{k+1}
11.000000−1.0000002.0000001.500000
21.5000000.8750005.7500001.347826
31.3478260.1006814.4499051.325200
41.3252000.0020574.2684631.324718
51.324718≈ 04.2646341.324718

Raiz x1,324718x \approx 1{,}324718 com 6 casas decimais, convergida em 5 iterações.

b) Chute inicial x1=0,6x_1 = 0{,}6

A derivada f(x)=3x21f'(x) = 3x^2 - 1 se anula em x=1/30,577x = 1/\sqrt{3} \approx 0{,}577. O ponto x1=0,6x_1 = 0{,}6 está exatamente nessa vizinhança crítica:

f(0,6)=1,384,f(0,6)=0,08f(0{,}6) = -1{,}384, \quad f'(0{,}6) = 0{,}08
x2=0,61,3840,0817,9x_2 = 0{,}6 - \frac{-1{,}384}{0{,}08} \approx 17{,}9

A derivada quase nula faz a reta tangente ficar quase horizontal, disparando x2x_2 para longe da raiz. O método não diverge, ele encontra a raiz, mas leva 12 iterações para chegar lá, contra 5 do chute x1=1x_1 = 1:

kkxkx_kf(xk)f(x_k)
10.600000−1.3840
217.9000005716.44
311.9468021692.17
47.985520500.24
55.356909147.37
63.62499643.01
72.50558912.22
81.8201293.210
91.4610440.658
101.3393230.063
111.3249130.000831
121.324718≈ 0

Desvantagens

O método exige f(xk)0f'(x_k) \neq 0 em todo passo. Se a derivada for zero ou muito próxima de zero, a divisão explode e o método diverge.

A convergência também não é garantida globalmente. O teorema diz que existe um intervalo Iˉ\bar{I} em torno de ξ\xi tal que, para qualquer x0Iˉx_0 \in \bar{I}, o método convergel, mas não especifica o tamanho desse intervalo. Em funções com muitos zeros ou regiões planas, um chute inicial ruim pode levar o método para longe da raiz que você quer encontrar.

Para esses casos, a estratégia comum é usar a bissecção primeiro para isolar a raiz num intervalo pequeno, e então entregar esse intervalo para Newton refinar rapidamente.