Python

Вычислить сумму бесконечного ряда с заданной точностью a.(python)

Не работает код, помогите разобраться.
n=1
rez = 0
a = 0.01
i = 0
while abs(i) > a:
rez += i
i = ((-1)**n)*((2*n+1)/((n**3)*(n+1)))
print('Сумма бексконечного ряда =',float(rez))
Ответ по результату онлайн калькулятора: -1.3377
Условие остановки цикла while неверно. Оно должно быть abs(i) > a, но на данный момент оно составляет abs(i) < a. Это означает, что цикл while никогда не завершится, и код будет выполняться бесконечно.

Переменная n никогда не обновляется, поэтому она всегда будет равна 1. Это означает, что i всегда будет одним и тем же значением, и цикл while не будет суммировать бесконечную серию, а просто будет повторять одно и то же вычисление снова и снова.

Формула для i не является корректной. Кажется, что это смесь различных формул, но это не формула для суммы бесконечного ряда.

 n = 1 
rez = 0
a = 0.01
i = 1 / n**2
while abs(i) > a:
rez += i
n += 1
i = (-1)**(n-1) * 1 / n**2
print('Сумма бесконечного ряда =', rez)
Этот код вычисляет сумму ряда 1 + (-1) / 2^2 + 1 / 3^2 + (-1) / 4^2 + ..., который имеет известную сумму pi^2 / 6. Код завершается, когда абсолютное значение i меньше a, давая приближенное значение суммы с точностью a.
Владимир Курняков
Владимир Курняков
238
Лучший ответ
Не работает, потому что i всегда меньше a и while не выполняется

И ещё мне очень интересно, как же вычислить сумму бесконечного ряда, если он бесконечный.

А так, вот примерный код (дополни)

 from decimal import Decimal, getcontext 

def sum_series(precision):
getcontext().prec = precision
series_sum = Decimal(0)
# здесь пиши, сколько тебе надо прибавлять
return series_sum

precision = 20
result = sum_series(precision)
print(result)
Валерий Китаев from decimal import *
n = Decimal(1)
def sum_series(precision):
getcontext().prec = precision
series_sum = Decimal(0)
series_sum += ((-1) ** n) * ((2 * n + 1) / ((n ** 3) * (n + 1)))
return series_sum
precision = 20
result = sum_series(precision)
print(result)
Получается: - 1.5
Валерий Китаев n = 1
rez = 0
a = 0.01
i = 0
for i in range(1000):
i = ((-1) ** n) * ((2 * n + 1) / ((n ** 3) * (n + 1)))
rez += i
n+=1
print('Сумма бесконечного ряда =',float(rez))
Вот мой код. Он работает.