精华内容
下载资源
问答
  • Matlab蒙特卡罗模拟

    千次阅读 2020-06-04 21:25:19
    Matlab蒙特卡罗模拟: 可以用蒙特卡罗方法来近似模拟求pi值: 思路: 设相互独立的随机变量X,Y均服从[-1,1]上的均匀分布,则(X,Y)服从{-1≤x≤1, 1≤y≤1}上的二元均匀分布(即图1中正方形区域上的二元均匀分布),记...

    Matlab蒙特卡罗模拟:
    可以用蒙特卡罗方法来近似模拟求pi值:
    思路:
    设相互独立的随机变量X,Y均服从[-1,1]上的均匀分布,则(X,Y)服从{-1≤x≤1, 1≤y≤1}上的二元均匀分布(即图1中正方形区域上的二元均匀分布),记事件A = {x2+y2≤1},则A事件发生的概率等于单位圆面积除以边长为2的正方形的面积,即P(A) = pi/4,从而可得圆周率pi = 4P(A). 而P(A)可以通过蒙特卡洛模拟法求得,在图1中正方形内随机投点(即横坐标X和纵坐标Y都是[-1,1]上均匀分布的随机数),落在单位圆内的点的个数m与点的总数n的比值m/n可以作为A事件的概率P(A)的近似,随着投点总数的增加,m/n会越来越接近于P(A),从而可以得到逐渐接近于pi的模拟值。
    function piva=PiMonterCarlo(n)
    x=0;y=0;d=0;
    m=length(n);
    pivalue=zeros(m,1);
    for i=1:m
    x=2rand(n(i),1)-1;
    y=2
    rand(n(i),1)-1;
    d=x.2+y.2;
    pivalue(i)=4sum(d<=1)/n(i);
    end
    if nargout==0
    if m>1
    figure;
    plot(n,pivalue,‘k.’);
    h=refline(0,pi);
    set(h,‘linewidth’,2,‘color’,‘r’);
    text(1.05
    n(end),pi,’\pi’,‘FontSize’,15);
    xlabel(‘投点个数’);
    ylabel(’\pi的模拟值’);
    else
    figure;
    plot(x,y,‘r.’);
    hold on;
    h=rectangle(‘Position’,[-1 -1 2 2],‘LineWidth’,2);
    t=linspace(0,2*pi,100);
    plot(cos(t),sin(t),‘k’,‘LineWidth’,2);
    xlabel(‘X’);ylabel(‘Y’);
    title(‘Pi的模拟值:’,num2str(pivalue));
    axis([-1.1 1.1 -1.1 1.1]);axis equal;
    end
    else
    piva=pivalue;
    end

    在这里插入图片描述
    还可以模拟K值

    times = 300;  % 蒙特卡洛的次数
    R = zeros(times,1);  % 用来储存扰动项u和x1的相关系数
    K = zeros(times,1);  % 用来储存遗漏了x2之后,只用y对x1回归得到的回归系数
    for i = 1: times
        n = 30;  % 样本数据量为n
        x1 = -10+rand(n,1)*20;   % x1在-10和10上均匀分布,大小为30*1
        u1 = normrnd(0,5,n,1) - rand(n,1);  % 随机生成一组随机数
        x2 = 0.3*x1 + u1;   % x2与x1的相关性不确定, 因为我们设定了x2要加上u1这个随机数
        u = normrnd(0,1,n,1);  % 扰动项u服从标准正态分布
        y = 0.5 + 2 * x1 + 5 * x2 + u ;  % 构造y
        k = (n*sum(x1.*y)-sum(x1)*sum(y))/(n*sum(x1.*x1)-sum(x1)*sum(x1)); % y = k*x1+b 回归估计出来的k
        K(i) = k;
        u = x2 + u;  % 因为我们忽略了x2,所以扰动项要加上x2
        r = corrcoef(x1,u);  % 2*2的相关系数矩阵
        R(i) = r(2,1);
    end
    plot(R,K,'*')
    xlabel("x_1和u'的相关系数")
    ylabel("k的估计值")
    

    结果:
    在这里插入图片描述

    展开全文
  • 这是用于计算函数 f_x = x^2 的三重积分的 MATLAB 代码,使用 trapz、积分函数和蒙特卡罗模拟结果从零到十的限制验证所有三个都生成相同且正确的结果。
  • 这是为了展示使用 Simulink 实现蒙特卡罗模拟的可能性。 需要统计工具箱来生成随机变化。 请留下评论建议的更新和功能。 有关在 Simulink 中使用 Monte Carlo 方法的更多信息,请参阅: ...
  • 在 windowsXP+Matlab7.0 上测试没问题。 执行速度比 MCML 快约 30% 到 40%。 版本 1.2 问题修复: 1. nr 或 nd 或 na 等于 1 时的计算错误2.博士启动不正确 版本 1.3 问题修复: 1. 某些 Matlab 版本(MATLAB 7.0 ...
  • 蒙特卡罗模拟matlab源程序,简易源程序用于描述蒙特卡罗法基本原理。
  • 此实用功能提供了一种工具,可在蒙特卡罗模拟框架内快速包含随机过程。 主要的输入参数是一个包含 Matlab 语法命令的字符串。 此类字符串的每次执行都是随机过程的一个实例。 函数表达式MCS 通过运行 N 次迭代的...
  • 然后,基于蒙特卡罗模拟算法建立了随机过程模型,以计算股票的平均收益率与风险。通过计算得到股票位于99%置信水平下的VAR,从而对其投资风险进行评价。通过对股票编号为000001.SZ、300231.SZ、002332.SZ、2012年01...
  • 使用此代码模拟基本的 3D 微观结构演变。 这是一个相当古老的代码。 此版本使用环绕边界条件,与新代码相比,计算速度稍慢。 但是,我正在对较新的版本进行一些更改。 所以,当心新版本.. :)
  • 在该项目中,模拟了电动汽车 (EV) 的充电行为对电网负载的影响。 从电力供应商和终端用户的... 此外,考虑到普通电池和充电桩的特性、用户行为和电动汽车规模,设计蒙特卡罗模拟过程来模拟大型电动汽车的长期行驶行为。
  • 由王立红博士的MCML 修改而来。 在 windowsXP+Matlab7.0 上测试没问题。 执行速度比 MCML 快约 30% 到 40%。 测试版 1.01。 qiang.2@osu.edu
  • 笔记: 1、如果Matlab安装在../Program Files/Matlab,该目录可能会阻塞一些matlab内置函数。 这可能是由于“程序”和“文件”之间的空格所致。 解决这个问题的方法是重新安装 Matlab 在 C:/Matlab 中2. 包含测试...
  • 基于蒙特卡罗法的二维随机裂隙Matlab程序,需要输入参数。
  • 使用此代码模拟基本的微观结构演变。 这是一个相当古老的代码。 将很快在 2D 和 3D 中发布更新的代码。 此版本使用环绕边界条件,与新代码相比,计算速度稍慢。 但是,我正在对较新的版本进行一些更改。 所以,...
  • 蒙特卡罗模拟matlab

    热门讨论 2012-08-20 18:39:52
    蒙特卡洛(Monte Carlo)模拟是一种通过设定随机过程,反复生成时间序列,计算参数估计量和统计量,进而研究其分布特征的方法。具体的,当系统中各个单元的可靠性特征量已知,但系统的可靠性过于复杂,难以建立可靠性...
  • 该脚本执行先前在 Sap2000 中定义的结构模型的蒙特卡罗模拟。 该脚本需要作为输入: - Sap2000 .sdb 模型; - 一组 N 个不确定参数值,根据用户定义的概率密度函数进行采样。 该脚本为每个参数样本计算结构系统的...
  • 在工程风险分析中应用Matlab进行蒙特卡罗模拟.pdf
  • MATLAB-蒙特卡罗方法

    万次阅读 多人点赞 2019-08-16 20:14:48
    蒙特卡罗方法又称统计模拟法、随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,用...

    什么叫蒙特卡罗方法?

           蒙特卡罗方法又称统计模拟法、随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名。

    基本思想

           当所求问题的解是某个事件的概率,或者是某个随机变量的数学期望,或者是与概率,数学期望有关的量时,通过某种试验的方法,得出该事件发生的概率,或者该随机变量若干个具体观察值的算术平均值,通过它得到问题的解。

           当随机变量的取值仅为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.')
    
    

     

    展开全文
  • matlab代码,通过蒙特卡罗方法计算n维球的体积,此仿真程序计算复杂度较高,并有与公式方法结果之间的对比;
  • 提出了一种基于粒子激光散射的多传感器阵列的烟雾识别系统,描述了用蒙特卡罗模拟烟雾粒子散射特性的一般方法,模拟并验证了在不同粒径、折射率和入射角情况下烟雾粒子散射光强的角分布情况,模拟结果和理论分析吻合得...
  • 内有详细的蒙特卡洛模拟光子在组织中的运动内有详细的蒙特卡洛模拟光子在组织中的运动
  • 资源包括了蒙特卡罗算法matlab代码及算法详细说明,蒙特卡罗( Monte Carlo) 方法又名随机模拟法或统计试验法。它是在第二次世界大战期间兴起和发展起来的。它的奠基人是冯●诺伊曼( 1.Von Neuman)。其主要思想是 在...
  • 蒙特卡洛模拟方法的matlab实现

    万次阅读 多人点赞 2019-08-15 14:18:16
    蒙特卡洛模拟方法的matlab实现 这篇文章本来发在另一个号上的。。但是由于历史遗留的原因(id。微信号)把那个号注销了,结果忘记删除原文章,好像申请删除还挺麻烦的,所以不删了直接在这重新发一遍 蒙特卡洛模拟这...

    蒙特卡洛模拟方法的matlab实现


    这篇文章本来发在另一个号上的。。但是由于历史遗留的原因(id。微信号)把那个号注销了,结果忘记删除 原文章,好像申请删除还挺麻烦的,所以不删了直接在这重新发一遍

    例题蒙特卡洛模拟这个名字听起来很厉害,简单来说其实就是进行多次随机抽样,结合题目和代码很容易理解
    这个问题就是股东的对策进行多次抽样后排序得出势力值
    话不多说,show code!

    clear,clc;
    count=100000;
    a=[20 15 10 5 5 3 3 3 3 1 1 1];%十个数,可以是其他不同的十个
    r=zeros(size(a));%每个位置出现的次数,初始化全部为零
    for i=1:count
        b=randperm(length(a));%b就是a中10个数的随机顺序排列
        for j=1:12
            if sum(a(b(1:j)))>=50
                break;
            end
        end
        r(b(j))=r(b(j))+1;%对应位置记录加1个
    end
    r=r/count;
    

    下面是运行结果
    结果

    展开全文
  • 用蒙特卡洛模拟实现美式期权定价,包括资产路径生成和美式期权欧式期权定价的源代码,附带参考文献。
  • 简易源程序用于描述蒙特卡罗法基本原理
  • 本文章中包括我编写 matlab 最小二乘蒙特卡罗(LMS)美式期权定价 程序,以及相关资料,欢迎下载学习,如有错误指不吝赐教
  • 卡尔曼滤波的一个小范例,采用蒙特卡洛仿真实现轨迹平滑,对于初学卡尔曼滤波信息融合技术的同学有很大帮助
  • 此应用程序以交互方式模拟在 1) 发牌、2) 翻牌和 3) 转牌后,桌上每位玩家在给定各自的底牌的情况下赢得一手德州扑克的概率。 最后,在河牌之后,这个程序显示了这手牌的实际结果。 蒙特卡洛模拟用于近似(每轮之后...
  • 基于 Matlab 环境下蒙特卡罗法的实现 针对应用蒙特卡罗对连续型分布采取直接抽样法解决结构可靠度所遇到的困难提 出利用MATLAB 其强大数值计算功能来解决此类问题利用 MATLAB 进行蒙特卡罗抽样模 拟在一定程度上减少...
  • 模拟MC(): • 支持MATLAB 统计和机器学习工具箱中的大多数/所有分布类型,包括截断分布。 • 可以通过具有相关参数迭代优化的高斯 copula 方法从任何分布组合中生成相关样本• 支持从数据中引导样本• 支持对数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,029
精华内容 411
关键字:

matlab蒙特卡罗模拟

matlab 订阅