前言

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

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

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

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


模拟思路

  • 随机在一个平面生成若干点,计算在单位圆内的点的个数,从而模拟出圆周率。
allPoints = 10000; % 我们设置生成的总点数越多,结果越逼近圆周率
cnt=0;
for i=1:allPoints
if 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,关联颜色图为 map if i == 500
imwrite(I,map,'test.gif','gif', 'Loopcount',inf,'DelayTime',0.2);% 这里的0.2指的是,每幅图切换时候的时间间隔
else
imwrite(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都改成i
y2=rand([1,i]); count=0;
for j=1:i
if (x2(j)^2+y2(j)^2)<=1
count=count+1;
end
end
plot(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,关联颜色图为 map if i == 500
imwrite(I,map,'test.gif','gif', 'Loopcount',inf,'DelayTime',0.2);
else
imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.2);
% append表示是图像时不断追加进去的
% test.gif这个文件会被放到默认的当前目录下
end
end

生成效果:

尾声

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

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

  1. MATLAB中冒号的用法解析

    MATLAB中冒号的用法解析 1.: 表示所有的意思. (1)如:a(1,:) 表示a的第1行,示例: 结果: 同样的如果a(2,:)表示a的第2行 (2)反过来,a(:,2) 表示a的第3列,示例: ...

  2. JavaScript 解析 Django Python 生成的 datetime 数据 时区问题解决

    JavaScript 解析 Django/Python 生成的 datetime 数据 当Web后台使用Django时,后台生成的时间数据类型就是Python类型的. 项目需要将几个时间存储到数据库中 ...

  3. 超详细的Guava RateLimiter限流原理解析

    超详细的Guava RateLimiter限流原理解析  mp.weixin.qq.com 点击上方“方志朋”,选择“置顶或者星标” 你的关注意义重大! 限流是保护高并发系统的三把利器之一,另外两个是 ...

  4. 【公众号系列】超详细SAP HANA JOB全解析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]超详细SAP HANA JOB全解 ...

  5. centos7安装zabbix3.0超详细步骤解析

    centos7安装zabbix3.0超详细步骤解析 很详细,感谢作者 以下是我操作的history 622 java -version 623 javac -version 624 grep SELI ...

  6. MP3文件结构解析(超详细)

    转自:http://blog.csdn.net/u010650845/article/details/53520426 MP3文件结构解析(超详细) 1. MP3文件结构解析 1.1. 概述 1.1. ...

  7. Atitit.注解and属性解析(2)---------语法分析 生成AST attilax总结 java .net

    Atitit.注解and属性解析(2)---------语法分析 生成AST  attilax总结  java .net 1. 应用场景:::因为要使用ui化的注解 1 2. 使用解释器方式来实现生成 ...

  8. Java上传下载excel、解析Excel、生成Excel

    在软件开发过程中难免需要批量上传与下载,生成报表保存也是常有之事,最近集团门户开发用到了Excel模版下载,Excel生成,圆满完成,对这一知识点进行整理,资源共享,有不足之处还望批评指正,文章结尾提 ...

  9. (转)超详细单机版搭建hadoop环境图文解析

                        超详细单机版搭建hadoop环境图文解析   安装过程: 一.安装Linux操作系统 二.在Ubuntu下创建hadoop用户组和用户 三.在Ubuntu下安装 ...

  10. 中间件解析FDMEMTABLE.delta生成SQL的方法

    遍历Delta.DataView.Rows,Delta.DataView.Rows是记录的行集,由行组成 TFDDatSRow,即是一行记录的对象 TFDDatSRow的方法:  GetData(), ...

随机推荐

  1. 如何把thinkphp5的项目迁移到阿里云函数计算来应对流量洪峰?

    原文链接:https://developer.aliyun.com/article/982746 1. 为什么要迁移到阿里云函数? 我的项目是一个节日礼品领取项目,过节的时候会有短时间的流量洪峰.平时 ...

  2. iview 将Modal抽取成组件并控制Modal的显示隐藏

    开发中遇到Modal弹出框的内容太多,就想把Modal单独分装成一个组件,但是发现封装成组件后Modal的关闭和打开有问题.如下方法可以解决这个问题. 父级页面: <PriceInfodModa ...

  3. 机器学习-线性分类-softmax回归 做多分类-10

    1. softmax回归 伯努利分布(0-1分布 二分类),我们采用Logistic回归(用sigmoid函数映射到 0-1之间 输出预测概率)建模. 那么我们应该如何处理多分类问题?(比如要进行邮件 ...

  4. FinalShell上传文件失败

    1.问题 上传文件失败,如图所示,即使切换至root用户 2.解决方式 这里在建立SSH连接时,就必须使用root用户,而若使用普通用户,即使在其中切换至root用户,也无法上传. 所以重新建立一个r ...

  5. http-自签证书

    1. 背景 证书需要向云服务提供商购买,是需要付费,但用在应用开发场景是不合适的,需要开发者自己自签证书进行测试 2. 工具包 Cygwin a large collection of GNU and ...

  6. [转帖]龙叔学ES:Elasticsearch XPACK安全认证

    https://juejin.cn/post/7081994919237287950 本文已参与「新人创作礼」活动,一起开启掘金创作之路. Elasticsearch往往存有公司大量的数据,如果安全不 ...

  7. [转帖]/dev/null 2>&1详解

    https://www.diewufeiyang.com/post/1045.html shell中可能经常能看到:>/dev/null 2>&1 命令的结果可以通过%>的形 ...

  8. [转帖]hex,base64,urlencode编码方案对比

    https://www.jianshu.com/p/4d701c09d44e 原创:打码日记,欢迎分享,转载请保留出处. 简介 在工作过程中,我们慢慢会了解到hex.base64.urlencode这 ...

  9. [转帖]rsar - Extract data from plain-text sar files

    sar -A -t -f /tmp/sa11 >/tmp/sar11 https://github.com/ryran/rsar When dealing with sysstat sar da ...

  10. [转帖]45个处理字符串的Python方法

    https://baijiahao.baidu.com/s?id=1738413163267646541&wfr=spider&for=pc   一.题目解析 先来看一个题目: 判断用 ...