通过对一系列求和来计算cos(x)

时间:2016-02-05 22:38:18

标签: python

我是计算机编程的新手,最近刚开始学习python。在这个任务中,我需要通过对系列1 - x ^ 2/2求和来计算cos(x)! + x ^ 4/4! - x ^ 6/6! 。 。

如何在不使用numpy或m.factorial的情况下执行此操作?我想我只应该使用while循环。这是我到目前为止的代码

print("INVESTIGATION OF COMPLEX INFINITE SERIES")
print("")
print("Part A: exp, cos and sin series for real value 1")
print("Using convergence criterion of 1e-20")
print("")
print("count         exp terms       sign         cos terms         sin terms")
print("----------------------------------------------------------------------")

count = 0.0 # number of terms added so far
total = 0.0 # total of terms so far
termSign = 1 
term = 1.0 # initial term
xx = 1

while abs(term) > 1e-20:
    count += 1
    print("%2d   %22.16g    %2d" % (count, term, termSign))
    termSign = (-1)**(count//2)
    total = total + term
    term = term/count

代码的输出应如下所示:

 count     exp terms          sign          cos terms 
 ----------------------------------------------------------
 1                      1      1       1.00000000000000000                                  
 2                      1      1       
 3                    0.5     -1      -0.50000000000000000                                                                                          
 4     0.1666666666666667     -1    
 5    0.04166666666666666      1       0.04166666666666666                                                                                          
 6   0.008333333333333333      1       
 7   0.001388888888888889     -1      -0.00138888888888889                                                                                      
 8  0.0001984126984126984     -1                                                                                                        
 9   2.48015873015873e-05      1       0.00002480158730159                                                                                          
10  2.755731922398589e-06      1
11  2.755731922398589e-07     -1      -0.00000027557319224                                                                                          
12  2.505210838544172e-08     -1                                                                                                    
13   2.08767569878681e-09      1       0.00000000208767570                                                                                          
14  1.605904383682162e-10      1                                                                                    
15  1.147074559772973e-11     -1      -0.00000000001147075                                                                                          
16  7.647163731819817e-13     -1                                                                                                        
17  4.779477332387386e-14      1       0.00000000000004779                                                                                          
18  2.811457254345521e-15      1                                                                                                            
19  1.561920696858623e-16     -1      -0.00000000000000016                                                                                          
20  8.220635246624331e-18     -1                                                                                                        
21  4.110317623312165e-19      1       0.00000000000000000                                                                                          
22  1.957294106339126e-20      1                                                                                                        
-----------------------------------------------------------

2 个答案:

答案 0 :(得分:1)

你很接近......你遗漏了几个计算步骤。

x = 3.1415926535 / 4

sum_up = 1
term = 1
converge = 1e-20
i = 1
while abs(term) > converge:
    term = -term * x * x / (i * (i+1))
    sum_up += term
    i += 2

print sum_up

输出:

0.707106781202

答案 1 :(得分:0)

你可以这样计算:

def cos(x):
        res = 0
        term = 1
        for i in range(1, 20, 2):
            res += term
            term *= -x * x/ i /(i + 1)
        return res

cos(0);

返回1.

Source

修改

没有def,你可以这样做:

x=0;
res = 0
term = 1
for i in range(1, 20, 2):
  res += term
  term *= -x * x/ i /(i + 1)
print(res);

在此代码中,将x替换为要计算cos的数量。我把0,例如。

<强> EDIT2: 好的,收敛标准:

x=0;
res = 1
term = 1
i = 1
while abs(term) > 1e-20
  res += term
  term *= -x * x/ i /(i + 1)
  i += 2
print(res);