APP下载

蒙特卡罗方法模拟计算圆周率

2014-07-28彭滔魏雷阳

电脑知识与技术 2014年17期
关键词:R语言

彭滔 魏雷阳

摘要:蒙特卡罗方法是一种新型计算方法,它需要真实的随机数,在统计学方面有强有力的应用,随着高性能计算机变得越来越便宜,此方面变得愈发普遍,该文通过设计一个随机试验,建立pi值与试验次数的联系方程,使用R语言来模拟计算PI值。

关键词:蒙特卡罗方法;随机模拟;R语言

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)17-4038-02

A New Way to Compute Simulately PI with Monte Carlo Method in R Language

PENG Tao, WEI Lei-yang

(Sanya Polythenic College, Sanya 572022, China)

Abstract: Monte Carlo methods is a new way of computational algorithms, basically Monte Carlo simulation methods require truly random numbers , Monte Carlo is a powerful numerical technique useful for solving problems especially in statistics. When high-speed computers becomes cheap,the method has gained in importance and popularity,when a circle with its bounding square is drawn,let randomly generate a point in the squre, the probability that the point falls in the circle is circle area /square area = PI/4,we can get pi from the equation.We finish the stochastic simulation with R language in the article.

Key words: Monte Carlo methods; stochastic simulation; R languange

1 蒙特卡罗方法简介

蒙特卡罗方法是一种随机模拟方法,以概率和统计理论方法为基础,使用随机数(或更常见的伪随机数)来解决计算问题的方法。其早期的雏形存在于17-18世纪,1777年法国数学家普丰(Georges Louis Leclere de Buffon,1707—1788)提出用投针实验的方法求圆周率π,统计史上称为普丰投针问题。

在平面上画有一组间距为a的平行线,将一根长度为l(l

p=2l/(πa) π为圆周率。

几个世纪以来,先后有无数人重复了这个试验,比较有名气的试验见下表。

该方法的简要步骤概括如下:

1)根据概率论或统计理论建立一个数学模型(方程、等式或不等式)

2)以人工试验的方法进行大量的重复工作,记录每次试验的结果

3)利用概率的统计定义,归纳全部试验结果,从已经建立的模型中,解出研究对象的数值。

由于该方法涉及大量的手工试验,在计算机技术没有发展之前,缺乏推广,导致使用受限。

20世纪40年代美国在第二次世界大战中,为了研制原子弹,力推“曼哈顿计划”,该计算的成员S.M.乌拉姆和J.冯·诺伊曼结合当时已有的计算技术,重新推出这种统计模拟计算方法,他们以驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,蒙特卡罗方法。该方法与普丰投针时代的做法完全类似,同样可以分解成3个计算步骤(或成为算法),唯一的区别在于,用编写的计算机程序自动运行,取代了手工试验的方式,该方法结合了计算的强大运行能力,产生了良好的效果,在金融工程学,宏观经济学,生物医学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算、核工程)等领域应用广泛。

蒙特卡洛方法适用范围很广泛,它既能求解确定性的问题,也能求解随机性的问题以及科学研究中的理论问题.例如利用蒙特卡洛方法可以近似地计算定积分,即产生数值积分问题。

2 蒙特卡罗算法

我们根据现有的计算技术,重新整理蒙特卡罗算法,并用R语言实现一个简单的莫特卡罗模拟,计算出圆周率。

假定有个半径是1的圆,这个圆有个外接的正方形,换句话说:这个单位圆内接于一个边长为2的正方形,我们截取1/4 个圆周,在这个区域内,随机绘制点,圆内的点用红点标示,园外的点(仍旧在正方形内)用绿点标示,总计做了n次试验,每次产生一个点,共有n1个点(红点)在园内(含正好落在圆周上),n2个点(绿点)在园外,n1+n2=n,如何计算圆周率?

园内的红点/所有的点=圆的面积/正方形的面积=PI*r*r/(2*r)*(2*r)

PI=4*圆内的红点/所有的点=4*圆内的红点/总试验次数

3 R语言实现

根据上面的方程,我们可以用R语言编制计算程序。

设计一个可以重复使用的函数,参数表示试验次数,由于对称性,只需考虑1/4个圆周即可,我们取第一象限作为研究对象,每次试验在0,1内随机产生一个x值,一个y值,一对(x,y)构成一个点,每个点如果满足x^2 +y^2 <= 1,表明它落在园内,园内的计数增加1。通过for循环完成上面的步骤。

getpi <- function(number){

0 → count

for( i in 1:number){ #用循环进行计算

runif(1,0,1) → x #产生随机数

runif(1,0,1) → y #产生随机数

if (x^2 +y^2 <= 1 ) count <- count+1 } #判断点的位置

return(4*count/number) } #返回计算结果

getpi(1000) 模拟1000次试验

[1] 3.104

getpi(100000) 模拟100000次试验

[1] 3.14268

至此,我们用R语言演示了构造整个蒙特卡洛模拟的过程,得到了PI的近似值,由于程序使用的是伪随机数,计算精度受到一定影响,现代信息技术可以利用数学思想进行高效率的实现,避免手工试验的低效枯燥,R语言聊聊7行完成这样一个算法,其编程的效率令人震惊,R语言是最强大的统计计算工具。

参考文献:

[1] 陈希孺.概率论与数理统计[M].合肥:中国科学技术大学出版社,2009.

[2] MBA智库百科[EB/OL].http://wiki.mbalib.com/wiki/蒙特卡罗方法?.

[3] R语言 R: A Language and Environment for Statistical Computing Vienna, Austria 2013[EB/OL].http://www.R-project.org/.

摘要:蒙特卡罗方法是一种新型计算方法,它需要真实的随机数,在统计学方面有强有力的应用,随着高性能计算机变得越来越便宜,此方面变得愈发普遍,该文通过设计一个随机试验,建立pi值与试验次数的联系方程,使用R语言来模拟计算PI值。

关键词:蒙特卡罗方法;随机模拟;R语言

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)17-4038-02

A New Way to Compute Simulately PI with Monte Carlo Method in R Language

PENG Tao, WEI Lei-yang

(Sanya Polythenic College, Sanya 572022, China)

Abstract: Monte Carlo methods is a new way of computational algorithms, basically Monte Carlo simulation methods require truly random numbers , Monte Carlo is a powerful numerical technique useful for solving problems especially in statistics. When high-speed computers becomes cheap,the method has gained in importance and popularity,when a circle with its bounding square is drawn,let randomly generate a point in the squre, the probability that the point falls in the circle is circle area /square area = PI/4,we can get pi from the equation.We finish the stochastic simulation with R language in the article.

Key words: Monte Carlo methods; stochastic simulation; R languange

1 蒙特卡罗方法简介

蒙特卡罗方法是一种随机模拟方法,以概率和统计理论方法为基础,使用随机数(或更常见的伪随机数)来解决计算问题的方法。其早期的雏形存在于17-18世纪,1777年法国数学家普丰(Georges Louis Leclere de Buffon,1707—1788)提出用投针实验的方法求圆周率π,统计史上称为普丰投针问题。

在平面上画有一组间距为a的平行线,将一根长度为l(l

p=2l/(πa) π为圆周率。

几个世纪以来,先后有无数人重复了这个试验,比较有名气的试验见下表。

该方法的简要步骤概括如下:

1)根据概率论或统计理论建立一个数学模型(方程、等式或不等式)

2)以人工试验的方法进行大量的重复工作,记录每次试验的结果

3)利用概率的统计定义,归纳全部试验结果,从已经建立的模型中,解出研究对象的数值。

由于该方法涉及大量的手工试验,在计算机技术没有发展之前,缺乏推广,导致使用受限。

20世纪40年代美国在第二次世界大战中,为了研制原子弹,力推“曼哈顿计划”,该计算的成员S.M.乌拉姆和J.冯·诺伊曼结合当时已有的计算技术,重新推出这种统计模拟计算方法,他们以驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,蒙特卡罗方法。该方法与普丰投针时代的做法完全类似,同样可以分解成3个计算步骤(或成为算法),唯一的区别在于,用编写的计算机程序自动运行,取代了手工试验的方式,该方法结合了计算的强大运行能力,产生了良好的效果,在金融工程学,宏观经济学,生物医学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算、核工程)等领域应用广泛。

蒙特卡洛方法适用范围很广泛,它既能求解确定性的问题,也能求解随机性的问题以及科学研究中的理论问题.例如利用蒙特卡洛方法可以近似地计算定积分,即产生数值积分问题。

2 蒙特卡罗算法

我们根据现有的计算技术,重新整理蒙特卡罗算法,并用R语言实现一个简单的莫特卡罗模拟,计算出圆周率。

假定有个半径是1的圆,这个圆有个外接的正方形,换句话说:这个单位圆内接于一个边长为2的正方形,我们截取1/4 个圆周,在这个区域内,随机绘制点,圆内的点用红点标示,园外的点(仍旧在正方形内)用绿点标示,总计做了n次试验,每次产生一个点,共有n1个点(红点)在园内(含正好落在圆周上),n2个点(绿点)在园外,n1+n2=n,如何计算圆周率?

园内的红点/所有的点=圆的面积/正方形的面积=PI*r*r/(2*r)*(2*r)

PI=4*圆内的红点/所有的点=4*圆内的红点/总试验次数

3 R语言实现

根据上面的方程,我们可以用R语言编制计算程序。

设计一个可以重复使用的函数,参数表示试验次数,由于对称性,只需考虑1/4个圆周即可,我们取第一象限作为研究对象,每次试验在0,1内随机产生一个x值,一个y值,一对(x,y)构成一个点,每个点如果满足x^2 +y^2 <= 1,表明它落在园内,园内的计数增加1。通过for循环完成上面的步骤。

getpi <- function(number){

0 → count

for( i in 1:number){ #用循环进行计算

runif(1,0,1) → x #产生随机数

runif(1,0,1) → y #产生随机数

if (x^2 +y^2 <= 1 ) count <- count+1 } #判断点的位置

return(4*count/number) } #返回计算结果

getpi(1000) 模拟1000次试验

[1] 3.104

getpi(100000) 模拟100000次试验

[1] 3.14268

至此,我们用R语言演示了构造整个蒙特卡洛模拟的过程,得到了PI的近似值,由于程序使用的是伪随机数,计算精度受到一定影响,现代信息技术可以利用数学思想进行高效率的实现,避免手工试验的低效枯燥,R语言聊聊7行完成这样一个算法,其编程的效率令人震惊,R语言是最强大的统计计算工具。

参考文献:

[1] 陈希孺.概率论与数理统计[M].合肥:中国科学技术大学出版社,2009.

[2] MBA智库百科[EB/OL].http://wiki.mbalib.com/wiki/蒙特卡罗方法?.

[3] R语言 R: A Language and Environment for Statistical Computing Vienna, Austria 2013[EB/OL].http://www.R-project.org/.

摘要:蒙特卡罗方法是一种新型计算方法,它需要真实的随机数,在统计学方面有强有力的应用,随着高性能计算机变得越来越便宜,此方面变得愈发普遍,该文通过设计一个随机试验,建立pi值与试验次数的联系方程,使用R语言来模拟计算PI值。

关键词:蒙特卡罗方法;随机模拟;R语言

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)17-4038-02

A New Way to Compute Simulately PI with Monte Carlo Method in R Language

PENG Tao, WEI Lei-yang

(Sanya Polythenic College, Sanya 572022, China)

Abstract: Monte Carlo methods is a new way of computational algorithms, basically Monte Carlo simulation methods require truly random numbers , Monte Carlo is a powerful numerical technique useful for solving problems especially in statistics. When high-speed computers becomes cheap,the method has gained in importance and popularity,when a circle with its bounding square is drawn,let randomly generate a point in the squre, the probability that the point falls in the circle is circle area /square area = PI/4,we can get pi from the equation.We finish the stochastic simulation with R language in the article.

Key words: Monte Carlo methods; stochastic simulation; R languange

1 蒙特卡罗方法简介

蒙特卡罗方法是一种随机模拟方法,以概率和统计理论方法为基础,使用随机数(或更常见的伪随机数)来解决计算问题的方法。其早期的雏形存在于17-18世纪,1777年法国数学家普丰(Georges Louis Leclere de Buffon,1707—1788)提出用投针实验的方法求圆周率π,统计史上称为普丰投针问题。

在平面上画有一组间距为a的平行线,将一根长度为l(l

p=2l/(πa) π为圆周率。

几个世纪以来,先后有无数人重复了这个试验,比较有名气的试验见下表。

该方法的简要步骤概括如下:

1)根据概率论或统计理论建立一个数学模型(方程、等式或不等式)

2)以人工试验的方法进行大量的重复工作,记录每次试验的结果

3)利用概率的统计定义,归纳全部试验结果,从已经建立的模型中,解出研究对象的数值。

由于该方法涉及大量的手工试验,在计算机技术没有发展之前,缺乏推广,导致使用受限。

20世纪40年代美国在第二次世界大战中,为了研制原子弹,力推“曼哈顿计划”,该计算的成员S.M.乌拉姆和J.冯·诺伊曼结合当时已有的计算技术,重新推出这种统计模拟计算方法,他们以驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,蒙特卡罗方法。该方法与普丰投针时代的做法完全类似,同样可以分解成3个计算步骤(或成为算法),唯一的区别在于,用编写的计算机程序自动运行,取代了手工试验的方式,该方法结合了计算的强大运行能力,产生了良好的效果,在金融工程学,宏观经济学,生物医学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算、核工程)等领域应用广泛。

蒙特卡洛方法适用范围很广泛,它既能求解确定性的问题,也能求解随机性的问题以及科学研究中的理论问题.例如利用蒙特卡洛方法可以近似地计算定积分,即产生数值积分问题。

2 蒙特卡罗算法

我们根据现有的计算技术,重新整理蒙特卡罗算法,并用R语言实现一个简单的莫特卡罗模拟,计算出圆周率。

假定有个半径是1的圆,这个圆有个外接的正方形,换句话说:这个单位圆内接于一个边长为2的正方形,我们截取1/4 个圆周,在这个区域内,随机绘制点,圆内的点用红点标示,园外的点(仍旧在正方形内)用绿点标示,总计做了n次试验,每次产生一个点,共有n1个点(红点)在园内(含正好落在圆周上),n2个点(绿点)在园外,n1+n2=n,如何计算圆周率?

园内的红点/所有的点=圆的面积/正方形的面积=PI*r*r/(2*r)*(2*r)

PI=4*圆内的红点/所有的点=4*圆内的红点/总试验次数

3 R语言实现

根据上面的方程,我们可以用R语言编制计算程序。

设计一个可以重复使用的函数,参数表示试验次数,由于对称性,只需考虑1/4个圆周即可,我们取第一象限作为研究对象,每次试验在0,1内随机产生一个x值,一个y值,一对(x,y)构成一个点,每个点如果满足x^2 +y^2 <= 1,表明它落在园内,园内的计数增加1。通过for循环完成上面的步骤。

getpi <- function(number){

0 → count

for( i in 1:number){ #用循环进行计算

runif(1,0,1) → x #产生随机数

runif(1,0,1) → y #产生随机数

if (x^2 +y^2 <= 1 ) count <- count+1 } #判断点的位置

return(4*count/number) } #返回计算结果

getpi(1000) 模拟1000次试验

[1] 3.104

getpi(100000) 模拟100000次试验

[1] 3.14268

至此,我们用R语言演示了构造整个蒙特卡洛模拟的过程,得到了PI的近似值,由于程序使用的是伪随机数,计算精度受到一定影响,现代信息技术可以利用数学思想进行高效率的实现,避免手工试验的低效枯燥,R语言聊聊7行完成这样一个算法,其编程的效率令人震惊,R语言是最强大的统计计算工具。

参考文献:

[1] 陈希孺.概率论与数理统计[M].合肥:中国科学技术大学出版社,2009.

[2] MBA智库百科[EB/OL].http://wiki.mbalib.com/wiki/蒙特卡罗方法?.

[3] R语言 R: A Language and Environment for Statistical Computing Vienna, Austria 2013[EB/OL].http://www.R-project.org/.

猜你喜欢

R语言
基于Holt—Winters时间序列的图书选题预测模型
基于R语言的轿车销量分析基于R语言的轿车销量分析
基于R语言时间序列的轿车销量分析及预测
R语言在统计分析中的使用技巧
基于R语言的学生成绩分析
基于GPS轨迹数据进行分析改善城市交通拥挤
基于R语言的Moodle平台数据挖掘技术的研究
基于R语言的湖南产业结构对其经济增长贡献分析
注重统计思维培养与应用为主导的生物统计学课程建设
人民币汇率的均值回复检验及Hurst指数计算