MATLAB-蒙特卡罗方法
什么叫蒙特卡罗方法?
蒙特卡罗方法又称统计模拟法、随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名。
基本思想
当所求问题的解是某个事件的概率,或者是某个随机变量的数学期望,或者是与概率,数学期望有关的量时,通过某种试验的方法,得出该事件发生的概率,或者该随机变量若干个具体观察值的算术平均值,通过它得到问题的解。
当随机变量的取值仅为1或0时,它的数学期望就是某个事件的概率。或者说,某种事件的概率也是随机变量(仅取值为1或0)的数学期望。
蒙特卡罗方法的特点
优点:
1、能够比较逼真地描述具有随机性质的事物的特点及物理实验过程
2、受几何条件限制小
3、收敛速度与问题的维数无关
4、具有同时计算多个方案与多个未知量的能力
5、误差容易确定
6、程序结构简单,易于实现
缺点:
1收敛速度慢
2误差具有概率性
3在粒子输运问题中,计算结果与系统大小有关
所以在使用蒙特卡罗方法时,要“扬长避短”,只对问题中难以用解析(或数值)方法处理的部分,使用蒙特卡罗方法计算,对那些能用解析(或数值)方法处理的部分,应当尽量使用解析方法
什么是随机数?
在连续型随机变量的分布中,最简单而且最基本的分布是单位均匀分布。由该分布抽取的简单子样称为随机数序列,其中每一个体称为随机数
符号:
两个特点:独立性,均匀性
产生随机数
随机数表方法
随机数表是由0,1,2,3,4,5,6,7,8,9十个数字组成,每个数字以0.1的等概率出现,数字之间相互独立,这些数字序列叫作随机数字序列。 (如果要得到n位有效数字的随机数,只需将表中每n个相邻的随机数字合并在一起,且在最高位的前边加上小数点即可。例如,某随机数表的第一行数字为7 6 3 4 2 5 8 9 1...,要想得到三位有效数字的随机数一次为0.763,0.425,0.891...)
物理方法
利用某些物理现象,在计算机上增加些特殊设备,可以在计算机上直接产生随机数。 作为随机数发生器的物理源主要有两种:一种是根据放射性物质的放射性,另一种是利用计算机的固有噪声。
一般情况下,任意一个随机数在计算机内总是用二进制的数表示的:或者为0,或者为1。因此,利用物理方法在计算机产生随机数,就是要产生只取0或1的随机数字序列,数字之间相互独立,每个数字取0或1的概率均为0.5
缺点
随机数表需在计算机中占有很大内存,而且也难以满足蒙特卡罗方法对随机数需要量非常大的要求,因此,该方法不适于在计算机上使用。
物理方法产生的随机数序列无法重复实现,不能进行程序复算。给验证结果带来很大困难。而且增加随机数发生器和电路联接等 附加设备,费用昂贵。因此该方法也不适合在计算机上使用。
伪随机数
用递推公式
产生随机数序列。
伪随机数存在的两个问题
递推公式和初始值确定后,整个随机数序列便被唯一确定。不满足随机数相互独立的要求。 由于随机数序列是由递推公式确定的,而在计算机上所能表示的[0,1]上的数又是有限的,因此,这种方法产生的随机数序列就不可能不出现重复。随机数序列出现周期性的循环现象。
解决方案
第一个问题:不能从本质上加以改变,但只要递推公式选的比较好,随机数间的相互独立性是可以近似满足的。
第二个问题:因为用蒙特卡罗方法解任何具体问题时,所使用的随机数的个数总是有限的,只要所用随机数的个数不超过伪随机数序列出现循环现象时的长度就可以了。
应用:蒙特卡罗方法计算积分
可以通俗地说,蒙特卡罗方法是用随机试验的方法计算积分,即将所要计算的积分看作服从某种分布密度函数f(r)的随机变量g(r)的数学期望
通过某种试验,得到N观察值r1,r2,…,rN(用概率语言来说,从分布密度函数f(r)中抽取N个子样r1,r2,…,rN,),将相应的N个随机变量的值g(r1),g(r2),…,g(rN)的算术平均值
作为积分的估计值(近似值)。
蒙特卡罗方法步骤如下:
1、在区间【a,b】上利用计算机均匀产生n个随机数x1,x2·····xn,这个可以在MATLAB软件中用unifrnd命令实现。
2、计算每一个随机数相应的被积函数值f(x1),f(x2)····f(xn)。
3、计算被积函数值的平均值
4、所以2.1式的值≈
简单定积分例子:用蒙特卡罗方法求
首先我们进行严格的数学计算, 便于后面与蒙特卡洛计算方法所得结果形成对比:已知 e^x的原函数是e^x,那么定积分值就是:
我们可以在Matlab中输入以下代码进行精确计算:exp(2)-exp(0),这个值是此定积分的真实值. 下面进行蒙特卡洛计算上述定积分,其MATLAB代码如下:
- N=500;
- x=unifrnd(0,2,N,1);
- y=(2-0)*mean(exp(x))
上述三条语句完整实现了蒙特卡洛计算上述定积分步骤.第一条语句是设定了停止条件, 共做N次Monte Carlo 模拟.第二条语句实现了在积分区间上均匀产生N个随机数.第三条语句实现蒙特卡洛计算方法的面积逼近.对N设置不同的值,观察所得蒙特卡洛计算方法定积分值,如表1所示,我们可以发现:当不断增大N值时,所得结果越来越接近真实值.
蒙特卡罗计算方法性质:
蒙特卡洛计算方法依据概率统计理论,具有统计特性,主要表现在以下三个方面.
1.蒙特卡洛计算方法具有随机性、不确定性.即每次运行结果都会不一样,因为计算机产生随机数并不是可以重现的.
2.蒙特卡洛计算方法具有统计稳定性。虽然每次运行产生随机数是不一样的,但是随机数的概率分布是一样的,所以蒙特卡洛计算方法可以满足概率统计的稳定性.
3.随着随机数数量增加,蒙特卡洛计算方法所得结果会更加逼近真实值,这就是我们所讲的依概率收敛到真实值意义.
- %% 蒙特卡罗方法求定积分
- %给定曲线y =2 – x2 和曲线y3 = x2,曲线的交点为:P1( – 1,1 )、P2( 1,1 )。
- %曲线围成平面有限区域,用蒙特卡罗方法计算区域面积。
- %随机产生100000个点
- P=rand(100000,2);
- %定义x y 的范围
- x=2*P(:,1)-1;
- y=2*P(:,2);
- %找出在函数范围的数
- % k = find(X) 返回一个包含数组 X 中每个非零元素的线性索引的向量。
- % 如果 X 为向量,则 find 返回方向与 X 相同的向量。
- % 如果 X 为多维数组,则 find 返回由结果的线性索引组成的列向量。
- % 如果 X 包含非零元素或为空,则 find 返回一个空数组。
- II=find(y<=2-x.^2&y.^3>=x.^2);
- %计算索引的长度
- M=length(II);
- %计算面积
- S=4*M/100000
- plot(x(II),y(II),'g.')
http://www.taodudu.cc/news/show-2528448.html
相关文章:
- 蒙特卡罗(Monte Carlo)方法简介
- 一文详解蒙特卡洛(Monte Carlo)法及其应用
- 18006
- DES加密解密Delphi、C#互通
- java的一种加解密方法
- 数美滑块js逆向
- C++ Learning (Next)
- 快速入门Unity机器学习:三:
- 【2022年二级Python】②基本数据类型
- c++函数重载原理
- 【CPU设计实战】简单流水线CPU设计
- python保存模型方法_TensorFlow模型保存和提取的方法
- C++PrimerPlus 第七章 函数-C++的编程模块-7.3 函数和数组
- 一则汽车CAN总线的安全渗透题目分析
- 嵌入式Linux:V3s移植NES游戏,声音,游戏手柄
- 关于javaFx 操作串口 报错的问题~
- JavaScript与C#互通的DES加解密算法
- markdown数学公式编辑指令大全
- ROS实验笔记之——基于ArUco Marker来估算camera的位姿
- linux 从设备 spi,在Linux 4.9设备树中添加SPI slave设备rapbery pi
- 【win11】你不能不会的技巧(持续更新)
- [转] 大学的终结—1950年代初期的“院系调整”
- 别让孩子遭受“爱的伤害”
- 11月15~30非技术积累
- 教育绝境
- 易中天:望子成人,而非望子成龙
- 也说上海女孩的嗲----
- [No000030]程序员节发点别的:中国教育整个把人脑子搞坏了-易中天
- 清华梦的粉碎—写给清华大学的退学申请(by王垠)
- 清华梦的粉碎—写给清华大学的退学申请(转自王垠Blog)
MATLAB-蒙特卡罗方法相关推荐
- matlab蒙特卡罗方法求体积_实验二-蒙特卡罗方法计算三维体积
班级: 学号: 姓名: 实验时间: 2014 年 月 日 实验 项目 实验二 蒙特卡罗方法计算三维体积 所属 课程 数学实验 实 验 目 的 了解蒙特卡罗方法的原理,掌握随机数使用技术. 实 验 内 ...
- matlab蒙特卡罗方法求体积_蒙特卡罗方法详细讲解与MATLAB实现.ppt
下面给出几个常用的α与的数值: ? 关于蒙特卡罗方法的误差需说明两点:第一,蒙特卡罗方法的误差为概率误差,这与其他数值计算方法是有区别的.第二,误差中的均方差σ是未知的,必须使用其估计值 来代替,在计 ...
- matlab蒙特卡罗方法求体积_matlab的蒙特卡洛算法
问题补充: 能提供一个例子看看吗?我就不懂MATLAB,想知道具体代码.因为现在写论文急,也没时间仔细看书了 蒙特卡罗模拟 就是随机数相关的东西,你只要知道随机数是怎么得到.其它的事就要好办了. ra ...
- Matlab实现蒙特卡罗方法(随机模拟法)
Matlab实现蒙特卡罗方法(随机模拟法) 简介:蒙特卡罗方法是一种以概率统计理论为指导的一类非常重要的数值计算方法.通常使用蒙特卡罗方法来求面积.体积问题或者求解积分. 求曲线 y=2−x2y=2- ...
- Matlab仿真-蒙特卡罗方法求半径为1圆的面积
试用蒙特卡罗方法求出半径为1的圆的面积,并与理论值对比. (1)数学模型. 设有两个相互独立的随机变量x,y,服从[0 2]上的均匀分布.那么,由它们所确定的坐标点(x,y)均匀分布于 ...
- matlab 蒙特卡洛树搜索算法_蒙特卡罗方法入门、蒙特卡洛树简介(转载)
本文通过五个例子,介绍蒙特卡罗方法(Monte Carlo Method). 一.概述 蒙特卡罗方法是一种计算方法.原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值. 它非常强大和灵活,又 ...
- 蒙特卡罗亚式期权定价matlab,[转载]亚式期权定价-——蒙特卡罗方法介绍(二)...
亚式期权是典型的路径依赖性期权,期权的支付有两种:固定亚式期权与浮动亚式期权,指的是到期时支付分别为: (1) max(股价路径的某种平均-K,0) ,K为某一固定敲定价格 (2)max(股价路径的某 ...
- matlab生成随机粗糙表面_基于蒙特卡罗方法的随机粗糙表面仿真
龙源期刊网 http://www.qikan.com.cn 基于蒙特卡罗方法的随机粗糙表面仿真 作者:于小宁 来源:<价值工程> 2017 年第 08 期 摘要: 利用随机粗糙面的相关函数 ...
- [转]阮一峰:蒙特卡罗方法入门
ametor 阮一峰:蒙特卡罗方法入门 发表于2016/4/24 10:26:54 84人阅读 分类: 算法 作者: 阮一峰 日期: 2015年7月27日 本文通过五个例子,介绍蒙特卡罗方法(Mon ...
- Matlab蒙特卡罗模拟
Matlab蒙特卡罗模拟: 可以用蒙特卡罗方法来近似模拟求pi值: 思路: 设相互独立的随机变量X,Y均服从[-1,1]上的均匀分布,则(X,Y)服从{-1≤x≤1, 1≤y≤1}上的二元均匀分布(即 ...
最新文章
- javascript之prototype总结常用方法
- mysql查询结果单位换算后小数位数的保留方式
- android math类,GitHub - Zihin/MathModeling-Android
- it 部门的建议_应对IT项目阻力的8个建议
- asp.net + ajax + sqlserver 自动补全功能,asp.net+ajax+sqlserver自动补全功能实现解析
- 关于Qt5.10调试时出现“qtcreatorcdbext.dll cannot be found.”的解决方案
- Reading HTML content from a UIWebView
- C# 利用SQLite对.DB和.logdb加密和解密和SQLite创建数据库
- 论文降重神器,一键毕业,真香!错过就后悔一整年的论文降重指南
- ms vc9 php,php连接sql server数据库库
- oracle modeler 使用,Navicat Data Modeler使用教程八:图表版面下
- 黑色星期五:纳斯达克五大科技股市值单日蒸发约1000亿美元
- 最流行十大在线客服系统排行榜-市场常见客服系统软件排行-2023最新
- 普通话转换成方言的语音识别方法
- 前端微信签名验证工具_微信JS接口签名的生成
- C# selenium设置具有账号密码的代理IP
- RSA的非对称加密,公钥加密私钥解密,本地测试
- 零伽壹链改案例:区块链赋能供应链应用 新电商逆袭成长
- 如何获得海量的RoboCode代码
- Flutter返回页面时刷新页面