需要帮助来检查 sin 结果不匹配,在 python 中使用 taylor 系列

Posted

技术标签:

【中文标题】需要帮助来检查 sin 结果不匹配,在 python 中使用 taylor 系列【英文标题】:need help to check sin result doesnt match, using taylor series in python 【发布时间】:2021-12-04 10:33:54 【问题描述】:

这是我的代码:

def faktorial(z):
    a=1
    for x in range (1,z+1):
        a=a*x
    return a
def sin(x):
    p=0
    for k in range(0,1000):
        a=((-1)**k)
        b=((x**(2*k+1)))
        c=(faktorial((2*k)+1))
        p+=(a*b)/c #sin x
    return p
x=45
print(sin(x))

但是当它运行时结果不匹配,sin(45) 应该是 0,850904 但我的程序得到 37.93452 作为结果.thxenter image description here

【问题讨论】:

sin(45) 不应该是 1/sqrt(2) 吗?假设 45 是度数,而不是弧度。 我认为这是某种溢出/舍入错误。尝试在您的范围内使用 10 而不是 1000,并使用较小的数字,而不是像 45 弧度这样的数字 顺便说一句,您可以使用*= 乘以并为变量赋值,即x = 5 后跟x *= 10 将得到x = 50 @Stefan aahhh 我明白了,我误解了泰勒系列,我认为它使用弧度而不是度数。我现在尝试更改范围及其工作。非常感谢。 【参考方案1】:

你得到一个错误的答案,因为你使用 degree 而不是 radian 。当您的 x 太接近 0 时,此近似值也是正确的。

【讨论】:

是的,我误解了泰勒系列,我认为它使用弧度而不是度数。抱歉,我发布了错误的假设,因为我还没有研究过这个系列。但我只得到了我的任务的公式,所以很抱歉我做出了错误的假设。【参考方案2】:

泰勒级数是以弧度为单位计算角度的,要使用它,您必须将度数转换为弧度。

因此,您可以更改输入中的单位或将度数转换为度数。

从数学导入 pi

def sin(x):
    # Either do this
    x = x*pi/180
    p=0
    for k in range(0,1000):
        a=((-1)**k)
        b=((x**(2*k+1)))
        c=(faktorial((2*k)+1))
        p+=(a*b)/c #sin x
    return p
# or this x=pi/4
x = 45
print(sin(x))

【讨论】:

【参考方案3】:

通过使用更少的项和更少的弧度数来避免舍入误差:

def faktorial(z):
   a=1
   for x in range (1,z+1):
       a=a*x
   return a
def sin(x):
    p=0
    for k in range(0,10):
        a=((-1)**k)
        b=((x**(2*k+1)))
        c=(faktorial((2*k)+1))
        p+=(a*b)/c #sin x
    return p
x=3.1415/4
print(sin(x))

【讨论】:

以上是关于需要帮助来检查 sin 结果不匹配,在 python 中使用 taylor 系列的主要内容,如果未能解决你的问题,请参考以下文章

SQL 连接的补充?需要 T-SQL 帮助

Jmeter-断言

7-2 括号匹配 (25分)

有没有办法设置猫鼬来检查两个值是不是在一个模式中匹配?

应该在 bigquery 中提取不匹配的记录

jmeter断言(检查点)