我正在嘗試使用 python 使用無限系列計算 (pi) 的近似值。
停止條件是accuracy = 10**(-9)
準確度是abs(exact_pi-computed_pi)
我的代碼:
from math import sqrt
exact_pi=3.14159265358979323846
accuracy=10**(-9)
computed_pi=float(sqrt(12))
k=1
while abs(float(computed_pi)-float(exact_pi))>accuracy:
num1=float((-3)**(-k))
num2=float((2*k 1))
computed_pi=float(computed_pi) float(num1/num2)
k=k 1
例如, float(num1/num2)經過一些迭代的結果,它進入了無限回圈。有人可以幫忙嗎?k=100outputs 0
PI 公式
uj5u.com熱心網友回復:
正如@quamrana注意到的那樣,您錯過了求和操作。
# your code before while
while abs(computed_pi - exact_pi) > accuracy:
multiplier = sum((-3)**(-i)/(2 * i 1) for i in range(k))
computed_pi = 12**0.5 * multiplier
k = 1
或稍微優化的版本(再次感謝 quamrana)
multipler = 0
while abs(computed_pi - exact_pi) > accuracy:
multiplier = (-3)**(-k) / (2 * k 1)
computed_pi = 12**0.5 * multiplier
k = 1
uj5u.com熱心網友回復:
您的代碼有很多問題:
- 您正在初始化
computed_pi為sqrt(12)而不是0 - 你開始你的總和
k=1而不是k=0 - 您沒有累積條款
- 您正在浪費 cpu 周期(并犧牲可讀性)常量;y 將浮點數轉換為浮點數。
修復這些會導致:
from math import sqrt
exact_pi=3.14159265358979323846
accuracy=10**(-9)
computed_pi=0
factor = sqrt(12)
k=0
while abs(computed_pi - exact_pi)>accuracy:
num1=(-3)**(-k)
num2=2*k 1
computed_pi = computed_pi factor * num1/num2
k=k 1
print(computed_pi)
輸出:
3.1415926541725754
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520202.html
標籤:Python数学
上一篇:CMD C不會殺死行程
