蒙特卡洛方法求圆周率
基于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}} S1S2=π4≈N1N2
即 S 1 = π ≈ 4 N 1 N 2 S_{1}=\pi \approx \frac{4N_{1}}{N_{2}} S1=π≈N24N1。
用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")
仿真结果:
蒙特卡洛方法求圆周率相关推荐
- 【MPI OpenMP】并行蒙特卡洛方法求圆周率(C语言)
本文记录了使用MPI与OpenMP两种并行计算方法实现蒙特卡洛计算圆周率,题目是专业实验课上老师给的,主要分享一下自己的做法,希望大家不吝赐教(使用的语言是C语言). 蒙特卡洛方法求圆周率 蒙特卡洛方 ...
- 利用蒙特卡洛方法计算圆周率并将撒点分布和π估计值可视化(Python大作业)
这个大作业做的比较简单,其他同学动辄两三百行,我只是出于纯个人兴趣,想了解一下第三方库matplotlib的用法以及更加直观的了解蒙特卡洛方法. 首先是蒙特卡洛方法求圆周率的部分: >>& ...
- 7-35 蒙特卡罗方法求圆周率 (30 分)
使用蒙特卡洛仿真方法求圆周率. 输入格式: 从键盘输入四个实型数和一个整型数,分别为矩形左上角的横坐标.纵坐标.矩形长度.矩形宽度和投点次数,数与数之间可以用一个或多个空格或回车分隔. 输出格式: 如 ...
- R语言:蒙特卡洛方法求积分
蒙特卡洛方法(MC) 一.蒙特卡洛方法简介 二.利用蒙特卡罗方法计算圆周率 三.利用蒙特卡洛方法求定积分 例1 例2 例3 总结: 一.蒙特卡洛方法简介 蒙特卡洛方法得名于摩纳哥的蒙特卡洛赌场,是大数 ...
- 7-3 蒙特卡罗方法求圆周率 (15 分)(Java)
7-3 蒙特卡罗方法求圆周率 (15 分)(Java) 可算写出来了 使用蒙特卡洛仿真方法求圆周率.(具体要求见作业指导书 2020-OO第05次作业-2指导书V1.0.pdf ) 输入格式: 从键盘 ...
- 利用拉马努金公式和蒙特卡洛方法计算圆周率
拉马努金公式 #求阶乘函数 def myreduce(m):value = 1for i in range(1,m+1):value = value*ireturn value#求和项的函数 def ...
- 蒙特卡洛方法计算圆周率
import random import mathdef calpai():n = 10000000 #随机实验次数r = 1.0 #圆的半径a, b = (0.0, 0.0) #中心点x_neg, ...
- matlab蒙特卡洛方法求积分,matlab-蒙特卡洛法估计积分值
<matlab-蒙特卡洛法估计积分值>由会员分享,可在线阅读,更多相关<matlab-蒙特卡洛法估计积分值(6页珍藏版)>请在人人文库网上搜索. 1.西安交通大学实验报告课程: ...
- python使用蒙特卡洛方法计算圆周率的流程图怎么画_在python中用蒙特卡洛算法计算圆周率...
本文写给那些python初学者与对蒙特卡洛算法感兴趣,但却不知该如何理解或应用的人. (虽然我发现这个貌似有许多人做过了,但是程序都相对复杂,不便于理解,于是我就自己编写了一段程序,海龟的可视化请看下 ...
最新文章
- 面试现场:小伙伴美团一面的分享和分析「含解答」
- 储存卡怎么格式化为fat32_电脑复制文件到U盘提示文件容量太大该怎么办?
- JavaAppArguments
- mysql触发器 node_node.js中事件触发器events的使用
- 【转】使用JMeter对数据库做压力测试
- 未获取root手机抓包方法
- python excel数据可视化软件_excel是基础的数据分析与可视化工具
- 六个重要的.NET概念:栈、堆、值类型、引用类型、装箱和拆箱
- leetcode(300)—— Longest Increasing Subsequence(最长递增子序列)
- matlab求任意点最短路径,【最短路】求两点间最短路径的改进的Dijkstra算法及其matlab实现...
- VBS中转换二进制数据为字符串常用办法
- 如​何​计​算​当​地​的​中​央​子​午​线​经​度
- 强制更改wifi名前缀CMCC
- 信息系统分析与设计 第十章 系统总体设计
- halcon模板匹配实践(5)使用橡皮擦涂抹功能实现减少模板匹配特征
- web性能压力测试工具材料
- 【NAS备份】摆脱丢数据的噩梦,群晖备份硬核实战教程分享
- wlop2020全奖励包_真的要来?网友发现新更新包拥有“夜魇暗潮2020”信息
- 虚拟机或公有云搭建wordpress博客
- 小小的Toast蕴含大道理(解决关闭通知时原生Toast不显示问题)