Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2022, 15:12   #1
sa1nts_eye
Пользователь
 
Регистрация: 24.01.2022
Сообщений: 23
По умолчанию Определить количество членов ряда, сравнить полученное значение суммы ряда со значением функции

Python
Определить количество членов ряда, сравнить полученное значение суммы ряда со
значением функции (левая часть представленного выражения)

с точностью e = 0.001

Код:
from math import atan
x = float(input('x = '))
e0 = ((1+x*x)*atan(x)-x)/2
x2kf = 1
s = 0
el = x
eps = 1e-3
k = 1
while abs(s-e0)>eps:
    s += el
    x2kf *= -x*x
    el *= 1/(4*k*k-1)*x2kf
    k += 1
print(s, ((1+x*x)*atan(x)-x)/2)
почему при принте s выдаёт nan ???
Изображения
Тип файла: png Снимок.PNG (12.5 Кб, 6 просмотров)
sa1nts_eye вне форума Ответить с цитированием
Старый 09.02.2022, 19:29   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Первая формула вроде так должна записываться:
Код:
e0 = (1+x*x)*atan(x) / 2 - x/2
Какое x вводится? В задании должна быть указана область сходимости суммы.
У меня получается, что сумма будет сходиться, если abs(x) <= 1.
Чем меньше x, тем быстрее сходимость.
Формула суммы записана неверно. Там суммирование должно быть с i = 1.
Тут есть сильное подозрение, но заниматься этим не хочется.
Тупое представление формулы (с учётом замечания) даёт:
Код:
from math import atan

x = 0.8   # в радианах
y = (1+x*x)*atan(x)/2 - x/2
print('x = ', x, 'Y = ', y)
eps = 0.000001
n = 1
an = (-1)**(n+1)*x**(2*n+1)/(4*n**2-1)
rsum = an
while abs(an) > eps:
    n += 1
    an = ((-1)**(n+1)) * (x**(2*n + 1)) / (4*(n**2) - 1)
    rsum += an
    if n <= 5:
        print(n, an)   # это для тестирования
#    print(an)
print('x= ', x, 'Summa= ', rsum, 'N = ', n)
Результат:
Код:
x =  0.8 Y =  0.15328757262331327
2 -0.021845333333333338
3 0.005991862857142859
4 -0.002130440126984128
5 0.0008676701608080813
x=  0.8 Summa=  0.15328734884782413 N =  16
PS: Введи, например, 1.2 и увидишь как быстро "загнётся" от переполнения
Как-то так, ...

Последний раз редактировалось ViktorR; 09.02.2022 в 22:30. Причина: Появилось немного времени
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Определить количество членов ряда, необходимых для вычисления числа Пи с заданной точностью ε по формуле LanaTsvik Помощь студентам 11 17.12.2016 15:37
Вычисление суммы членов степенного ряда, Паскаль theonlyone Помощь студентам 1 04.05.2015 14:46
Нахождение суммы членов ряда vinci Общие вопросы C/C++ 0 16.03.2012 13:49
суммы n членов ряда для заданного х gylayko Помощь студентам 3 06.10.2011 21:08
вычисление суммы членов ряда...(с++) DiLemma Помощь студентам 0 20.04.2010 18:25