Monte_Carlo方法

Monte Carlo思想:模拟均匀分布,通过计算概率得到相关量的值

实质:随机抽样,为了实现统计推断

计算$\pi$值

x,y值为$0\sim 1$均匀分布的随机数。

计算$\pi$值的过程,就像撒一把芝麻到一个$1\times 1$的正方形面积上,落在半径为$1$的$\frac{1}{4}$圆弧内的芝麻数除以正方形面积里的总芝麻数,值为$\frac{\pi}{4}$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
% 蒙特卡洛方法
% 求pi的数值
clear all;
format compact
format short
mc_step=10000; %步长(点数)
n_try=zeros(2,mc_step); %随机点
i_inside=0; %落在1/4圆内点的个数
for i_mc=1:mc_step
x=rand;
y=rand;
r2=sqrt(x*x+y*y);
if r2<=1
i_inside=i_inside+1; %如果落在1/4圆内,则计数+1
end
n_try(:,i_mc)=[x;y];
end
pi_cal=4*i_inside/mc_step

f=@(x,y) x.^2+y.^2-1;
hold on
fimplicit(f,[0 1 0 1],"LineWidth",5)
plot(n_try(1,:),n_try(2,:),'.')
axis image
axis off

Monte_Carlo_Method_pi

The Goat Quiz

有三个宝箱,其中一个里面装着财宝,另外两个装着山羊。主持人事先知道三个宝箱的内容。挑战者选择一个宝箱,之后,主持人打开剩下宝箱中的一个,是山羊。然后问挑战者要不要把已挑选的宝箱换成剩下那个没有开的。换宝箱还是不换的情况下,赢得财宝的概率大?

思路就是用蒙特卡罗方法,仿真足够多随机样本的情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
% goat quiz
clear all;
format compact
format short

Try_number = 1000000;
wins=0;
Boxes_label = [1,2,3];
Remain_box = zeros(Try_number,2);
Treasure_box = zeros(1,Try_number);
Selected_box = zeros(1,Try_number);

% change
for i = 1:Try_number
Treasure_box(i) = ceil(rand*3);
Selected_box(i) = ceil(rand*3);
Remain_box(i,:) = Boxes_label(Boxes_label~=Selected_box(i));
%when chosing to change boxes, if the treasure is among the remaining boxes
%A man will always win the treasure,vice versa
if (Remain_box(i,1)==Treasure_box(i)) | (Remain_box(i,2)==Treasure_box(i))
wins = wins+1;
end
end


% As a consequence, Changing boxes will always be the better choice
% about 2/3 probability to get treasure
P_change = wins/Try_number %0.666
P_not_change = 1-P_change %0.333
打赏
  • Copyrights © 2020-2021 haoyu fang
  • 访问人数: | 浏览次数:

请我喝杯啤酒吧~

支付宝
微信