A constante de Euler-Mascheroni, denotada por
, aparece em diversas áreas da matemática, como análise e teoria dos números. Seu valor aproximado é
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.
Passo 1
O enunciado pede que façamos um programa em Python que aproxime a constante de Euler–Mascheroni
usando um número finito de termos informado pelo usuário, calcule em cada passo o erro relativo
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.
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
. Definir o valor conhecido de
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
de 2 até
, calcular o termo
, 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é
) e criar o gráfico da evolução do erro relativo. Usamos escala logarítmica no eixo
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()