2017-07-07 74 views
-1

給出的等式來近似pi近似PI使用finitie系列

Here is the equation to approximate pi

我需要的術語(n)所需要獲得的近似即內的pi實際值的10^(-12)數。該代碼我必須要找到n看起來是這樣的:

]

code to find n

while循環語句我似乎永遠不會結束,所以我覺得我的代碼一定是錯誤的。

+3

它永遠不會結束,因爲你並沒有在'while while true'循環中增加'n'(近似值序列項的計數)。 – randomir

+0

我恢復了一些編輯,因爲它們包含答案的一部分。請注意,使用Matlab調試器可能對自己發現這樣的錯誤非常有用。我可否要求你將代碼作爲文本而不是未來的圖像? – m7913d

回答

1

嘗試沿着這些線路(從圖像中轉錄的)東西,增量近似術語n您的無限while循環次數:

s = 1 
n = 1 
while true 
    s = abs(pi - approximate_pi(n)) 
    if s <= 0.001 
     break 
    end 
    n = n + 1 
end 

與此相關的,這種計算有點無意義如果您事先知道pi的價值。終止條件應該n-th條款的絕對量。

只有當您試圖找出最小值n時,您的操作方式纔有意義,您的近似值序列可以在某個誤差範圍內產生結果。

編輯。所以,通常你會做這樣的:

n = 1; 
sum_running = 0 
sum_target = (pi^2 - 8)/16; 
while true 
    sum_running += 1/((2*n-1)^2 * (2*n+1)^2); 
    if abs(sum_target - sum_running) <= 10e-12 
     break 
    end 
    n += 1; 
end 
pi_approx = sqrt(16*sum_running + 8) 

沒有必要保留重新計算pi逼近高達n條件,爲每個新n。這具有O(n)的複雜性,而您的初始解決方案有O(n^2),所以對於大型n要快得多。

+0

感謝您的及時回覆。我只是試圖把n = n + 1放入循環中,但它仍然沒有結束。你認爲我的while循環看起來正確嗎?或者,我該如何增加第n期 –

+0

問題可能出在雙'sqrt'上。刪除while循環中的一個(參見更新)。 – randomir

+0

感謝您指出。我將abs()添加到s函數部分,但是我的循環仍然沒有結束。 n = 1的 S = 1 而真 S = ABS(PI - approximate_pi(n))的 如果s <= 10 ^( - 12) 斷裂 端 N = N + 1 端 –