Найти - Пользователи
Полная версия: Косинус через ряды
Начало » Python для новичков » Косинус через ряды
1
Igor-dis
Задача:
Дано вещественное число 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

Где я гоню?
J.R.
.
Shaman
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
Igor-dis
Спасибо! Действительно не учел, что в радианах считать надо.
J.R.
И в качестве недоумения. Для чего писать фукцию факториала, если есть math.factorial?
Для тренировки. Косинус ведь тоже в math есть.
py.user.next
Косинус через ряд
J.R.
.
Igor-dis
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(), вместо соответствующих операторов - это требование стандарта или собственные предпочтения (стиль)? Или это производственная необходимость?

J.R.
.
Igor-dis
J.R.
А каким оператором можно заменить print()? Я пишу на python3. Там print() - функция.
print, без скобок в третьем питоне не работает? Я не в курсе, пользуюсь пока 2.7.9.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB