数学建模社区-数学中国
标题:
使用python做蒙特卡罗模拟求pi
[打印本页]
作者:
思考者-Instrive
时间:
2014-9-18 17:12
标题:
使用python做蒙特卡罗模拟求pi
神奇的随机,蒙特卡罗模拟求pi
以下摘自百度百科:
# m5 ^ a ~, j6 n
蒙特卡罗
模拟因摩纳哥著名的赌场而得名。它能够帮助人们从
数学
上表述物理、化学、工程、经济学以及
环境动力学
中一些非常复杂的相互作用。数学家们称这种表述为“模式”, 而当一种模式足够精确时, 他能产生与实际操作中对同一条件相同的反应。但
蒙特卡罗
模拟有一个危险的缺陷: 如果必须输入一个模式中的
随机数
并不像设想的那样是随机数, 而却构成一些微妙的非随机模式, 那么整个的模拟(及其预测结果)都可能是错的。
, L; x( Z2 D9 w: r1 l/ {
! T7 m( \+ v3 {0 B4 `/ T) w
鄙人谈几句话:
) s- S4 q5 \% w& ~& v4 d
蒙特卡罗模拟的用处非常广,而且蒙特卡罗模拟听起来有点高端霸气上档次,其实蒙特卡罗模拟的原理很简单,就是利用“随机”去创造一个数学模型,从而模拟复杂的系统来解决问题。下面是蒙特卡罗模拟的一个简单应用例子,求解pi的近似解。我们知道pi的9位有效数字的近似值是3.14159265。然后我使用的蒙特卡罗原理是这样的:单位长度为1的正方形中,我们在其中的一条对角线画一条弧得出一个扇形,刚好是单位为1的圆的1/4。如graph1。
: w0 `2 v5 H* |' F
5 a9 B) w3 h J% S. Y$ ^
然后我们在正方形内生成随机的点。然后统计点在弧线下方出现的次数。弧下方的点数/总点数=1/4倍的单位圆面积=(
πr^2)/4,
r=1。然后我们就可以得出pi的值。
\; G/ B# }4 ^" A$ P! c- L$ a
* N! @' s) H/ g' ~# t* ^3 {
以下是鄙人的蒙特卡罗模拟求pi的python程序:
# n6 y% G9 M& L1 x" z3 P2 e8 ^
#Author : Naupio
$ e; l! Q4 Z# {, q( i5 A1 q
import random as rd
/ ~$ {; `+ A2 z& `( B
/ o3 s3 I' h# p3 k3 [& K
8 y6 f& V: L6 |3 v
def findpi(times = 1000):
4 r; w+ q+ ?( _$ G" n
counts = 0.0
$ w) {6 H' v+ L2 f# {' W' D; J9 q
for i in range(times):
* h4 X$ X- |' P6 j# M/ S
x = rd.random()
" v1 p. a4 ~/ n
y = rd.random()
6 ^. n1 Y. m0 j% {7 M, }% @5 @
if (x**2+y**2)<1:
' w. Q1 @6 t4 `0 g* @
counts+=1
# c" T* N$ }. c+ n9 `' F5 l
return (counts*4)/(times*1)
$ S; d$ ~1 T+ G Y7 E" t
% H% e% l; }' t& ~+ X/ h* h
2 I3 l) j7 J: o$ ?3 I
print "蒙特卡罗模拟一千次得出的pi近似值为:",findpi(1000)
0 f& d4 z5 z/ Y O1 ]
print "蒙特卡罗模拟一万次得出的pi近似值为:",findpi(10000)
5 J" F' H( I0 { L! O
print "蒙特卡罗模拟十万次次得出的pi近似值为:",findpi(100000)
, p' m O/ r) c% F: e, Q' \
print "蒙特卡罗模拟一百万次得出的pi近似值为:",findpi(1000000)
: Y+ P3 S9 M6 z, P: j
print "蒙特卡罗模拟一千万次得出的pi近似值为:",findpi(10000000)
% |# u1 i4 k' j9 v8 B; b
print "蒙特卡罗模拟五千万次得出的pi近似值为:",findpi(50000000)
& [+ O8 p/ v( W
+ q6 E! v6 M+ `4 v
以下是蒙特卡罗模拟的结果图:
9 Z$ W- F1 ?* n; K4 q2 x; Q& ]
' e, V& J. A) s( r
4 [! s E2 F7 V" R2 Q% B. k
最后鄙人说几句:
/ j0 |- T0 C6 ^
从模拟的结果来看,是非常成功的,随着模拟次数的增加,结果越来越接近pi的真实值 。蒙特卡罗模拟当然还有很多用法,下次有空时,鄙人会尝试用蒙特卡罗模拟来求解积分值。
4 b$ q3 U1 `3 \- I7 c
@madio
@百年孤独
@数学中国—罂粟
( N' T5 W! [! y6 V+ j. i; w( P
ps :鄙人无法保证绝对的正确性,如有误导之处,欢迎指正,同时也欢迎交流,转载请注明出去,版权所有。
, ]3 U5 b, u& h5 `
0 Y, {8 W; N1 R$ A
2 l" l9 N" K3 a& R. t
/ B& M l2 W3 B$ ~4 [! I- {
/ Q) ]# ^ I5 Z; B |( C
作者:
dazhou123
时间:
2015-2-4 13:15
我来赞一个 ,,用Python会更方便
3 U! L4 G' j9 J+ c
作者:
深梦沉睡
时间:
2016-4-16 11:49
感谢楼主分享
7 W( _/ g* y$ M( ~
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5