Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 12, 2020 17:07:16

Stanislav97
Зарегистрирован: 2020-01-12
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

вычисление суммы ряда e ^(x) с заданной точностью

Камрады, need help:
Задача - с заданой точностью ε, (0<ε<1), найти е^х=1+x/1!+x^2/2!+…+x^n/n!
проверить значение

Офлайн

#2 Янв. 13, 2020 02:07:24

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

вычисление суммы ряда e ^(x) с заданной точностью

Надо эту задачу делать через рекуррентные соотношения (то есть функция факториала не используется).

Надо формулу n-ого члена ряда поделить на формулу (n-1)-ого члена ряда. Это даст коэффициент, на который умножается каждый член ряда, чтобы получить следующий член ряда. Потом, начиная с первого члена ряда, нужно умножать член ряда на этот коэффициент; будет получаться следующий член ряда, который нужно прибавлять к частичной сумме. Таким образом, когда частичная сумма сойдётся к одному числу в пределах заданной точности (то есть при добавлении новых членов ряда частичная сумма в пределах заданной точности не будет меняться), можно прекратить вычисление.

Для e^(-x) делал:

  
#!/usr/bin/env python3
 
# вычисляет сумму ряда e ^ (-x) с заданной точностью
#
# e ^ (-x) = 1 - x + (x ^ 2) / 2! - (x ^ 3) / 3! +
#            + ... + (-1 ^ n) * (x ^ n) / n!
 
import math
 
def emx(x, eps):
    s, sl, psl, i = 0, 1, 0, 1
    while abs(sl - psl) > eps:
        s += sl
        psl = sl
        sl *= -x / i
        i += 1
    return s
 
if __name__ == '__main__':
 
    print(math.exp(-4))
 
    for e in (
        1,
        0.1,
        0.01,
        0.001,
        0.0001,
        0.00001,
        0.000001,
        0.0000001,
        ):
        x = 4
        print('{} eps={}'.format(emx(x, e), e))

Здесь пример для синуса.


tags: row emx



Отредактировано py.user.next (Янв. 17, 2020 01:02:52)

Офлайн

#3 Янв. 13, 2020 12:15:33

Stanislav97
Зарегистрирован: 2020-01-12
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

вычисление суммы ряда e ^(x) с заданной точностью

py.user.next
Надо эту задачу делать через рекуррентные соотношения (то есть функция факториала не используется).Надо формулу n-ого члена ряда поделить на формулу (n-1)-ого члена ряда. Это даст коэффициент, на который умножается каждый член ряда, чтобы получить следующий член ряда. Потом, начиная с первого члена ряда, нужно умножать член ряда на этот коэффициент; будет получаться следующий член ряда, который нужно прибавлять к частичной сумме. Таким образом, когда частичная сумма сойдётся к одному числу в пределах заданной точности (то есть при добавлении новых членов ряда частичная сумма в пределах заданной точности не будет меняться), можно прекратить вычисление.Для e^(-x) делал:
Спасибо, помогло, плюс в карму)
вот оптимизированный код под конкретно мою задачу
   
import math
def emx(x, eps):
    s, s1, i = 0, 1, 1
    while abs(s1 + (math.pow(x, i) / math.factorial(i))) > eps:
        s = s + s1
        s1 = (math.pow(x, i) / math.factorial(i))
        i = i + 1
    return s
print(emx(4, 0.01))
print(math.exp(4))
estimated_error = (math.exp(4))-(emx(4, 0.01))
print(estimated_error)
в функции просто вводим значение и погрешность

Отредактировано FishHook (Янв. 13, 2020 12:34:13)

Офлайн

#4 Янв. 13, 2020 13:08:05

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

вычисление суммы ряда e ^(x) с заданной точностью

Stanislav97
вот оптимизированный код под конкретно мою задачу
  
s1 = (math.pow(x, i) / math.factorial(i))
Факториал не используется, написал же. Использование факториала в таких задачах - это ошибка.
Делай без факториала, забудь про math.factorial().
Вообще забудь про модуль math, в учебных задачах надо функции модуля math писать самому.



Отредактировано py.user.next (Янв. 13, 2020 13:11:29)

Офлайн

#5 Янв. 17, 2020 00:58:44

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

вычисление суммы ряда e ^(x) с заданной точностью

Сделал для e ^ x

  
#!/usr/bin/env python3
 
# вычисляет сумму ряда e ^ x с заданной точностью
#
# е ^ х = 1 + x / 1! + (x ^ 2) / 2! + ... + (x ^ n) / n!
#
 
import math
 
def ex(x, eps):
    s, sl, psl, i = 0, 1, 0, 1
    while abs(sl - psl) >= eps or x + 1 == i:
        s += sl
        psl = sl
        sl *= x / i
        i += 1
    return s
 
if __name__ == '__main__':
 
    print(math.exp(4))
 
    for e in (
        1,
        0.1,
        0.01,
        0.001,
        0.0001,
        0.00001,
        0.000001,
        0.0000001,
        ):
        x = 4
        print('{} eps={}'.format(ex(x, e), e))

[guest@localhost py]$ ./row_ex.py 
54.598150033144236
53.43174603174603 eps=1
54.54818021484688 eps=0.1
54.59398264287153 eps=0.01
54.5978829056501 eps=0.001
54.598136483106295 eps=0.0001
54.598147216543595 eps=1e-05
54.598149928148814 eps=1e-06
54.59815001423152 eps=1e-07
[guest@localhost py]$



tags: row ex



Отредактировано py.user.next (Янв. 17, 2020 01:02:38)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version