用于正弦计算的泰勒级数

时间:2019-08-04 20:40:01

标签: python-3.x

我已经挑战自己编写一个返回给定角度正弦的函数。 但是我根本不想导入任何模块,我只想用普通的Python 3来做到这一点。

我尝试了许多不同的解决方案,并测试了我的函数以确定数字的阶乘。此功能可以完美运行,因此问题必须出在其他地方。

def fakult(n):

    if n < 0:
        raise ValueError

    if n == 0:
        return 1

    else:
        fak = 1
        for i in range(2,n+1):
            fak *= i
        print(fak)
        return fak

def sin(x, attempts=10):
    a=0
    for n in range(attempts):
        #"fakult" calls a function which return the factorial of the term in the parantheses
        a+=((-1) ** n) * ((x ** ((2 * n) + 1)) / (fakult(2 * n + 1)))

    return a

我的其余代码没有错误,也没有任何错误消息。结果是完全错误的。我进行了一些基本的调试,并在行之间放置了一些打印命令。 90度的正弦应为0.89 ... 该函数返回-1.0651331796981347e + 20

1 个答案:

答案 0 :(得分:1)

如果想要正弦的正弦,请使用弧度:

import math

def fakult(n):

    if n < 0:
        raise ValueError

    if n == 0:
        return 1

    else:
        fak = 1
        for i in range(2,n+1):
            fak *= i
        # print(fak)
        return fak

def calc_sin(x, attempts=10):
    a=0
    for n in range(attempts):
        #"fakult" calls a function which return the factorial of the term in the parantheses
        a+=((-1) ** n) * ((x ** ((2 * n) + 1)) / (fakult(2 * n + 1)))

    return a

calc_sin(90*math.pi/180)
Out[1]: 1.0

或者如果您想要90个弧度的正弦,则需要记住,泰勒级数仅对以0为中心的一个周期有效:

val = 90*180/math.pi
val
Out[22]: 5156.620156177409

val_deg = (val)%360
val_deg
Out[24]: 116.62015617740872

val_deg_rad = val_deg*math.pi/180
val_deg_rad
Out[26]: 2.0354056994857865

calc_sin(val_deg_rad)
Out[27]: 0.8939966636005003