Implemente em python o algoritmo do Ponto Fixo para uma função g 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:
  • 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:
  1. Definição de ponto fixo: um número x^* = g(x^*) é ponto fixo de xn+1 = g(xn), se |xn+1 - xn| < varepsilon
  2. Método de iteração: a gente parte de um chute e gera até que a diferença entre dois passos consecutivos seja pequena:
  3. 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 chute x0, uma tolerância tol e um limite nmax.
  • Para cada iteração, calcula x1 = g(x0).
  • Verifica abs(x1 - x0) < tol. Se sim, retorna x1.
  • 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)

Exercícios relacionados