MATLAB蒙特卡洛方法求圆周率π(代码详解)

一 计算原理

        一个正方形内部内切一个圆,设圆的半径为r,则正方体的边长为2r。在该正方体内部,随机投掷n个均匀分布的点,统计投掷点在圆内的与总点数的比例,得出圆的近似面积,就是π的值。理论上,n越大,实验次数越多,计算得出的π的值就越精准。

二 所使用的计算公式

圆形参数方程:x = a=r*cosθ;y = b+r*sinθ;

两点之间距离公式:

三 完整代码

%蒙特卡洛算法求解pi的值

%初始化数据:p为投掷点的个数,(a,b)为圆心,t为在在圆内的投掷点个数
p = 10000;
r = 1;
a = 1;
b = 1;
t = 0;

%绘制圆
theta = 0:pi/20:2*pi;
x = a+r*cos(theta);
y = b+r*sin(theta);
plot(x,y);
title('蒙特卡洛算法求pi的值');
hold on%使图像持续存在

%绘制点  t为在圆内的随机点数
for i = 1:p%循环p次,生成p个点
    p_x = rand*2;%随机生成点p在x轴的坐标
    p_y = rand*2;%随机生成点p在y轴的坐标
    %如果该点在圆内,则为绿色且t的计量加一,不在则为红色
    if (p_x-1)^2 + (p_y-1)^2 < 1
        plot(p_x,p_y,'.','Colo',[0,0,1]);
        t = t+1;
    else
        plot(p_x,p_y,'.','Colo',[1,0,0]);
    end
end

%计算圆的近似面积,s为圆的近似面积,因为r = 1,则pi = s
s = (t/p)*4;
pi = s;

四 实验结果

1.随机投掷点数:10000

运行结果:

        π = 3.141600 

        误差:0.0000074

2.随机投掷点数:200000

运行结果:

        π = 3.142804

        误差:0.001247

3.随机投掷点数:500000

运行结果:

        π = 3.142476

        误差:0.0008834

  • 13
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值