数学建模社区-数学中国
标题:
使用python做蒙特卡罗模拟求pi
[打印本页]
作者:
思考者-Instrive
时间:
2014-9-18 17:12
标题:
使用python做蒙特卡罗模拟求pi
神奇的随机,蒙特卡罗模拟求pi
以下摘自百度百科:
- K* t8 n: G a
蒙特卡罗
模拟因摩纳哥著名的赌场而得名。它能够帮助人们从
数学
上表述物理、化学、工程、经济学以及
环境动力学
中一些非常复杂的相互作用。数学家们称这种表述为“模式”, 而当一种模式足够精确时, 他能产生与实际操作中对同一条件相同的反应。但
蒙特卡罗
模拟有一个危险的缺陷: 如果必须输入一个模式中的
随机数
并不像设想的那样是随机数, 而却构成一些微妙的非随机模式, 那么整个的模拟(及其预测结果)都可能是错的。
% |/ X5 \8 r% e6 D6 e/ v! ^
" J! ?0 M$ S' X5 f) A$ O% {
鄙人谈几句话:
$ l1 O. K# m6 q1 h" \
蒙特卡罗模拟的用处非常广,而且蒙特卡罗模拟听起来有点高端霸气上档次,其实蒙特卡罗模拟的原理很简单,就是利用“随机”去创造一个数学模型,从而模拟复杂的系统来解决问题。下面是蒙特卡罗模拟的一个简单应用例子,求解pi的近似解。我们知道pi的9位有效数字的近似值是3.14159265。然后我使用的蒙特卡罗原理是这样的:单位长度为1的正方形中,我们在其中的一条对角线画一条弧得出一个扇形,刚好是单位为1的圆的1/4。如graph1。
$ r- w5 ]- q7 t5 A! y" f
/ x0 D3 S; Q1 L% G) h- n" D
然后我们在正方形内生成随机的点。然后统计点在弧线下方出现的次数。弧下方的点数/总点数=1/4倍的单位圆面积=(
πr^2)/4,
r=1。然后我们就可以得出pi的值。
. C! ^) M* s8 ~
4 L# H- i0 L0 Q& a5 f
以下是鄙人的蒙特卡罗模拟求pi的python程序:
7 C4 o6 h% X) s& y. C
#Author : Naupio
' r: G( |' I) Y
import random as rd
% g! d9 D) O$ n F( d6 f: U
+ t" Q! r$ M5 I' ^1 N) F9 A& F
2 i8 _7 d: F/ |
def findpi(times = 1000):
( P# X9 T( j7 z5 l1 ?
counts = 0.0
) T" v0 W- e$ ?& v: g o" ^8 F& R3 y9 f# w
for i in range(times):
; X) }' h: | l* J: Z( S
x = rd.random()
" o3 y0 R) k9 |2 {
y = rd.random()
# _; q) I5 [$ r5 z
if (x**2+y**2)<1:
7 Q& S8 j \$ j6 G$ n
counts+=1
, n% ~. ?( K- ]3 i. b: D
return (counts*4)/(times*1)
5 o$ I# Y) ^* Z U
& Q( x$ o9 l% B* I
# [1 a$ }% D. @4 [9 Y+ K7 f- U
print "蒙特卡罗模拟一千次得出的pi近似值为:",findpi(1000)
2 g: j$ @* u z2 H9 y1 ^7 w7 i
print "蒙特卡罗模拟一万次得出的pi近似值为:",findpi(10000)
, ~' A1 @) f1 d1 P) l; P: \/ n
print "蒙特卡罗模拟十万次次得出的pi近似值为:",findpi(100000)
& h% b$ t, @# T. V
print "蒙特卡罗模拟一百万次得出的pi近似值为:",findpi(1000000)
8 v, H( \' J; o0 O5 v
print "蒙特卡罗模拟一千万次得出的pi近似值为:",findpi(10000000)
$ F3 |& m2 T4 D; e6 Z
print "蒙特卡罗模拟五千万次得出的pi近似值为:",findpi(50000000)
9 l% V: K' s0 u% L* t) d5 F& x8 z* b
& M* b) {7 H3 ]2 l* ^
以下是蒙特卡罗模拟的结果图:
! r+ C" c$ G4 A' y" @
# J% q2 ]2 C2 A0 a) l$ i) F
- _; L/ b+ p6 l
最后鄙人说几句:
$ Z/ J! K6 `1 j0 k
从模拟的结果来看,是非常成功的,随着模拟次数的增加,结果越来越接近pi的真实值 。蒙特卡罗模拟当然还有很多用法,下次有空时,鄙人会尝试用蒙特卡罗模拟来求解积分值。
1 ?0 V6 v( @$ i( `2 Y
@madio
@百年孤独
@数学中国—罂粟
- f& d* E$ G" |( D3 T% K9 A
ps :鄙人无法保证绝对的正确性,如有误导之处,欢迎指正,同时也欢迎交流,转载请注明出去,版权所有。
j* o, `0 F6 Y: t
# d/ A. P: ]! R% m( N& J$ n
5 }$ ~- P! q/ G2 w3 {3 i1 s4 E0 n
* |) E7 `- F0 I! b: L: A# u
$ i5 |( r% z% t2 o& r" e$ ~# F
作者:
dazhou123
时间:
2015-2-4 13:15
我来赞一个 ,,用Python会更方便
, I8 d# M1 m4 H& O# }; x3 z* e
作者:
深梦沉睡
时间:
2016-4-16 11:49
感谢楼主分享
+ J' L* j6 t2 x9 E& e+ N/ ~
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5