当前位置:文档之家› 蒙特卡罗与计算机模拟有代码

蒙特卡罗与计算机模拟有代码


以x表示 M 到最近一条
平行线的距离,以 φ表示针与此线的交角:
针落地的所有可能结果满足: 0 ? x ? a 2,0 ? ? ? ? 其样本空间视作矩形区域 Ω, 面积是: S(? ) ? a? 2
针与平行线相交的条件: 0 ? x ? sin ? l 2,0 ? ? ? ?
? 它是样本空间 Ω子集A,面积是:S(A) ?
?了解蒙特卡罗方法的起源和基本思想 ?掌握离散系统和连续系统计算机模拟实例 ?掌握随机函数 rand unifrnd normrnd exprnd ?了解Matlab 仿真模块 Simulink
拟模机算计与 法方罗卡特蒙 讲六第
蒙特卡罗方法的起源和基本思想2
蒙特卡罗方法 (Monte Carlo method) ,或称计 算机随机模拟方法,是一种基于“ 随机数”的计 算方法。源于美国在第二次世界大战研制原子弹 的“曼哈顿计划”,该计划的主持人之一数学家 冯·诺伊曼用驰名世界的 赌城—摩纳哥的 Monte Carlo —来命名这种方法,为它蒙上了)<l*sin(phi(i))/2 % 满足此条件表示针与线的相交 plot(phi(i),x(i),'r.'); frame(i)=getframe; % 描点并取帧 counter=counter+1; % 统计针与线相交的次数
end
end
fren=counter/n; pihat=2*l/(a*fren) % 用频率近似计算π
在一个边长为 a的正方形内随机投点,该点落 在此正方形的内切圆中的概率应为该内切圆与正
方形的面积比值,即 ? ?a / 2?2 : a2 ? ? / 4
n=10000; a=2; m=0;
for i=1:n
x=rand(1)*a; y=rand(1)*a;
y
if ( (x-a/2)^2+(y-a/2)^2 <= (a/2)^2 ) m=m+1;
蒲丰投针实验近似计算圆周率π3
蒲丰投针实验: 法国科学家蒲丰 (Buffon) 在1777年提
出的蒲丰投针实验是早期几何概率一个 非常著名的例子。蒲丰投针实验的重要 性并非是为了求得比其它方法更精确的 π值,而是它 开创了使用随机数处理确定性数学问 题的先河,是用 偶然性方法去解决确定性计算 的 前导,由此可以领略到从“概率土壤”上开出的 一朵瑰丽的鲜花 ——蒙特卡罗方法 (MC)
%movie(frame,1)
% 播放帧动画1次
拟模机算计与 法方罗卡特蒙 讲六第
蒲丰投针实验近似计算圆周率π6
蒲丰投针实验的计算机模拟:
意大利数学家拉泽里尼得到了准确到 6位小数 的π值,不过他的实验因为 太准确而受到了质疑
蒲丰投针实验计算圆周率π 7
拟模机算计与 法方罗卡特蒙 讲六第
蒙特卡罗投点法 是蒲丰投针实验的推广:
拟模机算计与 法方罗卡特蒙 讲六第
第六讲 蒙特卡罗与计算机模拟1
内容:计算机模拟 (或称仿真 )是一种广义数值计算 方法,适合解决一些规模大、难以解析化 以及受随机因素影响的不确定数学模型
目的: 了解蒙特卡罗方法的基本思想,掌握利用 Matlab 对离散/连续系统进行模拟的方法
要求:掌握Matlab 随机数函数,处理应用问题
蒙特卡罗方法的 基本思想很早以前就被人们所 发现和利用。早在 17世纪,人们就知道 用事件发 生的“频率”来决定事件的“概率” 。19世纪人 们用蒲丰投针 的方法来计算圆周率 π,上世纪40年 代电子计算机的出现,特别是近年来 高速电子计 算机 的出现,使得用数学方法在计算机上大量、
拟模机算计与 法方罗卡特蒙 讲六第
蒲丰投针实验 可归结为下面的数学问题 :平面 上画有距离为 a的一些平行线,向平面上任意投一 根长为l(l<a) 的针,假设针落在任意位置的可能性 相同,试求 针与平行线相交的概率 P(从而求π)
蒲丰投针实验近似计算圆周率π4
拟模机算计与 法方罗卡特蒙 讲六第
蒲丰投针实验:
如右图所示,以 M
表示针落下后的中点,
(a/2,a/2)
end end
ox
disp([' 投点法近似计算的π为: ',num2str(4*m/n)]);
常见分布的随机数产生语句 8
蒙特卡罗方法的 关键步骤在于随机数的产生, 计算机产生的随机数都不是 真正的随机数 (由算法 确定的缘故 ),如果伪随机数 能够通过一系列统计 检验,我们也可以将其 当作真正的随机数 使用:
拟模机算计与 法方罗卡特蒙 讲六第
蒲丰投针实验的计算机模拟:
format long; % 设置15位显示精度
a=1; l=0.6; % 两平行线间的宽度和针长
figure; axis([0%,p初i始,0化,绘a图/2板]);
set(gca,'nextplot','add'); % 初始化绘图方式为叠加 counter=0; n=2010; % 初始化计数器和设定投针次数 x=unifrnd(0,a/2,1,n); phi=unifrnd(0,pi,1,n); % 样本空间Ω
?
sin?l 2d? ? l
syms l phi; int('l/2*sin(phi)',phi,0,pi); %ans= l0
因此,针与平行线相交的概率为: p ? S(A)/ S(? ) ? 2l /a?
从而有:? ? 2l ap 特别当 a ? 2l 时 ? ? 1 p
蒲丰投针实验近似计算圆周率π5
unifrnd (a,b,m, n)
产生一个 [a,b上]均匀分布 的随机数 unifrnd(a,b) ③ 产生一个 1:n 的随机排列 (元素均出现且不重复 )
p=randperm(n) 注意: randperm(6) 与unifrnd (1,6,1, 6) 的区别
拟模机算计与 法方罗卡特蒙 讲六第
拟模机算计与 法方罗卡特蒙 讲六第
常见分布的随机数产生语句 9
MATLAB 可以直接产生 满足各种分布的随机数 具体命令如下 :
① 产生m×n阶[0,1上]均匀分布 的随机数矩阵
rand(m,n)
产生一个 [0,1上]均匀分布 的随机数
rand ② 产生m×n阶[a,b]上均匀分布 的随机数矩阵
相关主题