Matlab蒙特卡罗模拟
Matlab蒙特卡羅模擬:
可以用蒙特卡羅方法來近似模擬求pi值:
思路:
設(shè)相互獨立的隨機(jī)變量X,Y均服從[-1,1]上的均勻分布,則(X,Y)服從{-1≤x≤1, 1≤y≤1}上的二元均勻分布(即圖1中正方形區(qū)域上的二元均勻分布),記事件A = {x2+y2≤1},則A事件發(fā)生的概率等于單位圓面積除以邊長為2的正方形的面積,即P(A) = pi/4,從而可得圓周率pi = 4P(A). 而P(A)可以通過蒙特卡洛模擬法求得,在圖1中正方形內(nèi)隨機(jī)投點(即橫坐標(biāo)X和縱坐標(biāo)Y都是[-1,1]上均勻分布的隨機(jī)數(shù)),落在單位圓內(nèi)的點的個數(shù)m與點的總數(shù)n的比值m/n可以作為A事件的概率P(A)的近似,隨著投點總數(shù)的增加,m/n會越來越接近于P(A),從而可以得到逐漸接近于pi的模擬值。
function piva=PiMonterCarlo(n)
x=0;y=0;d=0;
m=length(n);
pivalue=zeros(m,1);
for i=1:m
x=2rand(n(i),1)-1;
y=2rand(n(i),1)-1;
d=x.2+y.2;
pivalue(i)=4sum(d<=1)/n(i);
end
if nargout==0
if m>1
figure;
plot(n,pivalue,‘k.’);
h=refline(0,pi);
set(h,‘linewidth’,2,‘color’,‘r’);
text(1.05n(end),pi,’\pi’,‘FontSize’,15);
xlabel(‘投點個數(shù)’);
ylabel(’\pi的模擬值’);
else
figure;
plot(x,y,‘r.’);
hold on;
h=rectangle(‘Position’,[-1 -1 2 2],‘LineWidth’,2);
t=linspace(0,2*pi,100);
plot(cos(t),sin(t),‘k’,‘LineWidth’,2);
xlabel(‘X’);ylabel(‘Y’);
title(‘Pi的模擬值:’,num2str(pivalue));
axis([-1.1 1.1 -1.1 1.1]);axis equal;
end
else
piva=pivalue;
end
還可以模擬K值
結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的Matlab蒙特卡罗模拟的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机滴滴响重启,电脑发出滴滴声是什么原
- 下一篇: Django开发了个人博客以及开通公众号