蒙泰卡罗模拟应用求解pi近似值

定义

我们又可以称之为统计模拟方法,将所求解的问题同⼀定的概率模型相联系,⽤电⼦计算机实现统计模拟或抽样,以获得问题的近似解。

我们把需要求解的一个问题放到一个模型中,在模型中找出能近似表示这个值的特征。我们使用大量的随机数(这个随机数不仅仅指一个数,更广泛的指模型中发生的一次随机事件,我们将这个随机事件产生的效果简化为数,这个随机事件在这个模型产生的数值我们用随机数来代替)来模拟这个模型,随机数的数量越多,那么模拟的结果更加精确。

原理

由大数定理可知,当样本容量足够大时,事件的发生频率即为其概率。

布丰投针

一个经典的例子就是布丰投针,用于求解圆周率。

设我们有一个以平行且等距木纹铺成的地板,随意抛一支长度比木纹之间距离小的针,求针和其中一条木纹相交的概率。并以此概率来求解pi。

  1. 取一张白纸,在上面画上许多条间距为a的平行线。

  2. 取一根长度为l(l≤a) 的针,随机地向画有平行直线的纸上掷n次,观察针与直线相交的次数,记为m。

  3. 计算针与直线相交的概率,概率公式如下。
    p = 2 l π a = m n p = \frac{2l}{\pi a} = \frac{m}{n} p=πa2l=nm

我们根据相交的次数来求解pi值。

matlab 模拟

我们现在需要将布丰投针这个模型里发生的投针试验简化为数据。

我们每一次投针的不同之处在于针与平行线之间的夹角c,以及针的中心与其最近的平行线的距离a。我们根据这两个值来判断针与线是否相交。

这样我们就找到了每一次投针试验后产生的数据

  1. 针与平行线之间的夹角c

  2. 针的中心与其最近的平行线的距离a

  3. 针与线是否相交,即下面的公式。
    x ≤ l / 2 ∗ s i n ( c ) x \le l/2 * sin(c) xl/2sin(c)

length =  1;% 针的长度
a = 3;  % 平行线距离
n = 5200000;    % 投针试验的次数,n越大求出来的pi越准确
m = 0;    % 用于记录针与平行线相交的次数
x = rand(1, n) * a / 2 ;   % 针的中点和最近的一条平行线的距离
angle = rand(1, n) * pi;    % 针和最近的一条平行线的夹角
for i=1:n 
    if x(i) <= length / 2 * sin(angle (i))     % 判断是否相交
        m = m + 1; 
    end
end
p = m / n;    % 针和平行线相交出现的频率
predict_pi = (2 * length) / (a * p); 
disp(predict_pi)
% 3.1408
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值