Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 24, 2017 12:12:14

Fanago
Зарегистрирован: 2017-01-24
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вычислить с заданной точностью

Вычислить значение функции с точностью 0.0001. Значения x могут вводится как интерактивно, так и как аргумент командной строки. Полученный результат должен быть сравнен со значениями, получаемыми с помощью библиотеки math.

Мой код

 import math
eps = 0.0001
s = 0
s1 = 1
x = input(' ')
k = 0
while abs(s1 - s)> eps:
    s1 = x**k/math.factorial(k)
    s += s1 
    k += 1
    print(float(x))

Отредактировано Fanago (Янв. 24, 2017 12:30:17)

Прикреплённый файлы:
attachment photo_2017-01-23_18-14-05.jpg (5,5 KБ)

Офлайн

#2 Янв. 24, 2017 14:43:35

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

Вычислить с заданной точностью

Fanago
Мой код
Никаких факториалов не должно быть внутри. Это делается по-другому: читай про рекуррентные соотношения.



Офлайн

#3 Янв. 24, 2017 16:08:55

wi34rd
Зарегистрирован: 2016-10-08
Сообщения: 89
Репутация: +  2  -
Профиль   Отправить e-mail  

Вычислить с заданной точностью

py.user.next
Никаких факториалов не должно быть внутри. Это делается по-другому: читай про рекуррентные соотношения.
Прочитал про рекуррентный соотношения, поискал исходники с нахождением как можно большего количества цифр после запятой числа e, и хоть убейте не понимаю о чем вы говорите.

Офлайн

#4 Янв. 24, 2017 17:11:23

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

Вычислить с заданной точностью

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

Я тут в каком-то бородатом году делал задачки эти (к счастью, решённые задачи сохраняю в папочке).

Изменён: 2014-08-07 10:08:49.492343428 +1100
#!/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))

Изменён: 2015-07-01 20:13:09.207046146 +1100
#!/usr/bin/env python3

# Находит cos(x) через ряд Тейлора
# cos(x) = 1 - x ^ 2 / 2! + x ^ 4 / 4! - x ^ 6 / 6! + ...

import math

def cos(x, eps):
x %= 2 * math.pi
s = 0
sl, psl = 1, 0
z = 0
while abs(sl - psl) >= eps:
s += sl
psl = sl
sl *= -x * x / ((z + 1) * (z + 2))
z += 2
return s

if __name__ == '__main__':
print(cos(12345, 0.0001))
print(math.cos(12345))



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version