Uma forma de aproximar o valor de \pi (pi) é por meio da série de Leibniz:
\pi=4 \times\left(1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}-\cdots\right)
Essa série converge lentamente, mas permite aproximar \pi usando apenas operações aritméticas simples.
a) Implemente uma função chamada aproxima_pi(tolerancia) que calcule o valor aproximado de \pi usando a série acima. A repetição deve continuar enquanto a diferença entre duas aproximações consecutivas for maior que a tolerância informada.
b) A função deve retornar o valor aproximado de \pi e o número de termos utilizados.

Passo 1

O enunciado pede duas coisas claras:
  • Implementar uma função chamada aproxima_pi(tolerancia) que calcule uma aproximação de \pi usando a série de Leibniz \pi = 4\times\left(1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \cdots\right).
  • A repetição (iteração) deve continuar enquanto a diferença entre duas aproximações consecutivas for maior que a tolerância informada. A função deve retornar a aproximação de \pi e o número de termos utilizados.
Entradas e saídas esperadas:
  • Entrada: um número real \text{tolerancia} (deve ser positivo).
  • Saída: uma tupla com (aproximação de \pi, número de termos usados).

Passo 2

Vamos entender a série e o termo geral. A série de Leibniz é uma série alternada com termo geral
a_k = \frac{(-1)^k}{2k+1},\qquad k=0,1,2,\dots
O k-ésimo somatório parcial (somando os primeiros n termos, com n termos) é
S_n = \sum_{k=0}^{n-1} a_k = 1 - \frac{1}{3} + \frac{1}{5} - \cdots + \frac{(-1)^{n-1}}{2n-1}.
A aproximação de \pi usando esses n termos é
\pi_n = 4 S_n.

Passo 3

Qual é a diferença entre duas aproximações consecutivas \pi_n e \pi_{n-1}? Se S_n = S_{n-1} + a_{n-1}, então
\pi_n - \pi_{n-1} = 4(S_n - S_{n-1}) = 4 a_{n-1} = 4\cdot\frac{(-1)^{n-1}}{2n-1}.
Em módulo,
\left|\pi_n - \pi_{n-1}\right| = \frac{4}{2n-1}.
O enunciado pede para repetir enquanto a diferença entre aproximações consecutivas for maior que a tolerância, ou seja, parar quando
\left|\pi_n - \pi_{n-1}\right| \le \text{tolerancia}.
Usando a fórmula acima, essa condição equivale a testar \dfrac{4}{2n-1} (mas implementaremos diretamente comparando \pi_n e \pi_{n-1}).

Passo 4

Propriedades úteis (para entender por que o critério é razoável):
  • A série é alternada e seus termos têm módulo decrescente para k grande; pelo teste da série alternada, o resto (erro) após n termos satisfaz \left|\pi - \pi_n\right| \le 4\cdot\frac{1}{2n+1}.Isso dá uma cota simples do erro verdadeiro em função de n.
  • O critério pedido (diferença entre aproximações consecutivas \le tolerância) é natural para séries alternadas e é fácil de implementar. Ele também tem relação direta com a cota acima, porque a diferença entre duas aproximações consecutivas é proporcional ao termo adicionado.

Passo 5

Plano passo a passo do algoritmo (como implementá-lo na prova/numa prova prática):
  1. Verificar se \text{tolerancia} > 0. Se não for, sinalizar erro (não faz sentido tolerância não positiva).
  2. Inicializar:
    • soma parcial S = 1.0 (primeiro termo \frac{(-1)^0}{1}=1),
    • n = 1 (número de termos usados até agora),
    • \pi_{\text{prev}} = 4S = 4.0,
    • sinal = -1 (para o próximo termo),
    • denominador = 3 (o próximo denominador ímpar).
  3. Repetir:
    • calcular S \leftarrow S + \text{sinal}\cdot(1/\text{denominador}),
    • calcular \pi_{\text{cur}} = 4S,
    • incrementar n \leftarrow n + 1,
    • verificar se |\pi_{\text{cur}} - \pi_{\text{prev}}| \le \text{tolerancia}. Se sim, parar; caso contrário, atualizar \pi_{\text{prev}} \leftarrow \pi_{\text{cur}}, inverter o sinal ( \text{sinal}\leftarrow -\text{sinal}), e aumentar \text{denominador} \leftarrow \text{denominador} + 2.
  4. Ao parar, retornar (\pi_{\text{cur}}, n).
Observação: a comparação usa a diferença entre aproximações consecutivas exatamente como o enunciado pede.

Passo 6

Dicas práticas para a prova:
  • Se quiser antecipar aproximadamente quantos termos serão necessários para uma dada \text{tolerancia}, use a fórmula aproximada da diferença: \frac{4}{2n-1} \le \text{tolerancia} \quad\Rightarrow\quad n \gtrsim \frac{1}{2}\left(\frac{4}{\text{tolerancia}}+1\right).Por exemplo, para \text{tolerancia}=10^{-6}, isso dá n da ordem de 2{,}000{,}000 (ou seja, converge muito devagar).
  • Sempre trate \text{tolerancia} com cuidado: valores muito pequenos farão o laço demorar muito.

Passo 7

Agora, segue a implementação final em Python da função pedida. Ela segue exatamente o plano do passo anterior e retorna a aproximação de \pi e o número de termos usados.

Resposta

def aproxima_pi(tolerancia):
    """
    Aproxima pi usando a série de Leibniz até que a diferença entre
    duas aproximações consecutivas seja <= tolerancia.
    Retorna uma tupla (pi_aproximado, n_termos).
    """
    if tolerancia <= 0:
        raise ValueError("tolerancia deve ser um número positivo")

    S = 1.0  # soma parcial dos termos a_k = (-1)^k / (2k+1)
    n = 1    # número de termos usados até agora
    pi_prev = 4.0 * S

    sinal = -1.0
    denominador = 3.0

    while True:
        S += sinal / denominador
        pi_cur = 4.0 * S
        n += 1

        if abs(pi_cur - pi_prev) <= tolerancia:
            return pi_cur, n

        pi_prev = pi_cur
        sinal = -sinal
        denominador += 2.0

Exercícios relacionados