Escreva um programa que aplique os métodos da bisseção, falsa posição e secante para resolver
. Compare o número de iterações para cada método.
Passo 1
O problema é encontrar a raiz de
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
e comparar.
Passo 2
Definimos a função
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
, testamos o sinal de
e substituímos um dos extremos. Paramos quando
.
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
atualizamos um extremo e paramos quando
.
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
e
e iteramos
parando quando
.
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
e tolerância
:
\(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:
iterações
Falsa posição: iterações
Secante: iterações
Falsa posição:
Secante: