Untitled
unknown
python
3 years ago
997 B
10
Indexable
def bissecao(f, a, b, tol=1e-6, maxiter=100):
# Verifica se a função muda de sinal nos extremos do intervalo
if f(a) * f(b) >= 0:
raise ValueError("A função não muda de sinal no intervalo fornecido.")
# Inicializa as variáveis
fa = f(a)
fb = f(b)
x = (a + b) / 2
fx = f(x)
i = 0
# Loop principal
while abs(fx) > tol and i < maxiter:
# Divide o intervalo pela metade e verifica em qual metade ocorre a mudança de sinal
if fa * fx < 0:
b = x
fb = fx
else:
a = x
fa = fx
# Calcula o ponto médio do novo intervalo
x = (a + b) / 2
fx = f(x)
# Incrementa o contador de iterações
i += 1
# Verifica se o algoritmo convergiu ou atingiu o número máximo de iterações
if abs(fx) > tol:
raise RuntimeError("O método de bisseção não convergiu após o número máximo de iterações.")
else:
return x
Editor is loading...