簡體   English   中英

使用Python擴展cos系列

[英]Series Expansion of cos with Python

所以,我試圖找到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)

您不應該將初始總和設置為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

我認為你使用了錯誤的余弦系列, 正確的公式將是(我強調了與^的重要區別):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM