Уведомления

Группа в Telegram: @pythonsu

#1 Июль 18, 2015 18:11:03

Igor-dis
Зарегистрирован: 2014-12-14
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Косинус через ряды

Задача:
Дано вещественное число X и целое число N (> 0). Найти значение выражения
1 – X^2 /(2!) + X^4 /(4!) – … + (–1)^N · X^(2·N) /((2· N )!)
( N ! = 1·2·…· N ). Полученное число является приближенным значением
функции cos в точке X .

т.е. вычисление через ряды Тейлора


import math
n=1
x=0
def fac(z):
    if z == 0:
          return 1
    f=1
    for x in range(1,z+1): 
        f*=x
    return f
def f(n,x):
    f=-0.0x=
    for i in range(n):
        fi=((-1**i)*(x**(2*i)))/fac(2*i)
        f +=fi 
        print i, fi # Проверка значений по шагам
    return f
x=input('Введите вещественное число Х: ')
n=input('Введите целое число N, больше нуля: ')
print 'Факториал N = ', fac(n)
print 'Функция: '
print round(f(n,x),5)
print "Проверка ", round(math.cos(x),5) # для проверки расчет через встроенную функцию

При выполнении программы получается какой-то бред:

Введите вещественное число Х: 30.0
Введите целое число N, больше нуля: 4
Факториал N =  24
Функция: 
0 -1.0
1 -450.0
2 -33750.0
3 -1012500.0
-1046701.0
Проверка  0.15425

Попробовал посчитать в консоли Python'a, получился тоже бред:

>>> def fac(n):
...     if n == 0:
...           return 1
...     f=1
...     for x in range(1,n+1): 
...         f*=x
...     return f
... 
>>> x=30.0
>>> 1-(x**2/fac(2))+(x**4/fac(4))-(x**6/fac(6))+(x**8/fac(8))
15293122.42857143
>>> from math import cos
>>> cos(x)
0.15425144988758405

Где я гоню?

Офлайн

#2 Июль 18, 2015 19:38:27

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

Косинус через ряды

.

Отредактировано J.R. (Янв. 27, 2016 08:13:31)

Офлайн

#3 Июль 18, 2015 20:24:39

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Косинус через ряды

def f(n,x):
    f = 1.0
    for i in range(1, n +1 ):
        f += (1.0, -1.0)[i % 2] * ((x**(2*i)))/fac(2*i)
    return f

Офлайн

#4 Июль 18, 2015 22:11:31

Igor-dis
Зарегистрирован: 2014-12-14
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Косинус через ряды

Спасибо! Действительно не учел, что в радианах считать надо.

J.R.
И в качестве недоумения. Для чего писать фукцию факториала, если есть math.factorial?
Для тренировки. Косинус ведь тоже в math есть.

Офлайн

#5 Июль 19, 2015 01:11:07

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

Косинус через ряды

Офлайн

#6 Июль 19, 2015 08:02:39

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

Косинус через ряды

.

Отредактировано J.R. (Янв. 27, 2016 08:13:54)

Офлайн

#7 Июль 20, 2015 14:09:40

Igor-dis
Зарегистрирован: 2014-12-14
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Косинус через ряды

py.user.next
Косинус через ряд
Спасибо, там другой подход буду разбираться позже.
J.R.
from math import cos, factorial, radians
x = radians(float(input("Enter the angle value: ")))
n = int(input("Enter a number: "))
cosinus = sum(
    pow(-1, i) * pow(x, 2 * i) / factorial(2 * i) for i in range(n))
print("cosinus:\t%s" % cosinus)
print("math.cos:\t%s" % cos(x))
Прикольно. Чудеса минимизации.
Возник вопрос. Использование функций pow() и print(), вместо соответствующих операторов - это требование стандарта или собственные предпочтения (стиль)? Или это производственная необходимость?

Отредактировано Igor-dis (Июль 20, 2015 14:10:41)

Офлайн

#8 Июль 20, 2015 14:46:20

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

Косинус через ряды

.

Отредактировано J.R. (Янв. 27, 2016 08:14:17)

Офлайн

#9 Июль 20, 2015 15:20:02

Igor-dis
Зарегистрирован: 2014-12-14
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Косинус через ряды

J.R.
А каким оператором можно заменить print()? Я пишу на python3. Там print() - функция.
print, без скобок в третьем питоне не работает? Я не в курсе, пользуюсь пока 2.7.9.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version