Python : 円周率の計算:ライプニッツの公式
前回、mathのモジュールを使って円周率の計算(多角形ではさむ方法)を
やりました。
これはsin,tanの三角関数を使っており、この計算の中でπを使うという
自己満足的なものだったので、
今度はライプニッツの公式を使った方法でやってみたいと思います。
ライプニッツの公式のリンクは下記
実際に計算で使うのはこの部分です。
要は最初は1として、1/3をマイナス、1/5をプラスとしていけばよいので、
最初はマイナスから始まり、交互にプラスマイナスを変えていく、
分母は3から始まり、2ずつ増やしていくということです。
プログラム自体は変数を3つ作成
・pi : 計算結果 π/4へだんだん近似していく
・i_denominator : 分母 3~2ずつ増えていく、今回は199,999まで
・i_plus_minus : マイナス、プラスで毎回変更していく。
後は、for文で繰り返す(今回は100,000回)のと
if文で、マイナス、プラスの処理を変える。
※マイナスの時はプラスへ変更、プラスのときはマイナスへ変更
後は下記の方法で、π/4を計算する
pi = pi + i_plus_minus/i_denominator
結果は下記のようなグラフになります。
数字が大きすぎたので、横軸がlogで出しています。
この状態ではまだ結果が収束していないのですが、
グラフにかけないのでとりあえずここまでです。
今回の反省は、グラフはエクセルでやったのですが、
10万行もあるとエクセルだとまともに動かないので、結構苦労しました。
次はpythonでグラフ作ってみますかね。
pi=1.0
#分母に使う数字、最初は3であとは2ずつ足していく
i_denominator = 3
#ライプニッツ交互にプラスマイナスしていくのに使用
i_plus_minus = -1
#csvを作成
f_pi = open('pi_libniz.csv','w',encoding='utf-8')
f_pi.write('Libniz'+',')
f_pi.write('denominator'+'\n')
###########################
for i in range(1,100000):
if i_plus_minus == 1:
#πの結果
pi = pi + i_plus_minus/i_denominator
#結果をcsvへ書き込み
f_pi.write(str(pi)+',')
f_pi.write(str(i_denominator)+'\n')
#分母に2を足す
i_denominator = i_denominator + 2
#マイナスへ変更
i_plus_minus = -1
elif i_plus_minus == -1:
#piの結果
pi = pi + i_plus_minus/i_denominator
#結果をcsvへ書き込む
f_pi.write(str(pi)+',')
f_pi.write(str(i_denominator)+'\n')
#分母に2を足す
i_denominator = i_denominator + 2
#プラスへ変更
i_plus_minus = 1
###########################
#csvファイルを閉じる
f_pi.close()
今までにpythonについて書いた記事はここにリンクを貼ってあります。
興味があればぜひご覧ください。