Python 円周率が3.05より大きいことを証明せよ(東大の入試問題)をプログラムで確かめる

 πの定義は、円の面積=πr^2 もしくは、円周=2πrです。このいずれかを用いて証明することになります。

f:id:HK29:20200606235909p:plain

下図は正六角形と正十二角形の図です。多角形になる程、円に近づく様子がわかります。

f:id:HK29:20200607000112p:plain

下図は、その一辺を計算する方法です。円周=2πrを証明することにします。半径rを1とするとa=sinθ、b=1-cosθで表すことができ、それらよりピタゴラスの定理でcの式を得ることが出来ます。

f:id:HK29:20200607000831p:plain

正N角形の場合、θ=360÷Nと表せます。辺がN個あるため、c×N≒2πr=2π
よって、π= c×N/2 >3.05を証明すれば良いです。

 手計算では手間ですが、本コードを実行すると、下図のように円周率π>3.05であることがわかります。例えば、3.141592…を示す場合は、正4096角形くらいが必要になります。

f:id:HK29:20200606234405p:plain

■本プログラム

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import numpy as np
import math
import japanize_matplotlib

def main():
    ### 等比数列(2倍)
    rates = np.ones(N) * 2
    print(rates)
    geometric_progression_list = (rates ** np.arange(N)).tolist() #numpyアレイをリスト形式へ変換
    print(geometric_progression_list)
    geometric_progression_int_list = [int(n) for n in geometric_progression_list] #リスト内の用を整数型へ変換
    print(geometric_progression_int_list)
    ###
    for i in geometric_progression_int_list:
        if i >=4:
            shita = 360 / i
            a = math.sin(math.radians(shita))
            b = 1 - math.cos(math.radians(shita))
            c = math.sqrt(pow(a,2) + pow(b,2))
            pi = c * i / 2
            print('正'+ str(i) + '角形で近似計算すると、', '円周率' + str(pi))

if __name__ == '__main__':
    N = 20
    
    main()

以上

<広告>