数学建模--蒙特卡罗法MATLAB代码保姆式解析

2024-04-19 03:12

本文主要是介绍数学建模--蒙特卡罗法MATLAB代码保姆式解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.简单介绍

2.思想的实际运用

我们利用蒙特卡罗法的思想求解圆周率π的值,这里求得的肯定是近似值,我们是通过大量的模拟实验,利用概率求解的,但是这个值和我们的精确值之间还是有一定的误差的;

我们的思想就是在半径为1的圆的外面做一个外切正方形,这个外切正方形的边长就是2,那么我们想要求的圆的面积π乘上半径的平方实际上就是乘以1的平方,也就是说圆的面积就是π,我们在这个正方形上面撒豆子,这个豆子可能会落在圆形里面,我们根据落在圆形里面的豆子数量占全部正方形里面的豆子的数量的比例,来计算这个圆形的面积,也就是我们的π,假设我们撒了10000颗豆子,有8000颗落在圆形里面,我们直接拿4*80%就是圆形的面积,也就是我们的π的近似值,这样的求解方法实际上就是蒙特卡罗法。前提是我们的实验的次数足够多,也就是说我们的豆子的数量应该足够多,这样进行实验得到的结论才具有普遍性,更有说服力。

3.MATLAB代码逐句分析

这个就是求解圆周率π需要用到的代码,我们分析一下:


(1)clc;clear是清除工作区的命令,这个命令我们已经很常见了,我们建议写上这句命令,这样就可以避免不必要的报错,因为在工作区里面可能我们前面定义的某一个变量和我们这个代码的变量会冲突,我们尽量使用这句话清除工作区的数据;


(2)p就是我们的实验进行的次数,通俗的讲就是我们的要撒的豆子的总量10000,这个数据比较大,结论具有普遍性;


(3)我们接下来使用for循环进行计数,这个里面的rand是一个函数,这个函数的作用就是生成随机数,随机数就可以具有普遍性,减少我们人为因素的影响,在其他的编程语言里面也会用到这个随机数的生成函数,例如我们熟知的扫雷游戏,这个游戏需要随机的布置地雷,这个时候就要设置地雷的坐标,这个地方也用到了rand函数,我们的MATLAB里面的rand函数默认的生成随机数字的范围是0~1,前面我们已经提及过,这个正方形的边长是2,我们让圆心的坐标是(1,1),所以我们让rand*2,这样的话生成的随机数的范围就是0~2之间(横坐标和纵坐标都在0~2之间),正好是落在我们的正方形区域里面;


(4)n表示这个时候落在圆形里面的豆子的数量,因为我们在进行参数的设置,这个时候还没有开始进行,相当于我们定义了一个变量n用来存储落在圆形里面的豆子数量,将来进行循环的时候,符合条件的在0的基础上面进行累加就可以了,这个n就相当于是一个计数器的角色;


(5)这个if语句是计算正方形里面的点到圆心的距离,如果距离小于半径的平方,说明这个循环产生的随机数在圆形里面,我们就是用n累加这个数;plot就是绘图指令,符合条件的和不符合条件的我们需要使用不同的标志进行绘图以方便区分;


(6)这个里面我们一共是进行了10000次循环,每次循环都会产生随机数,每次都会使用if语句进行判断,符合条件的话(豆子落在圆形区域里面),就让n加上1,然后绘制圆形里面的图,否则的话就绘制图圆形和正方形之间的图;plot里面的高亮部分就是一些plot函数的固定参数,我们了解即可,参数的最后一项就是图形颜色的设置,像我们这个里面用到的r表示的是红色,b表示的是蓝色;


(7)axis equal就是让我们的绘制出来的图形的横纵坐标轴的标度是一样的,这样的图像就会更加的美观,我在下面分别放了加上这句代码和不加这句代码的效果图,显然加上这个代码会更好;


(8)n/q就是我们的对应的概率,我们使用这个概率乘上正方形的面积4就是对应的圆形的面积,也就是我们想要计算的圆周率π,这个方法的本质就是概率;最后我们把s的值赋值给pi0,这样pio里面就是我们计算出来的圆周率的近似值;


(9)里面还有一行代码我们没有提到,就是这句hold on,这个代码到底是什么作用,我相信很多初学者都不是很清楚(我也是今天才知道);现在请你记住,这个代码的作用就是让我们每次循环的图像都在一个图像里面进行绘制,换言之,如果没这句代码,我们要进行10000次循环,每次循环都会产生新的窗口,这样的话我们无法进行观察,加上这句代码我们就可以让每次循环绘制的点在一个图里面,方便我们进行观察。


加上axis equal效果:


不加axis equal的效果:

这篇关于数学建模--蒙特卡罗法MATLAB代码保姆式解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/916501

相关文章

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

CSS place-items: center解析与用法详解

《CSSplace-items:center解析与用法详解》place-items:center;是一个强大的CSS简写属性,用于同时控制网格(Grid)和弹性盒(Flexbox)... place-items: center; 是一个强大的 css 简写属性,用于同时控制 网格(Grid) 和 弹性盒(F

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma