Python : 円周率の計算:ライプニッツの公式

前回、mathのモジュールを使って円周率の計算(多角形ではさむ方法)を

やりました。

kangkang1981.hatenablog.com

これはsin,tanの三角関数を使っており、この計算の中でπを使うという

自己満足的なものだったので、

 

今度はライプニッツの公式を使った方法でやってみたいと思います。

ライプニッツの公式のリンクは下記

ライプニッツの公式 - Wikipedia

実際に計算で使うのはこの部分です。

 

f:id:Kangkang1981:20200503104555p:plain

要は最初は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

結果は下記のようなグラフになります。

f:id:Kangkang1981:20200503105750j:plain

数字が大きすぎたので、横軸が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について書いた記事はここにリンクを貼ってあります。

興味があればぜひご覧ください。