蒲丰氏投针问题的模拟过程
更新时间:2024-04-06 18:28:01 阅读量: 综合文库 文档下载
- 蒲丰投针问题证明推荐度:
- 相关推荐
蒲丰氏投针问题的模拟过程,随机数发生器也是自编的,以供大家参考和提出建议。谢谢。(seed1和seed2最好选择3和5,为了使投针次数达到1000000,CVF进行如下设置Project->settings->link->
output,将stack allocations reserve:设为1000000000) ??
program getpi
implicit none
real,parameter::a=5,L=4,pi=3.14159 integer::n1,i,counter=0
real,allocatable::R1(:),R2(:) real::theta,x,pi1
write(*,*) 'input the size of the array:' read(*,*) n1
allocate(R1(n1)) allocate(R2(n1)) call random(n1,R1,R2) do i=1,n1
x=a*(2*R1(i)-1) theta=pi*R2(i)
if(abs(x) pi1=(1.0*n1)/(counter*1.0)*(2.0*L/a) write(*,*) 'this is PI:' write(*,*) pi write(*,\1.0 &*counter/n1 stop end program subroutine random(n,R1,R2) implicit none integer n,seed1,seed2,i,little,m real::R1(n),R2(n) integer::temp1(n),temp2(n) write(*,*) 'input seed1' read(*,*) seed1 write(*,*) 'input seed2' read(*,*) seed2 m=2**30 m=m*2-1 temp1(1)=397204094 temp2(1)=temp1(1) R1(1)=(1.0*temp1(1))/(1.0*m) R2(1)=(1.0*temp2(1))/(1.0*m) little=0 if(R1(1)<0.5) little=little+1 do i=1,n-1 temp1(i+1)=mod(seed1*temp1(i),m) R1(i+1)=(1.0*temp1(i+1))/(1.0*m) temp2(i+1)=mod(seed2*temp2(i),m) R2(i+1)=(1.0*temp2(i+1))/(1.0*m) if(R1(i+1)<0.5) little=little+1 . end do ; write(*,*) 'ratio of number which is little than 0.5' write(*,*) 1.0*little/n return end subroutine 拟蒙特卡洛方法(Quasi-Monte Carlo)积分实例 %使用Matlab提供的函数求积分,exp(-1/2*x^2)在(0,1)间积分 format long; syms x a = sym(1/2); f = exp(-a*x^2); ezplot(f) disp(int(f,-1,1)); fprintf('integral result:%1.18f.\\n',double(int(f,0,1))); %disp(double(int(f,0,1))); 复制代码%使用拟蒙特卡洛方法积分 %得到拟蒙特卡洛序列,即低偏差序列,halton法 %如果有相关的工具箱的话,可以用Matlab里面的haltonset,faureset,sobolset函数实现, x=halton(10000,2,5577); n=length(x); mju=0; for i=1:n mju=mju + exp(-0.5*x(i)^2); end mju=mju/n; fprintf('Quasi-Monte Carlo result:%1.18f.\\n',mju); %disp(mju); %使用蒙特卡洛方法积分 %得到Uniform序列, x=random('unif',0,1,10000,1); n=length(x); mju=0; for i=1:n mju=mju + exp(-0.5*x(i)^2); end mju=mju/n; fprintf('Monte Carlo result:%1.18f.\\n',mju); %=============生成HALTON序列======================== function result = halton( m,base,seeder ) %生成HALTON序列 % Check inputs if nargin < 3 seeder = 0; if nargin < 2 error('MATLAB:Halton:NotEnoughInputs',... 'Not enough input arguments. See Halton.'); end end res=0; n=length(base); for i=1:m for j=1:n element=0; temp=seeder+i; k=1; while temp>0 element(k)=rem(temp,base(j)); temp=fix(temp/base(j)); k=k+1; end res(i,j)= 0; for k=1:length(element) res(i,j)=res(i,j)+element(k)/(base(j)^k); end end end result=res;
正在阅读:
蒲丰氏投针问题的模拟过程04-06
2016煤矿区队、班组安全生产管理制度10-19
文具盒里的事作文450字07-07
环境生态学导论复习要点04-03
论文 - 浅析企业员工绩效考核制度201-23
中国人民解放军各集团军编制战斗序列大全05-02
综合管网工程施工方案04-10
有趣的草原之旅作文600字06-28
高考英语一轮复习综合测试05-08
- 冀教版版五年级科学下册复习资料
- 微生物学复习提纲
- 2013—2014学年小学第二学期教研组工作总结
- 国有土地转让委托服务合同协议范本模板
- 我的固废说明书
- 企业管理诊断报告格式
- 东鼎雅苑施工组织设计
- 谈谈如何做好基层党支部书记工作
- 浮梁县环保局市级文明单位创建工作汇报
- 管理学基础知识
- 大学物理实验报告23 - PN结温度传感器特性1
- 计算机网络实践
- 酒桌上这四种情况下要坐牢,千万别不当回事……
- 国家康居示范工程建设技术要点
- 中国贴布行业市场调查研究报告(目录) - 图文
- 新课标下如何在高中物理教学中培养学生的创新能力初探
- 营养师冬季养生食谱每日一练(7月4日)
- 关注江西2017年第3期药品质量公告
- 建设海绵城市专题习题汇总
- 10万吨年环保净水剂建设项目报告书(2).pdf - 图文
- 过程
- 模拟
- 问题
- 丰氏投
- 2018年学校未成年人保护工作总结与2018年学校法制宣传教育工作总
- 招标代理方案
- 2012年湖南公务员面试真题(含解析)
- 四年级品德与社会上册第一课
- 培训班结业主持词
- 国家电网公司SG186-电力ERP-电力SAP工作培训资料 - 图文
- 中学教师职务评审通过人员名单
- 现代物流基础物流课程标准
- linux运维工程师简历
- 幼儿园教师个人培训总结
- 与名师对话2015新课标A版数学文一轮复习课时作业:6-5
- 2018最全出国日常英语词汇(带详细分类)
- 必修二知识总结
- 2018年上半年北京工程测量员技师考试题
- 甲级单位编制义头项目可行性报告(立项可研+贷款+用地+2013案例
- 施工总承包框架协议
- 电力系统自动装置试题 - 图文
- 测试技术参考答案(王世勇,前三章)汇总
- 扩大国内自主招生是利大于弊还是弊大于利 赛评
- 纳米银粉的市场分析 - 图文