• MATLAB模拟布丰投针实验


    MATLAB模拟布丰投针实验

    标签(空格分隔): 算法


    Buffon's Needle

    桌面上有距离为a的若干平行线,将长度为L的针随机丢在桌面上,则这根针与平行线相交的概率是多少?假定L < a.
    思路:从针据横线的距离与夹角得出。
    解决:

    1. 假设针的中点到最近横线的距离为y,则(yin[0,frac{a}{2}]);
    • 因为投针是随机的,所以y服从均匀分布:

    [ f(y) = egin{cases} frac{2}{a}, & ext{$0 leq y leq frac{a}{2}$} \ 0, & ext{others} end{cases} ]

    1. 假定横线向右为正向,记投针与横线正向的角为( heta),则( heta in[0, pi]),为均匀分布。

    [f( heta) = egin{cases} frac{1}{pi}, & ext{$0 leq heta leq pi$} \ 0, & ext{others} end{cases} ]

    投针与横线有交点,即(y leq frac{L}{2}sin heta)

    布丰投针估算(pi) -- 蒙特卡罗模拟

    针与横线有交点的概率:
    (P(x) = int_{0}^{pi}int_{0}^{frac{L}{2}sin heta}f(y, heta)dyd heta = int_{0}^{pi}int_{0}^{frac{L}{2}sin heta}f(y)f( heta)dyd heta \ = int_{0}^{pi}int_{0}^{frac{L}{2}sin heta}frac{2}{a} * frac{1}{pi}dyd heta = frac{2L}{api})

    如果做n次投针实验,其中有k次针与横线相交,则针与横线相交的频率为:(frac{k}{n}),根据大数定理,频率也就为概率。
    $ frac{2L}{api} approx frac{k}{n}$ 即, (pi approx frac{2Ln}{ak})

    MATLAB模拟实验

    用布丰投针实验近似计算(pi)的值:
    代码如下:

    l = 0.6; %针的长度
    a = 1; %平行线的宽度
    n = 1000000; %做n次投针试验
    k = 0; %记录针与平行线相交的次数
    y = unifrnd(0, a/2, 1, n); %在[0, a/2]内服从均匀分布随机产生n个数
    theta = unifrnd(0, pi, 1, n); %在[0, pi]内服从均匀分布随机产生n个数
    for i=1:n
        if y(i) < (l/2)*sin(theta(i)) 
            k = k + 1;
        end
    end
    f = k / n;
    Pi = (2*l*n)/(a*k);
    

    结果如图所示:
    此处输入图片的描述
    如此进行多次实验,进行估计。
    如图为进行100次重复投针实验,每次投针1000000次,结果如图所示:

  • 相关阅读:
    JSP使用JDBC ODBC 实例
    Gradle templates 的使用
    Java 中使用Jackson反序列化
    Java getResourceAsStream返回为空的问题
    MVC 学习随笔(一)
    分区信息查看
    关于线程 wait notify sleep
    synchronized与Lock
    java类初始化
    oracle sql 执行原理
  • 原文地址:https://www.cnblogs.com/little-YTMM/p/5685139.html
Copyright © 2020-2023  润新知