Implemente em python o algoritmo do Ponto Fixo para uma função
arbitrária.
Passo 1
Beleza, o que a questão pede é: “Implemente em Python o método do Ponto Fixo para uma função
qualquer.”
Isso cai dentro do conteúdo de “Métodos Numéricos para solução de equações não-lineares”.
O que a gente vai precisar:
Isso cai dentro do conteúdo de “Métodos Numéricos para solução de equações não-lineares”.
O que a gente vai precisar:
- Entender o que é ponto fixo de
, isto é, . - Saber iterar a fórmula
. - Ter parâmetros de parada: palpite inicial
, tolerância e número máximo de iterações.
Passo 2
Teoria na prática, sem enrolar:
- Definição de ponto fixo: um número
é ponto fixo de se - Método de iteração: a gente parte de um chute
e gera até que a diferença entre dois passos consecutivos seja pequena: - Parada alternativa: se a gente chegar em
iterações e não convergir, interrompe pra não ficar preso num loop infinito.
Passo 3
Agora encaixando isso num código Python passo a passo:
- A gente recebe uma função
g
, um chutex0
, uma tolerânciatol
e um limitenmax
. - Para cada iteração, calcula
x1 = g(x0)
. - Verifica
abs(x1 - x0) < tol
. Se sim, retornax1
. - Se não, faz
x0 = x1
e segue adiante. - Se chegar em
nmax
, retorna também o melhor palpite e avisa que estourou o limite.
Resposta
def ponto_fixo(g, x0, tol=1e-6, nmax=100):
"""
Método do Ponto Fixo para achar x tal que x = g(x).
g : função Python que recebe um float e retorna um float
x0 : palpite inicial (float)
tol : tolerância para |x_{n+1} - x_n|
nmax : número máximo de iterações
"""
x_prev = x0
for i in range(1, nmax+1):
x_next = g(x_prev) # iteração x_{n+1} = g(x_n)
if abs(x_next - x_prev) < tol: # critério de parada
return x_next # convergiu
x_prev = x_next # atualiza para próxima iteração
# se sair do loop, não convergiu em nmax iterações
print(f"Aviso: não convergiu em {nmax} iterações.")
return x_prev
# Exemplo de uso:
# g = lambda x: (x + 2/x) / 2 # ex: raiz quadrada de 2
# raiz2 = ponto_fixo(g, x0=1.0, tol=1e-8, nmax=50)
# print("Aproximação de sqrt(2):", raiz2)