Форум сайта python.su
Вычислить значение функции с точностью 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)
Прикреплённый файлы: photo_2017-01-23_18-14-05.jpg (5,5 KБ)
Офлайн
FanagoНикаких факториалов не должно быть внутри. Это делается по-другому: читай про рекуррентные соотношения.
Мой код
Офлайн
py.user.nextПрочитал про рекуррентный соотношения, поискал исходники с нахождением как можно большего количества цифр после запятой числа e, и хоть убейте не понимаю о чем вы говорите.
Никаких факториалов не должно быть внутри. Это делается по-другому: читай про рекуррентные соотношения.
Офлайн
wi34rdНадо поделить n-й член ряда на n-1-й - получится множитель, на который нужно домножить любой член ряда, чтобы получить следующий за ним член. И дальше ты просто в цикле домножаешь на него и сразу суммируешь (к сумме прибавляешь полученный член). Потом прибавил и сразу из него получаешь следующий член и всё повторяется, пока точность подходит.
и хоть убейте не понимаю о чем вы говорите.
#!/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))
#!/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)
Офлайн