2016-02-18 208 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