Untitled
unknown
python
3 years ago
1.0 kB
10
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...