2016-02-18 25 views
1

进口数学计算余弦我有什么做一个总体思路,但我的代码是一个烂摊子,我遇到了一些麻烦用Python写的算法没有蟒蛇

cos(x)=1-(x^2)/2!+(x^4)/4!-(x^6)/6!+... 

其中x是在使用while循环的20个项之后计算cos(x)。到目前为止,我已经写了什么是

x = float(input("Enter a value for x in degrees.")) 
x = (x*3.14159)/180 
num_of_terms = 0 
num = 1.0 ##numerator 
y = 1.0 
cosx = 1.0 

while num_of_terms<1: 
    num_of_terms+=1 
    cosx = (num/y) 
    while num_of_terms>=1 and num_of_terms<=20: 
     num_of_terms+=1 
     num = num*(x*x) 
     y = y*num_of_terms*(num_of_terms-1) 
     if num_of_terms%2==0: 
      cosx = cosx+(-num/y) 
     else: 
      cosx = cosx+(num/y) 
    print(cosx) 

我不知道如何接近我,甚至我到是正确(我知道这是错的,至少有些地方,所以我不能正确检查使用math.cos),但我的主要问题是如何从正面 - >负面切换每个术语。分配规定,我不能使用幂运算符,而之前我试图做类似

x = float(input("Enter a value for x in degrees.")) 
x = (x*3.14)/180 
num_of_terms = 0 
y = 0 
z = 1 
cosx = ((-1)**(z-1))*((x**z)/(y)) 

以便符号会切换为每其他条款。现在我已经(如你所见)

if num_of_terms%2==0: 
    cosx = cosx+(-num/y) 
else: 
    cosx = cosx+(num/y) 

这是不正确的,或者至少我得到的输出是不正确的。

回答

0

你的问题是在阶乘的计算。你乘以num_of_terms,每循环只增加一次 - 你需要在循环中每次改变2。至少你正确地将这个数字和数字1相乘。

+0

我应该用y替换num_of_terms吗? – AxTqka

+0

@AxTqka不,这将是错误的。如果你暂时停下来思考这个问题,我相信答案会出现在你的面前。 –

1

您可以处理的标志很简单:

sign = -1 
while num_of_terms <= 20: 
    sign = -sign 
    ... 
    cosx += sign * num/y 

你也有你的循环结构的问题:一个迭代后的第一个循环将结束......除了你已经正确地从取回防止它那里。这是一个循环使用不好。

只是在循环之前初始化您的变量,然后按预期进行。既然您知道迭代次数,请使用代替而不是,而使用

cosx = (num/y) 
for num_of_terms in range(1, 21): 
    ... 

您会在代码中发现其他计算问题。每次在循环中打印出值,以帮助跟踪执行和计算。在开始时,只是去到3或4倍,而不是20

对于阶乘,保持运行的产品:它像一个运行总和,除非你在1初始化,然后每次乘通过循环。


好的;与时俱进。现在,管理你的循环索引和计算索引。如果你正在进行术语#1,指数应该是什么?你乘以y?现在为术语#2和术语#3确定相同的值。

更直接地,坚持在print语句中跟踪num_of_terms,y和cosx。当你在做第三个任务时,y是什么?它应该是4!或6! (取决于你如何编号),但事实并非如此。你哪里错了?

+0

我会使用for语句,但是赋值语句明确指出不使用'for'语句,而是使用while语句。感谢关于在循环之前初始化变量的提示。 – AxTqka