蒙塔卡罗算法计算圆周率

蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计问题。
假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x,y)必然在木板上(更多的时候是落在单位圆内),
如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以4,这个数字会无限逼近圆周率的值。
这就是蒙特·卡罗发明的用于计算圆周率近似值的方法。
编写程序,模拟蒙特·卡罗计算圆周率近似值的方法,输入掷飞镖次数,然后输出圆周率近似值。

from random import random

def pi(times):
    nums = 0

    for i in range(times):
        # random函数默认范围时[0,1),取不到1
        x = random()
        y = random()

        if x*x + y*y < 1:
            nums += 1

    return 4 * nums/times
    # 正方形的面积/圆的面积=落在圆中的面

print(pi(100))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蒙特卡罗模拟在MATLAB中的实现相对简单。首先,你需要生成一组随机点,这些点的坐标在一个指定的范围内。然后,你可以计算这些点在一个特定区域内的个数,以估计该区域的面积或概率。在模拟圆周率的情况下,你可以生成一组随机点,并计算它们与单位圆的距离。如果点在单位圆内的距离小于或等于1,则认为点在圆内。 下面是一个简单的MATLAB代码示例,用于模拟蒙特卡罗方法计算圆周率: ```matlab % 设置模拟参数 numPoints = 1000000; % 随机点的数量 % 生成随机点 x = rand(1, numPoints); y = rand(1, numPoints); % 计算点与单位圆的距离 dist = sqrt(x.^2 + y.^2); % 统计在圆内的点的数量 numPointsInCircle = sum(dist <= 1); % 计算估计的圆周率 piEstimate = 4 * numPointsInCircle / numPoints; % 显示结果 disp(['估计的圆周率为:', num2str(piEstimate)]); ``` 在这个示例中,`numPoints`表示生成的随机点的数量。通过使用`rand`函数生成两个长度为`numPoints`的随机向量`x`和`y`,这些向量的值在0和1之间。然后,使用欧氏距离公式计算每个点与原点(0,0)之间的距离。最后,通过计算在单位圆内的点的数量,除以总点数,并乘以4来估计圆周率。 请注意,这只是蒙特卡罗模拟的一种实现方式,你也可以根据具体的需求和问题进行修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【Matlab】蒙特卡罗法模拟圆周率+对析的GIF生成【超详细的注释和释】](https://blog.csdn.net/Yu_Cblog/article/details/126132438)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [蒙特卡罗模拟法 —— matlab](https://blog.csdn.net/qq_25990967/article/details/122875888)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值