【问题标题】:Taylor series for Sine calculation用于正弦计算的泰勒级数
【发布时间】:2019-08-05 15:38:40
【问题描述】:

我挑战自己编写一个返回给定角度正弦的函数。 但我根本不想导入任何模块,我只想用普通的 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

【问题讨论】:

  • 你的意思是正弦吗?不是鼻窦炎?你说的教师是什么意思?
  • 要么初始化a = 0,要么从1 for n in range(1, attempts)开始范围。您将a 初始化为x,然后在n = 0 的第一次迭代中再次添加x。这仍然不能解释天文数字,但这是一个开始
  • 我们需要查看fakult 的实现,因为问题可能就在那里......(这不是可重现的代码......)。另外,尝试做一些基本的调试,例如在每次迭代结束时添加一个打印,看看结果是否符合你的预期
  • jep 我的意思是正弦...而教师的意思是 XY! (例如 5!= 1*2*3*4*5)
  • 您是以度还是弧度工作的?泰勒级数不是仅对范围有用吗 -pi

标签: python-3.x


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-02
    • 2015-06-20
    • 2021-02-19
    • 2020-02-04
    • 2016-04-26
    • 2020-03-01
    • 2015-05-15
    • 1970-01-01
    相关资源
    最近更新 更多