文章目录

  • 前言
  • 模拟思路
  • GIF模拟动图的生成
    • GIF动图生成的基本思路
    • 单张静态图的生成
    • GIF的生成
  • 尾声

前言

因为博主最近要准备数学建模大赛了,在学习matlabpython之余,博主也会继续给大家输出博主的学习日记!
今天是带来的是数学建模中的一个比较简单和基础的问题,圆周率的模拟。
我们采用到的模拟方法是蒙特卡罗法。
图片取自百度百科:

  • 简单点来说就是随机在一个平面生成若干点,计算在单位圆内的点的个数,从而模拟出圆周率。

那么这里博主先安利一下一些干货满满的专栏啦!

数据结构专栏:数据结构 这里包含了博主很多的数据结构学习上的总结,每一篇都是超级用心编写的,有兴趣的伙伴们都支持一下吧!
算法专栏:算法 这里可以说是博主的刷题历程,里面总结了一些经典的力扣上的题目,和算法实现的总结,对考试和竞赛都是很有帮助的!
力扣刷题专栏:Leetcode 想要冲击ACM、蓝桥杯或者大学生程序设计竞赛的伙伴,这里面都是博主的刷题记录,希望对你们有帮助!
C的深度解剖专栏:C语言的深度解剖 想要深度学习C语言里面所蕴含的各种智慧,各种功能的底层实现的初学者们,相信这个专栏对你们会有帮助的!


模拟思路

  • 随机在一个平面生成若干点,计算在单位圆内的点的个数,从而模拟出圆周率。
allPoints = 10000; % 我们设置生成的总点数越多,结果越逼近圆周率
cnt=0;
for i=1:allPointsif rand^2+rand^2<=1 % 这个点在四分之一圆内cnt=cnt+1; % 计数器加一end
end
res=cnt/allPoints*4; % 因为是四分之一圆,记得乘4
disp(res);

GIF模拟动图的生成

在数学建模比赛中或者在日常数据分析中,用图的方式呈现结果,往往会让复杂的问题更清晰更明白的展示出来。

GIF动图生成的基本思路

  • 基本思路:多张图片组合而成

单张静态图的生成

x1=linspace(0,1,10000); % 随机在[0,1]之间生成10000个点
y1=(1-x1.^2).^0.5;   % 这个其实就是四分之一圆的方程x2=rand([1,500]);% 生成随机数的向量
y2=rand([1,500]);% 先统计一下,有多少个点在四分之一圆里面 -- 因为我们要写标题
count=0;
for j=1:500% 注意:x2和y2都是一个数组if (x2(j)^2+y2(j)^2)<=1 % 点在四分之一圆里面的条件count=count+1;end
end
% plot(x1,y1,x2,y2);% 这样直接画其实不是散点的形式,所以要加一个参数'.'
plot(x1,y1,x2,y2,'.');
title(num2str(count)+"/"+num2str(500)+'*'+"4="+num2str(count/500*4));% 给图片设置标题
axis square; % 可以让横纵坐标长度相同

图片的生成效果:

GIF的生成

  • 其实思路非常简单,我们直接使用一个循环,生成多张图,最后组合一下即可。
    生成GIF的代码:
    % 这段代码稍微可以记一下,是用来生成gif的frame = getframe(gcf); %捕获坐标区或图窗作为影片帧I = frame2im(frame); %返回与影片帧关联的图像数据[I,map]=rgb2ind(I,256);%将 RGB 图像转换为索引图像I,关联颜色图为 mapif i == 500imwrite(I,map,'test.gif','gif', 'Loopcount',inf,'DelayTime',0.2);% 这里的0.2指的是,每幅图切换时候的时间间隔elseimwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.2);%                              append表示是图像时不断追加进去的% test.gif这个文件会被放到默认的当前目录下end

蒙特卡罗模拟圆周率GIF生成总代码:

% 我们来绘制模拟圆周率当时的那张gif
for i=[500,1000,2000,5000,10000]x1=linspace(0,1,10000);y1=(1-x1.^2).^0.5;x2=rand([1,i]);% 这些500都改成iy2=rand([1,i]);count=0;for j=1:iif (x2(j)^2+y2(j)^2)<=1count=count+1;endendplot(x1,y1,'black .',x2,y2,'.');title(num2str(count)+"/"+num2str(i)+'*'+"4="+num2str(count/i*4));axis square;% 这段代码稍微可以记一下,是用来生成gif的frame = getframe(gcf); %捕获坐标区或图窗作为影片帧I = frame2im(frame); %返回与影片帧关联的图像数据[I,map]=rgb2ind(I,256);%将 RGB 图像转换为索引图像I,关联颜色图为 mapif i == 500imwrite(I,map,'test.gif','gif', 'Loopcount',inf,'DelayTime',0.2);elseimwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.2);%                              append表示是图像时不断追加进去的% test.gif这个文件会被放到默认的当前目录下end
end

生成效果:

尾声

看到这里,相信我们已经学会蒙特卡罗法模拟圆周率的过程了,当然,这离数学建模的要求,离我们的目标还非常遥远,博主在不断学习的过程中,也希望可以通过分享学习日记的方式带动大家!如果你感觉这篇文章对你有帮助的话,不要忘了点赞!关注!收藏噢!

【Matlab】蒙特卡罗法模拟圆周率+对应解析的GIF生成【超详细的注释和解释】相关推荐

  1. 【STL源码剖析】list模拟实现 | 适配器实现反向迭代器【超详细的底层算法解释】

    今天博主继续带来STL源码剖析专栏的第三篇博客了! 今天带来list的模拟实现! 话不多说,直接进入我们今天的内容! 前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕数据结构https://b ...

  2. 2023年天津市逆向re2.exe解析-比较难(超详细)

    2023年天津市逆向re2.exe解析(较难) 1.拖进IDA里进行分析 2.动态调试 3.编写EXP脚本获取FLAG 4.获得FLAG 1.拖进IDA里进行分析 进入主程序查看伪代码 发现一个循环, ...

  3. 物联网控制原理与技术--基于Matlab/利用MATLAB进行频域分析(伯德图)的应用(超详细/设计/实验/作业/练习)

    目录 课程名:物联网控制原理与技术 内容/作用:设计/实验/作业/练习 学习:利用MATLAB进行频域分析(伯德图) 一.前言 二.环境与设备 三.原理 四.内容 五.结果与分析 课程名:物联网控制原 ...

  4. Matlab蒙特卡罗模拟

    Matlab蒙特卡罗模拟: 可以用蒙特卡罗方法来近似模拟求pi值: 思路: 设相互独立的随机变量X,Y均服从[-1,1]上的均匀分布,则(X,Y)服从{-1≤x≤1, 1≤y≤1}上的二元均匀分布(即 ...

  5. 云南林业职业技术学院计算机考试试题,云南林业职业技术学院单招模拟题(含解析)9.docx...

    云南林业职业技术学院单招模拟题(含解析)9 育龙单招网,单招也能上大学! 2016年云南单招 云南林业职业技术学院 考试模拟题(含解析) 本云南云南林业职业技术学院单招考试模拟题,内容来自于相关网站和 ...

  6. matlab高中必修三数学模拟,基于MATLAB的模拟调制实验报告

    <基于MATLAB的模拟调制实验报告>由会员分享,可在线阅读,更多相关<基于MATLAB的模拟调制实验报告(19页珍藏版)>请在金锄头文库上搜索. 1.基于 MATLAB 的模 ...

  7. matlab 颜色势能,Matlab在模拟晶面势能分布中的应用

    ComputerKnowledgeand Technology 电脑知识与技术 本栏目责任编辑:唐一东人工智能及识别技术 第 6 卷第 31 期 (2010 年 11 月) Matlab 在模拟晶面势 ...

  8. 云南林业计算机单招试题,2016年云南林业职业技术学院单招的模拟题含解析-.docx...

    2016年云南林业职业技术学院单招的模拟题含解析- 育龙单招网,单招也能上大学! 2016年云南单招 云南林业职业技术学院 考试模拟题(含解析) 本云南云南林业职业技术学院单招考试模拟题,内容来自于相 ...

  9. 计算机二级ps教程 百度云,全国计算机等级考试一级Photoshop模拟题及解析第六套(完整版).pdf...

    全国计算机等级考试一级 Photoshop 模拟题及解析第六套(完 整版) 一.单选题: 1.在设定层效果(图层样式)时 A. 光线照射的角度时固定的 B. 光线照射的角度可以任意设定 C. 光线照射 ...

最新文章

  1. 美参议员敦促SEC就雅虎黑客案信息披露义务展开调查
  2. jquery添加的html元素按钮为什么不执行类样式绑定的click事件
  3. Spring Boot @ConfigurationProperties注解的使用
  4. 【2012百度之星/资格赛】D:共同狂欢
  5. Yii2 的快速配置 api 服务 yii2-fast-api
  6. java 创建uri_使用UriBuilder快速创建URI
  7. 添加编译宏_软件开发——编译链接
  8. 2019软件测评师考试
  9. 怎样关闭计算机亮度自动调节,如何关闭计算机显示器的自动亮度调节功能
  10. 2017年一线城市程序员工资大调查
  11. TCPIP网络编程项目式教程(微课版)
  12. 数据库学习总结(六)——查询练习题(1)
  13. 基于ssm的房屋出租网
  14. python牛顿迭代法求平方根_Newton迭代法求平方根
  15. 广州电信高级前端开发工程师笔试题及答案(国企面试题大全)
  16. 2022数据结构习题(知产)
  17. 大数据最重要的算法是什么,最常用的算法有哪些?
  18. [美文]你懂得这些,才可能比别人更优秀!
  19. windows8下linux deepin双系统安装,记录一次Windows+Deepin双系统安装及简单优化
  20. C# treeView展示目录树

热门文章

  1. linux系统防篡改,网站防篡改脚本
  2. 免费SSL证书和付费SSL证书的区别在哪儿?
  3. SSL证书的申请流程
  4. st58服务器装系统,微pe硬盘安装系统教程
  5. larval中sessions的使用
  6. 什么是线程安全问题 及怎么解决线程安全问题
  7. Linux中的yum是什么?如何配置?如何使用?
  8. “Parallels Desktop” 已损坏,无法打开。您应该推出磁盘映像。处理办法
  9. BeanUtils.populate()用法
  10. 自己整理出来的java实现打印机打印小票