Untitled
unknown
python
2 years ago
1.0 kB
7
Indexable
def falsa_posicao(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 * fb - b * fa) / (fb - fa) fx = f(x) i = 0 # Loop principal while abs(fx) > tol and i < maxiter: # Verifica em qual lado do intervalo ocorre a mudança de sinal if fa * fx < 0: b = x fb = fx else: a = x fa = fx # Calcula o novo ponto de interseção com o eixo das abscissas x = (a * fb - b * fa) / (fb - fa) 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 da falsa posição não convergiu após o número máximo de iterações.") else: return x
Editor is loading...