matlab模拟圆周率——蒙特卡罗法

  • 蒙特卡罗法

蒙特卡罗法也称统计模拟法、统计试验法,特别适用于一些解析法难以求解甚至不可能求解的问题。前提必须建立在一个随机试验之上,利用事件发生的频率作为事件发生的概率的近似值,试验次数越多,求得未知数的值将越准确。

  • 模拟圆周率思路

 利用 1/4 单位圆的面积:

S = 1/4 * π R^2 

S = 1/4 π

 在 1×1 的正方形内随机点在 1/4 圆内概率:

理论值 :P = 1/4 π

试验值 :总点数(allpoints)  /  在1/4 单位圆内的点数(count)

 求得圆周率:

π \approx  count  /  allpoints * 4

  • matlab代码

allpoints = input('请输入生成的总点数');
count = 0;
for i =1 : allpoints
    if rand^2 + rand^2 <= 1 %rand是0~1的随机数
        count = count + 1;
    end
end
res = count / allpoints*4;
disp(res);
  •  GIF动图代码

    for i = [500, 1000, 2000, 5000, 10000]
        x1 = linspace(0,1,10000);
        y1 = (1-x1.^2).^0.5;
        
        x2 = rand([1,i]);
        y2 = rand([1,i]);
        
        count = 0;
        for j = 1:i
            if x2(j)^2 + y2(j)^2 <= 1
                count = count + 1;
            end
        end
    end
    
    plot(x1,y1,'k.',x2,y2,'.');
    
    title([num2str(count)+"/"+num2str(i) +"4"+"="+num2str(count/i*4)]);
    axis square;
    
    frame = getframe(gcf);
    I = frame2im(frame);
    [I,map]=rgb2ind(I,256);
    
     if i==500
         imwrite(I,map,'test.gif','gif','LoopCount',inf,'DelayTime',0.5);
     else
         imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.5);
     end
    

     截取图像:

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小俱的一步步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值