A constante de Euler-Mascheroni, denotada por \gamma, aparece em diversas áreas da matemática, como análise e teoria dos números. Seu valor aproximado é \gamma \approx 0.577215664901532 \mathrm{e} pode ser aproximada pela série na Equação 11.17. Escreva um programa em Python que calcule essa aproximação para um número de iterações informado pelo usuário. Calcule o erro relativo em cada passo e, ao final, exiba um gráfico com a evolução desse erro.
\gamma=\sum_{n=2}^{\infty}(-1)^{n} \frac{\ln (n)}{n}

Passo 1

O enunciado pede que façamos um programa em Python que aproxime a constante de Euler–Mascheroni
\gamma = \sum_{n=2}^{\infty} (-1)^{n}\,\frac{\ln(n)}{n}
usando um número finito de termos informado pelo usuário, calcule em cada passo o erro relativo \displaystyle\frac{|\text{aprox} - \gamma|}{|\gamma|}
e, ao final, apresente um gráfico mostrando como esse erro evolui com o número de iterações. Vamos precisar das bibliotecas padrão de matemática e do Matplotlib para plotar.

Passo 2

Importar as bibliotecas necessárias e ler do usuário o número de iterações N. Definir o valor conhecido de \gamma como constante de referência:
import math
import matplotlib.pyplot as plt
\[gamma_true =0.577215664901532\]
N = int(input("Informe o número de iterações: "))

Passo 3

Inicializar a soma parcial e a lista que vai guardar o erro relativo em cada iteração. Para cada n de 2 até N, calcular o termo \displaystyle(-1)^{n}\,\frac{\ln(n)}{n}, atualizar a soma parcial, calcular o erro relativo e armazená-lo:
errors = []
approximation \(=0.0\)

for n in range(2, N\(+1\)):
 term = (-1)**n * math.log(n) / n
 approximation \(+=\) term
 \(rel_error\) = abs(approximation - \(gamma_true\)) / abs(\(gamma_true\))
 errors.append(\(rel_error\))

Passo 4

Gerar a lista de iterações correspondentes (de 2 até N) e criar o gráfico da evolução do erro relativo. Usamos escala logarítmica no eixo y para visualizar melhor a convergência:
iterations = list(range(2, N\(+1\)))

plt.figure()
plt.plot(iterations, errors, marker='o', linestyle='-')
plt.yscale('log')
plt.xlabel("Iteração n")
plt.ylabel("Erro relativo")
plt.title("Evolução do erro relativo na aproximação de γ")
plt.grid(True, which="both", ls="--")
plt.show()

Passo 5

Empacotar tudo em uma função main() e usar o bloco if __name__ == "__main__": para permitir execução direta ou importação sem rodar imediatamente:
def main():
\[gamma_true =0.577215664901532\]
 N = int(input("Informe o número de iterações: "))
 errors = []
 approximation \(=0.0\)

 for n in range(2, N\(+1\)):
 term = (-1)**n * math.log(n) / n
 approximation \(+=\) term
 \(rel_error\) = abs(approximation - \(gamma_true\)) / abs(\(gamma_true\))
 errors.append(\(rel_error\))

 iterations = list(range(2, N\(+1\)))
 plt.figure()
 plt.plot(iterations, errors, marker='o', linestyle='-')
 plt.yscale('log')
 plt.xlabel("Iteração n")
 plt.ylabel("Erro relativo")
 plt.title("Evolução do erro relativo na aproximação de γ")
 plt.grid(True, which="both", ls="--")
 plt.show()

if __name__ \(==\) "__main__":
 main()

Resposta

import math
import matplotlib.pyplot as plt

def main():
\[gamma_true =0.577215664901532\]
 N = int(input("Informe o número de iterações: "))
 errors = []
 approximation \(=0.0\)

 for n in range(2, N\(+1\)):
 term = (-1)**n * math.log(n) / n
 approximation \(+=\) term
 \(rel_error\) = abs(approximation - \(gamma_true\)) / abs(\(gamma_true\))
 errors.append(\(rel_error\))

 iterations = list(range(2, N\(+1\)))
 plt.figure()
 plt.plot(iterations, errors, marker='o', linestyle='-')
 plt.yscale('log')
 plt.xlabel("Iteração n")
 plt.ylabel("Erro relativo")
 plt.title("Evolução do erro relativo na aproximação de γ")
 plt.grid(True, which="both", ls="--")
 plt.show()

if __name__ \(==\) "__main__":
 main()

Exercícios relacionados