IOS研究之蒙特卡罗法求圆周率π(PI)(



[摘录自百度百科]蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。上章研究了Property
List详解
需要了解的可以看看。

下面介绍使用蒙特·卡罗方法求解圆周率PI的方法。

算法模型:

假设有一个1单位边长的正方形,我们再以该正方形的一个顶点为圆点,以1单位为半径做一个1/4圆弧,如图。

根据圆形面积公式可是:s=πr^2=π。而1/4的圆弧则为s/4=π/4。而正方形面积为1。

我们假设这样一个情景:限定有一些随机的点落在该正方形内,点的个数为n,而落在圆弧内的点为m(如何判断一个点在圆内还是圆弧外呢?因为圆弧上的点距离圆心正好是半径1,所以距离圆心小于1的就在圆内,比如图中的蓝色点,而红色点在圆外),则如果点数足够多的话,会于正方形和圆弧的面积有关,即有:1/4圆弧面积除以正方形面积=π/4=m/n.

则有:π=4*m/n。

如果用计算机模拟大量的随机数,则会计算出比较精确的π。

下面是蒙特·卡罗方法求π的C语言实现。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

#include < iostream >

#include < cmath >

#include < ctime >

#define  COUNT 500000  // 循环取样次数

using  
namespace  std;

// 判断点是否在1/4圆范围之内

bool  InCircle(
double  x,
double  y)

{

if
((x *
x +
y * y)
<= 1
)

return  
true ;

return  
false ;

}

void  main()

{

double  x,y;

int  num
= 0
;

int  i;

srand((unsigned)time(NULL));

for
(i
= 0
;i
< COUNT;i
++ )

{

x
= rand()
* 1.0
/ RAND_MAX;//产生0-1之间的随机数

y
= rand()
* 1.0
/ RAND_MAX;

if
(InCircle(x,y))

num
++ ;

}

cout
<< " PI: "
<< (num *
4.0 )
/ COUNT
<< endl;

}

IOS研究之蒙特卡罗法求圆周率π(PI)(

时间: 2024-10-10 02:31:21

IOS研究之蒙特卡罗法求圆周率π(PI)(的相关文章

17.求圆周率PI: PI/4 = 1- 1/3 + 1/5 -1/7 +.....

#include<iostream>using namespace std;int YuanZhou(int); int main(){    int n;    double temp,sum=0;    cout<<"please input an number: "<<endl;    cin>>n;    for(int i=1;i<=n;i++)    {        if(i%2==0)        {       

【小白成长撸】--多项式求圆周率PI

1 /*程序的版权和版本声明部分: 2 *Copyright(c) 2016,电子科技大学本科生 3 *All rights reserved. 4 *文件名:多项式求PI 5 *程序作用:计算圆周率PI 6 *作者:Amoshen 7 *完成日期:2016.9.28 8 *版本号:V2.0 9 */ 10 11 #include<stdio.h> 12 13 int main(void) 14 { 15 double pi = 0.0,i = 1.0;//pi/4 = 1 - 1/3 + 1

Python中利用进度条求圆周率

从祖冲之到现在,圆周率的发展越来越丰富,求法也是越来越快其中: 1.求圆周率的方法: (1)蒙特卡罗法 这是基于“随机数”的算法,通过计算落在单位圆内的点与正方形内的比值来求圆周率PI. 如果一共投入N个点,其中有M个落入圆中,则要点均匀,假定圆周率的半径为R,则: (2)欧拉恒等式公式为: 基础的泰勒级数: (2)求python进度表 代码: #!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 18-5-21 下午3:44# @Autho

IOS研究之App转让流程须知详细介绍

 网络上有很多开发者提问怎么转让App并想知道具体的流程.实际上Appstore的App转让流程还是比较简单的,下面特酷吧根据自己的实际操作总结下iOS Appstore中App的转让流程,供大家参考.对网络开发不明白的朋友可以看IOS研究之网络编程Cocoa Streams使用详解 一,App的转让 (1)App转让的条件 至少有在Appstore上发售的版本,即应用状态为:"ready for sale".其他一些条件参考itunes connect中应用详情页面点击"

IOS研究之iOS7适配的使用详细说明

近日,我对项目进行了iOS7适配,迟迟没有使用7.0SDK是因为旧工程使用iOS7.0有一些问题,趁着这次机会,我详细整理了适配iOS7需要注意的几个地方.记录如下: 一,iOS7 UITableViewCell适配 (1)iOS7 UITableViewCell背景色 在iOS7之前UITableViewCell的backgroundColor是透明的,但在iOS7中默认白色背景,如果使用iOS7 SDK的UITableViewCell显示不正常,只需要需修改: [cell setBackgr

IOS研究之网络编程(二)-Cocoa Streams使用详解

 本文以及相关的系列文章是我总结的iOS网络开发方面的知识点,本文是第二篇,主要分析了Cocoa Streams中的几个重要类 Cocoa Streams实际上是Objective-C对CFNetwork的简单封装,主要包含了三个类:NSStream, NSInputStream, and NSOutputStream.本部分的接口接口比较简单,用法一目了然.我在这里就只列出接口,方便查阅.对CFNnework不明白的看IOS研究之网络编程(一)-CFNetwork使用详解 NSStream

[转载]IOS研究之App转让流程须知详细介绍

原文地址:http://www.tuicool.com/articles/uQRF3yM 网络上有很多开发者提问怎么转让App并想知道具体的流程.实际上Appstore的App转让流程还是比较简单的,下面特酷吧根据自己的实际操作总结下iOS Appstore中App的转让流程,供大家参考.对网络开发不明白的朋友可以看  IOS研究之网络编程Cocoa Streams使用详解 一,  App的转让 (1)App转让的条件 至少有在Appstore上发售的版本,即应用状态为:”ready for s

俩个月的IOS研究-记

这是自己的第一遍博客,注册博客园已经好几个月了,因为今天回复一个帖子加图片要先开通博客,所以就顺手过来记载些东西.刚毕业的时候做嵌入式的,做的都是C的东西,大概有一年半.年初离职后,在新公司写上脚本了,8月底项目结束后,老板想在公司增加IOS技术,所以让暂时处于空闲的我研究IOS了.从9月1号拿到黑苹果开始,我的IOS研究之路起航了.快2个月了,完全自己一个人在搞,没一个人帮忙,整个公司就我自己做这个方向,有时候好无助,遇到问题只能自己苦思冥想,或者上园子里溜溜寻求帮助.第一个月基于一个云通讯平

IOS研究之App转让流程须知具体介绍

 网络上有非常多开发人员提问怎么转让App并想知道具体的流程.实际上Appstore的App转让流程还是比較简单的.以下特酷吧依据自己的实际操作总结下iOS Appstore中App的转让流程.供大家參考.对网络开发不明确的朋友能够看IOS研究之网络编程Cocoa Streams使用具体解释 一,App的转让 (1)App转让的条件 至少有在Appstore上发售的版本号,即应用状态为:"ready for sale".其它一些条件參考itunes connect中应用详情页面点击