基于Julia语言的蒙特卡洛方法求圆周率 π \pi π

原理: ( x , y ) (x,y) (x,y)是平面上的一点,其中 x , y x, y x,y 服从均匀分布 U ( − 1 , 1 ) U(-1,1) U(−1,1),假设得到2000个样本点,如下图所示

圆的面积 S 1 = π r 2 = π S_{1}=\pi r^2=\pi S1​=πr2=π,正方形的面积 S 2 = ( 2 r ) 2 = 4 r 2 = 4 S_{2}=(2r)^2=4r^2=4 S2​=(2r)2=4r2=4。若落在圆内的点为 N 1 N_{1} N1​个,落在正方形内的样本点数是 N 2 N_{2} N2​个, N 2 N_{2} N2​ 也是所有的样本点数。因此可以得到下面的近似关系
S 2 S 1 = 4 π ≈ N 2 N 1 \frac{S_{2}}{S_{1}}=\frac{4}{\pi} \approx \frac{N_{2}}{N_{1}} S1​S2​​=π4​≈N1​N2​​
即 S 1 = π ≈ 4 N 1 N 2 S_{1}=\pi \approx \frac{4N_{1}}{N_{2}} S1​=π≈N2​4N1​​。

用Julia语言实现的代码如下所示:

#导入包
using Plots
using Distributions
#用蒙特卡洛方法求pi值
sample_num = 2000;
dist = Uniform(-1,1);sample_x = rand(dist,sample_num);
sample_y = rand(dist,sample_num);count = 0;
plot()for k in range(1,sample_num,step=1)if (sample_x[k]^2+sample_y[k]^2)<=1#落入圆内的点count = count + 1plot!([sample_x[k]],[sample_y[k]],shape=:circle,markersize=2,markercolor=:black,mscolour=:black)else#落入圆外的点plot!([sample_x[k]],[sample_y[k]],shape=:circle,markersize=2,markercolor=:green,mscolour=:green)end
endprint("sample_num = ",sample_num,"\n","count = ",count,"\n","pi=",count/sample_num * 4.0)#画出圆心为(x0,y0),半径为r的圆
x0 = 0
y0 = 0
r = 1tmin = 0
tmax = 2pitvec = range(tmin,tmax,length=100)x = r.*sin.(tvec).+ x0
y = r.*cos.(tvec).+ y0plot!(x,y,aspect_ratio = 1,linecolor=:red,legend=false)# 画圆心
plot!([x0],[y0],shape=:circle,markercolor=:black,mscolour=:black)#画出矩形 (x_left_up,y_left_up)、(x_right_up,y_right_up)、
#       (x_right_down,y_right_down)、(x_left_down,y_left_down)x_left_up = -1; x_right_up = 1; x_right_down = 1; x_left_down = -1;
y_left_up = 1; y_right_up = 1; y_right_down = -1; y_left_down = -1;rectangle_x = [x_left_up, x_right_up, x_right_down, x_left_down, x_left_up]
rectangle_y = [y_left_up, y_right_up, y_right_down, y_left_down, y_left_up]
plot!(rectangle_x,rectangle_y,linecolor=:blue,legend=false,linewidth=2)#保存图片
savefig("montecarluo")

仿真结果:

蒙特卡洛方法求圆周率相关推荐

  1. 【MPI OpenMP】并行蒙特卡洛方法求圆周率(C语言)

    本文记录了使用MPI与OpenMP两种并行计算方法实现蒙特卡洛计算圆周率,题目是专业实验课上老师给的,主要分享一下自己的做法,希望大家不吝赐教(使用的语言是C语言). 蒙特卡洛方法求圆周率 蒙特卡洛方 ...

  2. 利用蒙特卡洛方法计算圆周率并将撒点分布和π估计值可视化(Python大作业)

    这个大作业做的比较简单,其他同学动辄两三百行,我只是出于纯个人兴趣,想了解一下第三方库matplotlib的用法以及更加直观的了解蒙特卡洛方法. 首先是蒙特卡洛方法求圆周率的部分: >>& ...

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

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

  4. R语言:蒙特卡洛方法求积分

    蒙特卡洛方法(MC) 一.蒙特卡洛方法简介 二.利用蒙特卡罗方法计算圆周率 三.利用蒙特卡洛方法求定积分 例1 例2 例3 总结: 一.蒙特卡洛方法简介 蒙特卡洛方法得名于摩纳哥的蒙特卡洛赌场,是大数 ...

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

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

  6. 利用拉马努金公式和蒙特卡洛方法计算圆周率

    拉马努金公式 #求阶乘函数 def myreduce(m):value = 1for i in range(1,m+1):value = value*ireturn value#求和项的函数 def ...

  7. 蒙特卡洛方法计算圆周率

    import random import mathdef calpai():n = 10000000 #随机实验次数r = 1.0 #圆的半径a, b = (0.0, 0.0) #中心点x_neg, ...

  8. matlab蒙特卡洛方法求积分,matlab-蒙特卡洛法估计积分值

    <matlab-蒙特卡洛法估计积分值>由会员分享,可在线阅读,更多相关<matlab-蒙特卡洛法估计积分值(6页珍藏版)>请在人人文库网上搜索. 1.西安交通大学实验报告课程: ...

  9. python使用蒙特卡洛方法计算圆周率的流程图怎么画_在python中用蒙特卡洛算法计算圆周率...

    本文写给那些python初学者与对蒙特卡洛算法感兴趣,但却不知该如何理解或应用的人. (虽然我发现这个貌似有许多人做过了,但是程序都相对复杂,不便于理解,于是我就自己编写了一段程序,海龟的可视化请看下 ...

最新文章

  1. 面试现场:小伙伴美团一面的分享和分析「含解答」
  2. 储存卡怎么格式化为fat32_电脑复制文件到U盘提示文件容量太大该怎么办?
  3. JavaAppArguments
  4. mysql触发器 node_node.js中事件触发器events的使用
  5. 【转】使用JMeter对数据库做压力测试
  6. 未获取root手机抓包方法
  7. python excel数据可视化软件_excel是基础的数据分析与可视化工具
  8. 六个重要的.NET概念:栈、堆、值类型、引用类型、装箱和拆箱
  9. leetcode(300)—— Longest Increasing Subsequence(最长递增子序列)
  10. matlab求任意点最短路径,【最短路】求两点间最短路径的改进的Dijkstra算法及其matlab实现...
  11. VBS中转换二进制数据为字符串常用办法
  12. 如​何​计​算​当​地​的​中​央​子​午​线​经​度
  13. 强制更改wifi名前缀CMCC
  14. 信息系统分析与设计 第十章 系统总体设计
  15. halcon模板匹配实践(5)使用橡皮擦涂抹功能实现减少模板匹配特征
  16. web性能压力测试工具材料
  17. 【NAS备份】摆脱丢数据的噩梦,群晖备份硬核实战教程分享
  18. wlop2020全奖励包_真的要来?网友发现新更新包拥有“夜魇暗潮2020”信息
  19. 虚拟机或公有云搭建wordpress博客
  20. 小小的Toast蕴含大道理(解决关闭通知时原生Toast不显示问题)

热门文章

  1. antv g2 x轴两边留边距
  2. 移动CMPP3.0短信网关接口协议
  3. JQuery UI的拖拽功能
  4. float转int 四舍五入问题
  5. 事件循环libevent实现echoclient
  6. 鸿蒙出来后H5足以取代原生app
  7. kindle 4.1.1越狱换中文字体
  8. 适合程序员的笔记本电脑
  9. python-数据分析-pandas
  10. 【人工智能Prolog】Prolog解决数独问题