【问题标题】:Series Expansion of cos with Python用 Python 对 cos 进行系列扩展
【发布时间】:2017-07-07 05:18:45
【问题描述】:

所以,我试图找到cos(x) 的值,其中x=1.2。我觉得我写的脚本应该没问题,但是我得到的值是不正确的。那是; cos(1.2)=0.6988057880877979,对于 25 条款,我应该离开时:cos(1.2)=0.36235775

我创建了一个类似的程序来计算sin(1.2),它运行良好。

计算sin(1.2)

import math as m

x=1.2
k=1
N=25
s=x
sign=1.0

while k<N:
    sign=-sign
    k=k+2
    term=sign*x**k/m.factorial(k)
    s=s+term

print('sin(%g) = %g (approximation with %d terms)' % (x,s,N))

现在尝试计算cos(1.2)

import math as m

x=1.2
k=1
N=25
s=x
sign=1.0

while k<N:
    sign=-sign
    k=k+1
    term=sign*x**k/m.factorial(k)
    s=s+term

print(s)

【问题讨论】:

  • 请问您为什么不使用 math.cos(x) ?
  • @zoubida13 可能从泰勒定理中学习扩展。并非一切都必须实用:)
  • @zoubida13 他正在使用系列扩展来计算它。泰勒级数响起什么钟声? :)
  • 抱歉,我只是好奇 :) 没有给我敲响警钟,但如果你熟悉它,也许你们可以提供帮助
  • 余弦是偶函数。尝试从 k=0 开始并以 2 而不是 1 递增。然后从 0 开始 s。

标签: python math series trigonometry


【解决方案1】:

您不应该将初始总和设置为 1.2,以及您对扩展的表示

有点偏离 - 我们需要考虑函数的均匀性,因此将 k 增加 2。此外,在不修改程序结构的情况下,您必须设置初始变量以使其正确在第一个循环开始时放入它们的起始值。重新排序你的循环控制流,我们有

import math as m

x=1.2
k=0
N=25
s=0
sign=1.0

while k<N: 
    term=sign*x**(k)/m.factorial(k)
    s=s+term
    k += 2
    sign = -sign

print(s)

0.3623577544766735

【讨论】:

  • 太棒了,非常感谢!不敢相信我忽略/错过了这样的基本逻辑!
【解决方案2】:

我认为你使用了错误的余弦系列,correct formula 将是(我强调了与^ 的重要区别):

sum_over_n [(-1)**n * x ** (2 * n) / (math.factorial(2 * n))]
#                           ^^^^                     ^^^^

这意味着添加n-terms 你有类似的东西:

def cosine_by_series(x, terms):
    cos = 0
    for n in range(terms):
        cos += ((-1)**n) * (x ** (2*n)) / (math.factorial(2 * n))
    return cos
    # or simply:
    # return sum(((-1)**n) * (x ** (2*n)) / (math.factorial(2 * n)) for n in range(terms)

给出:

>>> cosine_by_series(1.2, 30)
0.3623577544766735

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2011-12-13
    • 2021-06-25
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    相关资源
    最近更新 更多