zoukankan      html  css  js  c++  java
  • R语言蒙特卡罗估计π

     初学蒙特卡洛

     

    center <- c(2.5,2.5)            #圓心
    radius <- 2.5   #半徑 
    distancefromcenter <- function(a){    # 點到直线的距离
      sqrt(sum((a-center)^2))
    }
    n <- 1000000
    A <- matrix(runif(2*n,0,5),nrow = n,byrow = T)  #一行为一个点,n行
    b <- apply(A, 1, distancefromcenter)   #对矩阵A按行计算点到直线的距离
    num <- mean(b<radius)  #括号里为1或0,求均数相当于计算了1占n的比例 table(b<radius)
    pai <- num*4  #圆面积与正方形面积之比 为π/4
    pai
    #画图
    par(bg='beige') #背景色
    plot(A,col='azure3',xlab = '',ylab = '',asp = 1) #asp让x和y轴的刻度量度一样
    abline(h=0,col='goldenrod4',lty='dotdash',lwd=3) #画上下左右的直线
    abline(h=5,col='goldenrod4',lty='dotdash',lwd=3)
    abline(v=5,col='goldenrod4',lty='dotdash',lwd=3)
    abline(v=0,col='goldenrod4',lty='dotdash',lwd=3)
    points(A[b<radius,],col='aquamarine3')
    install.packages('plotrix')
    library(plotrix)
    draw.circle(2.5,2.5,2.5,border='coral2',lty='dashed',lwd=3) #画圆
    points(2.5,2.5,col='brown1',pch=19,cex=1.5,lwd=1.5)  #圆心
    
    #模拟
    paivector <- c()
    for(i in 1:10000){
      n <- i
      A <- matrix(runif(2*n,0,5),nrow = n,byrow = T)  #一行为一个点,n行
      b <- apply(A, 1, distancefromcenter) 
      d <- subset(b,b<radius)
      num <- length(d)/length(b)
      paivector[i] <- num*4
    }
    
    install.packages('data.table')
    library(data.table)
    class(paivector)
    pa <- data.frame(paivector)
    pa1 <- data.table(pa)   #enhanced data frame
    pai <- pa1[,id:=seq(0,9999)] #可以直接加添加一列,但是pa不行
    pai <- pa1[,error := abs(pi-paivector)]
    names(pai) <- c('guess','id','error')
    
    library(ggplot2)
    ggplot(pai,aes(x=id,y=error))+geom_line(color='#388E8E')+ggtitle('error')+xlab('sample size')+ylab('error')
    

      

    Valar morghulis
  • 相关阅读:
    Codeforces D
    Codeforces C
    Minimal Ratio Tree HDU
    Tian Ji -- The Horse Racing HDU
    Monkey Banana Problem LightOJ
    Rooks LightOJ
    洛谷 P2742 [USACO5.1]圈奶牛Fencing the Cows || 凸包模板
    洛谷 P3382 【模板】三分法
    洛谷 P1438 无聊的数列
    洛谷 P1082 同余方程
  • 原文地址:https://www.cnblogs.com/super-yb/p/12109643.html
Copyright © 2011-2022 走看看