Escreva um programa que aplique os métodos da bisseção, falsa posição e secante para resolver f(x)=x^{2}-3. Compare o número de iterações para cada método.

Passo 1

O problema é encontrar a raiz de
f(x) = x^{2} - 3
usando três métodos numéricos de raiz: bisseção, falsa posição (regula falsi) e secante. Vamos implementar cada método em Python, contar quantas iterações cada um leva para atingir uma tolerância \text{tol}=10^{-6} e comparar.

Passo 2

Definimos a função f em Python:
def f(x):
 return x**2 - 3

Passo 3

Implementamos o método da bisseção. A cada iteração calculamos o ponto médio c=(a+b)/2, testamos o sinal de f\text{(c)} e substituímos um dos extremos. Paramos quando (b-a)/2 < \text{tol}.
def bissecao(a, b, tol\(=1\)e-6):
 fa, fb = f(a), f(b)
 it \(=0\)
 while (b - a)/2 > tol:
 it \(+=1\)
 c = (a + b)/2
 fc = f\text{(c)}
 if fa * fc < 0:
 b, fb = c, fc
 else:
 a, fa = c, fc
 return (a + b)/2, it

Passo 4

Implementamos o método da falsa posição. A cada iteração aproximamos a raiz por
c = b - f(b)\,\frac{b - a}{f(b) - f(a)},
atualizamos um extremo e paramos quando \lvert f\text{(c)}\rvert < \text{tol}.
def \(falsa_posicao\)(a, b, tol\(=1\)e-6):
 fa, fb = f(a), f(b)
 it \(=0\)
 while True:
 it \(+=1\)
 c = b - fb*(b - a)/(fb - fa)
 fc = f\text{(c)}
 if abs(fc) < tol:
 return c, it
 if fa * fc < 0:
 b, fb = c, fc
 else:
 a, fa = c, fc

Passo 5

Implementamos o método da secante. Partimos de dois valores iniciais x_0 e x_1 e iteramos
x_{n+1} = x_n - f(x_n)\,\frac{x_n - x_{n-1}}{f(x_n) - f(x_{n-1})},
parando quando \lvert f(x_{n+1})\rvert < \text{tol}.
def secante(x0, x1, tol\(=1\)e-6):
 it \(=0\)
 f0, f\(1=\) f(x0), f(x1)
 while True:
 it \(+=1\)
 x\(2=\) x1 - f1*(x1 - x0)/(f1 - f0)
 f\(2=\) f(x2)
 if abs(f2) < tol:
 return x2, it
 x0, f0, x1, f\(1=\) x1, f1, x2, f2

Passo 6

Executamos os três métodos com intervalo inicial [1,2] e tolerância 10^{-6}:
\(root_bis\), \(it_bis\) = bissecao(1, 2, tol\(=1\)e-6)
\(root_fal\), \(it_fal\) = \(falsa_posicao\)(1, 2, tol\(=1\)e-6)
\(root_sec\), \(it_sec\) = secante(1, 2, tol\(=1\)e-6)
print("Bisseção: raiz =", \(root_bis\), "iterações =", \(it_bis\))
print("Falsa posição: raiz =", \(root_fal\), "iterações =", \(it_fal\))
print("Secante: raiz =", \(root_sec\), "iterações =", \(it_sec\))

Resposta

Bisseção: 20 iterações
Falsa posição: 5 iterações
Secante: 4 iterações

Exercícios relacionados