Untitled

 avatar
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...