モンテカルロ シミュレーションを使用して pi の値を推定しようとしています。原点からのユーザー入力距離である 2 つの単位円を使用する必要があります。これは私が持っているものです:
import random
import math
import sys
def main():
numDarts=int(sys.argv[1])
distance=float(sys.argv[2])
print(montePi(numDarts,distance))
def montePi(numDarts,distance):
width=2*(1-distance)
if distance>=1:
return(0)
inCircle=0
for i in range(numDarts):
x=(width*(random.random()))-width
y=(random.random())
d=(x-distance)**2+(y-0)**2
d2=(x-(distance*-1))**2+(y-0)**2
if d<=1 and d2>=-1:
inCircle=inCircle+1
pi=(inCircle/numDarts)*(width*2)
return pi
main()
これは私が得るべきものです-
距離 = 0 の場合、約 3.14 距離 = .5 の場合、約 1.288 それぞれ約 1.6 と .6 になるのはなぜですか?
これらは私の指示です-
モンテカルロ法を使用してこの形状の面積を推定する (そして結果を出力する) mcintersection.py というプログラムを作成します。プログラムは、distance と numDarts の 2 つのコマンド ライン パラメータを使用する必要があります。距離パラメーターは、円が x 軸の原点からどれだけ離れているかを指定します。したがって、距離が 0 の場合、両方の円は原点を中心とし、完全に重なります。距離が 0.5 の場合、1 つの円は (-0.5, 0) を中心とし、もう 1 つの円は (0.5, 0) を中心とします。距離が 1 以上の場合、円はまったく重なりません! 最後のケースでは、プログラムは単純に 0 を出力できます。numDarts パラメータは、モンテカルロ プロセスで選択するランダム ポイントの数を指定する必要があります。
この場合、長方形の高さは 2 単位である必要があります (上部が y = 1、下部が y = -1)。長方形を安全に 2 単位幅にすることもできますが、これは通常、必要以上に大きくなります。代わりに、距離パラメーターに基づいて、形状の幅を正確に把握する必要があります。そうすれば、できるだけ細い長方形を使用できます。