gusucode.com > matlab通信工程仿真源码(张德丰等编著)程序书籍 > matlab_code/matlab通信工程仿真源码(张德丰等编著)/第5章/li5_2.m

     clear all;
s=0:0.01:2*pi;
x=sin(s);
y=cos(s);       %计算半径为1的圆周上的点,以便作出圆周观察
m=0;            %在圆内在落点计数器
x1=2*rand(999,1)-1;     %产生均匀分布于[-1 1]直接的两个独立随机数x1,y1
y1=2*rand(999,1)-1;
N=999;          %设置试验次数
for n=1:N       %循环进行重复试验并统计
    p1=x1(1:n);
    q1=y1(1:n);
    if(x1(n)*x1(n)+y1(n)*y1(n))<1  %计算落点到坐标原点的距离,差别落点是否在圆内
    m=m+1;                           %如果落入圆中,计数器加1
    end
    plot(p1,q1,'.',x,y,'-k',[-1 -1 1 1 -1],[-1 1 1 -1 -1],'-k');
    axis equal;       %坐标纵横比例相同
    axis([-2 2 -2 2]);  %固定坐标范围
    text(-1,-1.2,['试验总次数n=',num2str(n)]);  %显示试验结果
    text(-1,-1.4,['落入圆中数m=',num2str(m)]); 
    text(-1,-1.6,['近似圆面积Sc=',num2str(m/n*4)]);  
    set(gcf,'DoubleBuffer','on');
    drawnow;
end


 tic                   %启动计时器
n=10000;              %每次随机落点10000个
for k=1:1000          %重复试验1000次
    x1=2*rand(n,1)-1;
    y1=2*rand(n,1)-1;
    m(k)=sum((x1.*x1+y1.*y1)<1);  %求落入圆中的点数和
end
Sc=mean(m).*4./n         %计算并显示结果
time=toc                 %显示耗时