給出的等式來近似pi
近似PI使用finitie系列
我需要的術語(n
)所需要獲得的近似即內的pi
實際值的10^(-12)
數。該代碼我必須要找到n
看起來是這樣的:
的while
循環語句我似乎永遠不會結束,所以我覺得我的代碼一定是錯誤的。
給出的等式來近似pi
近似PI使用finitie系列
我需要的術語(n
)所需要獲得的近似即內的pi
實際值的10^(-12)
數。該代碼我必須要找到n
看起來是這樣的:
的while
循環語句我似乎永遠不會結束,所以我覺得我的代碼一定是錯誤的。
嘗試沿着這些線路(從圖像中轉錄的)東西,增量近似術語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
要快得多。
感謝您的及時回覆。我只是試圖把n = n + 1放入循環中,但它仍然沒有結束。你認爲我的while循環看起來正確嗎?或者,我該如何增加第n期 –
問題可能出在雙'sqrt'上。刪除while循環中的一個(參見更新)。 – randomir
感謝您指出。我將abs()添加到s函數部分,但是我的循環仍然沒有結束。 n = 1的 S = 1 而真 S = ABS(PI - approximate_pi(n))的 如果s <= 10 ^( - 12) 斷裂 端 N = N + 1 端 –
它永遠不會結束,因爲你並沒有在'while while true'循環中增加'n'(近似值序列項的計數)。 – randomir
我恢復了一些編輯,因爲它們包含答案的一部分。請注意,使用Matlab調試器可能對自己發現這樣的錯誤非常有用。我可否要求你將代碼作爲文本而不是未來的圖像? – m7913d