前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言 蒙特卡洛模拟计算π

R语言 蒙特卡洛模拟计算π

作者头像
拴小林
发布2020-12-29 15:29:09
1.7K0
发布2020-12-29 15:29:09
举报
文章被收录于专栏:数据驱动实践数据驱动实践

蒙特卡洛法的基本思想是:为了求解问题,首先建立一个概率模型或随机过程,使它的参数或数字特征等于问题的解:然后通过对模型或过程的观察或抽样试验来计算这些参数或数字特征,最后给出所求解的近似值。解的精确度用估计值的标准误差来表示。蒙特卡洛法的主要理论基础是概率统计理论,主要手段是随机抽样、统计试验。用蒙特卡洛法求解实际问题的基本步骤为:

  1. 根据实际问题的特点.构造简单而又便于实现的概率统计模型.使所求的解恰好是所求问题的概率分布或数学期望;
  2. 给出模型中各种不同分布随机变量的抽样方法;
  3. 统计处理模拟结果,给出问题解的统计估计值和精度估计值。

考虑平面上的一个边长为1的正方形及其内部的一个形状不规则的“图形”,如何求出这个“图形”的面积呢?Monte Carlo方法是这样一种“随机化”的方法:向该正方形“随机地”投掷N个点,有M个点落于“图形”内,则该“图形”的面积近似为M/N。

代码语言:javascript
复制

center <- c(1,1)
distanceToCenter <- function(a){sqrt(sum((center-a)^2))}

set.seed(1234)
n <- 10000 #设定生成n个点
mx <- matrix(runif(n*2,min = 0,max = 2),nrow = n,ncol = 2,byrow = T)
b <- apply(mx,1,distanceToCenter)
# 求向量distance中元素值小于半径1的个数
# 因逻辑表达式结果要么0,要么1,故可用distance<1
num <- mean(b<1)
pi <= 4*num
pi

par(bg="beige")
plot(mx,col="azure3",asp = 1)
abline(h=0,col="red",lty="dotdash",lwd=2)
abline(h=2,col="red",lty="dotdash",lwd=2)
abline(v=0,col="red",lty="dotdash",lwd=2)
abline(v=2,col="red",lty="dotdash",lwd=2)


points(mx[b<1,],col="green")

library(plotrix)
draw.circle(1,1,1,border="coral2",lty="dashed",lwd=2) #绘制一个圆
points(x=1,y=1,col="red",pch=20,cex=1.5,lwd=1.5)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据驱动实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档