题目

蒙特卡罗算法的典型应用之一为求圆周率PI问题。

思想:

一个半径r=1r=1的圆,其面积为:S=PI∗r2=PI/4S = PI * r^2 = PI/4

一个边长r=1r=1的正方形,其面积为:S=r2=1S = r^2 = 1

那么建立一个坐标系,如果均匀的向正方形内撒点,那么落入圆心在正方形中心,半径为1的圆内的点数与全部点数的比例应该为PI/4PI/4,根据概率统计的规律,只要撒的点足够多,那么便会得到圆周率PIPI的非常近似的值。

蒙特卡罗算法关键

使用蒙特卡罗算法计算圆周率有下面两个关键点:

  1. 均匀撒点:在C语言中可用随机函数来实现,产生[0,1)[0,1)之间随机的坐标值(x,y)(x,y);
  2. 区域判断:位于圆内的点的特性是其与圆心的距离小于等于1,这样可用x2+y2<=1x^2+y^2来判断;

概率算法基本思想

概率算法是依照概率统计的思路来求解问题的算法,它往往不能得到问题的精确解。
执行的基本过程如下:

  1. 将问题转换为相应的几何图形S,S的面积是容易计算的,问题的结果往往对应几何图形某一部分S1的面积;
  2. 然后,向几何图形中随机撒点;
  3. 统计几何图形S和S1中的点数,根据面积关系得结果;
  4. 判断精度,满足要求则输出,不满足则返回(2);

概率算法大致分为以下4类:

  1. 数值概率算法
  2. 蒙特卡罗(Monte Carlo)算法
  3. 拉斯维加斯(Las Vegas)算法
  4. 舍伍德(sherwood)算法

代码实现

#include <iostream>
#include <cstdlib>
#include <ctime>using namespace std;double MontePI(int n)
{double PI;double x, y;int sum = 0;srand(time(NULL));for (int i = 0; i < n; i++){x = (double)rand() / RAND_MAX; //产生0~1之间的一个随机数y = (double)rand() / RAND_MAX; if (x*x + y*y <= 1)sum++;}//forPI = 4.0 * sum / n;return PI;
}int main()
{int n;double PI;cout << "蒙特卡罗算法求圆周率PI:" << endl;cout << "输入点数:" << endl;while (cin >> n){   PI = MontePI(n);cout << PI << endl;}system("pause");return 0;
}

GitHub源码下载

4_蒙特卡罗算法求圆周率PI相关推荐

  1. 7-3 蒙特卡罗方法求圆周率 (15 分)(Java)

    7-3 蒙特卡罗方法求圆周率 (15 分)(Java) 可算写出来了 使用蒙特卡洛仿真方法求圆周率.(具体要求见作业指导书 2020-OO第05次作业-2指导书V1.0.pdf ) 输入格式: 从键盘 ...

  2. (C++)按照公式求圆周率pi的近似值的两种方法

    方法一 #include<cstdio> #include<cmath> //求圆周率pi的近似值int main(){double PI=0,mu=1;int i=1;whi ...

  3. 求圆周率pi的近似值

    题目描述 用如下公式 求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加). 要求输出的结果总宽度占10位,其中小数部分为8位. 程序中使用浮点型数据时,请定义为双精度doubl ...

  4. 25593 Problem G 例题5-7 求圆周率pi的近似值

    问题 G: 例题5-7 求圆周率pi的近似值 时间限制: 1 Sec  内存限制: 12 MB 题目描述 用如下公式 求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加). 要求 ...

  5. 1067 例题5-7 求圆周率pi的近似值

    题目描述 用如下公式 求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加). 要求输出的结果总宽度占10位,其中小数部分为8位. 程序中使用浮点型数据时,请定义为双精度doubl ...

  6. 蒙特卡罗算法求PI的基础原理

    1.Monte Carlo蒙特卡罗算法(统计模拟法) Monte Carlo算法的基本思想是: 以模拟的"实验"形式.以大量随机样本的统计形式,来得到问题的求解. 比如,求圆周率, ...

  7. 求圆周率pi的怪异程序 祖冲之圆周率算法绝技之迷

    据说华罗庚曾讲过一个故事,说:有个教书先生喜欢喝酒,一天,他叫学生背圆周率,自己却提壶酒到山上庙里找老和尚喝酒去了.有个聪明的学生把圆周率编了个打油诗"山巅一寺一壶酒,尔乐苦煞吾,把酒吃:酒 ...

  8. 蒙特卡洛算法求圆周率

    遇到一个算法面试题,要求通过程序求出圆周率.作为数学渣的我,瞬间懵逼. 于是翻看其他大佬们对于圆周率的计算方式,看到一个比较好理解的算法:蒙特卡洛算法. 如上图,外接正方形的面积S1 = (2R)^2 ...

  9. 7-35 蒙特卡罗方法求圆周率 (30 分)

    使用蒙特卡洛仿真方法求圆周率. 输入格式: 从键盘输入四个实型数和一个整型数,分别为矩形左上角的横坐标.纵坐标.矩形长度.矩形宽度和投点次数,数与数之间可以用一个或多个空格或回车分隔. 输出格式: 如 ...

  10. C++ 概率算法 利用蒙特卡罗算法计算圆周率

    概率算法大致可分为4种形式: 数值概率算法: 蒙特卡罗算法: 拉斯维加斯算法: 舍伍德算法: 计算蒙特卡罗概率的算法实现: 1 #include "stdio.h" 2 #incl ...

最新文章

  1. supersocket中quickstart文件夹下的MultipleCommandAssembly的配置文件分析
  2. java的准动态(反射)
  3. 构建高性能分布式搜索引擎(Memcached-基础篇)一
  4. 基于SpringMVC进行REST服务开发
  5. 六妙招让死钱变活钱[转]
  6. 【Java】Java调用shell脚本
  7. TensorFlow:判断CUDA和GPU是否可用
  8. 开机出现 Invalid Partition Table 怎么办
  9. Nginx使用Expires增加浏览器缓存加速
  10. 【牛腩】牛腩新闻发布系统总结
  11. 斑马zebra GX420d打印机的Labview程序
  12. 【网络文摘】程序人生:我们工作到底为了什么
  13. 关于PS的一些常用技巧
  14. 加州大学圣地亚哥分校计算机科学排名,加州大学圣地亚哥分校计算机科学硕士排名第18(2020年TFE Times排名)...
  15. 教学管理系统的设计与实现(一)(源码,以及毕业论文)
  16. Base16和Base64不同的用途
  17. GPU编程 CUDA C++ 使用统一内存编程之【静态统一内存】
  18. 车内看车头正不正技巧_【交通安全提示】科二曲线行驶技巧图解,蜀黍手把手教你过关!...
  19. https温故而知新
  20. 联芯 1860平台 icn6211 mipi to RGB 转换芯片 调试 和 st7789 LCD调试spi 9bit 模式

热门文章

  1. 运行Puttygen.exe生成密钥
  2. IP地址库ipip.net
  3. 三部曲打造无路由器破解闪讯WiFi共享 经好几个同学验证
  4. Git 小乌龟(TortoiseGit)的详细使用
  5. matlab数组、矩阵运算
  6. L2-011 玩转二叉树 (25分)
  7. 关于Arduino下载并添加DHT11库文件的详细教程
  8. 按键精灵定位坐标循环_用按键精灵录制微信自动摇一摇脚本
  9. win10电脑休眠命令
  10. Android studio进行文件对比