Untitled
unknown
python
2 years ago
997 B
7
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...