$ `6 t3 {. m; c7 W& n; _- A8 o' E4 P4 P w0 |- F
然后我们在正方形内生成随机的点。然后统计点在弧线下方出现的次数。弧下方的点数/总点数=1/4倍的单位圆面积=(πr^2)/4,r=1。然后我们就可以得出pi的值。- Y2 G( W' a# R8 m/ y! D- q8 B
l2 T" Z7 u( S# B- Z以下是鄙人的蒙特卡罗模拟求pi的python程序: 7 p+ p; A6 q* ]! \, c#Author : Naupio9 m% K8 T! Q6 x/ N) @& l4 E
import random as rd* k. x9 ^. T+ m
$ {1 U# r4 Y8 }4 R + e, ~! n# L. idef findpi(times = 1000): 5 ~7 J e. I) g counts = 0.0( L8 q& Q+ P6 O8 U" C
for i in range(times): 0 M, r2 d( A) f; M' [" l( ] x = rd.random()2 A8 H3 c! f8 p, u3 l& q: N- J
y = rd.random() $ u$ }' z: G/ C8 W/ Y9 n if (x**2+y**2)<1: ' ^$ w- @8 ~8 Q' Q$ P4 H; g counts+=1 8 `2 r* I& @% g) @3 i return (counts*4)/(times*1) / p* G! B- s8 }5 u- X5 y/ _1 f, z: b, e
# ~7 A3 O2 r$ b+ U5 Qprint "蒙特卡罗模拟一千次得出的pi近似值为:",findpi(1000) ; r3 m1 f& {9 b0 g$ \7 ]' j" ]print "蒙特卡罗模拟一万次得出的pi近似值为:",findpi(10000)7 p. x) `% E8 w# h/ ^$ F4 v
print "蒙特卡罗模拟十万次次得出的pi近似值为:",findpi(100000)! b% t) } N! j1 N( l; ^
print "蒙特卡罗模拟一百万次得出的pi近似值为:",findpi(1000000)% S9 i/ W$ C: r9 V9 z
print "蒙特卡罗模拟一千万次得出的pi近似值为:",findpi(10000000)$ y ?7 f9 T+ l
print "蒙特卡罗模拟五千万次得出的pi近似值为:",findpi(50000000) & t7 J, s( Q9 ^- [% j
. S2 |2 N3 M- n+ w
以下是蒙特卡罗模拟的结果图: & X7 l# l% s B2 X, ~) ? : O/ a/ ?# E( D% N/ [9 C# v- d0 h v9 W: V' D
最后鄙人说几句: 1 C& @3 w- R: m. C' v从模拟的结果来看,是非常成功的,随着模拟次数的增加,结果越来越接近pi的真实值 。蒙特卡罗模拟当然还有很多用法,下次有空时,鄙人会尝试用蒙特卡罗模拟来求解积分值。% N0 s1 n( w7 j0 k2 m* k* Q; Q0 \ @madio@百年孤独@数学中国—罂粟 1 `6 J' u8 n6 P4 W) g) W% ~. X; Aps :鄙人无法保证绝对的正确性,如有误导之处,欢迎指正,同时也欢迎交流,转载请注明出去,版权所有。 4 m; f I: O$ D2 U* Q% x1 M, @- ]% K- U& V9 O3 c7 m
( [( H+ v9 q1 G8 T