精华内容
下载资源
问答
  • 1 目录* MATLAB随机数的产生- Uniform,Normal & Custom distributions* 蒙特卡洛仿真* 产生股票价格路径* 期权定价- 经典公式- 和蒙特卡洛方法比较- 方差减小技巧- Exotic Options* 多变量仿真- Basket ...

    1  目录

    *  MATLAB随机数的产生

    - Uniform,Normal & Custom distributions

    *  蒙特卡洛仿真

    *  产生股票价格路径

    *  期权定价

    - 经典公式

    - 和蒙特卡洛方法比较

    - 方差减小技巧

    - Exotic Options

    *  多变量仿真

    - Basket Option

    - Portfolio Value at Risk

    2  重点内容讲解

    2.1  蒙特卡洛仿真

    - 依赖随机数生成

    - rand,randn,randi

    注:rand:产生平均分布随机数

    randn:产生正太分布随机数

    randi:产生随机整数随机数

    -支持的随机分布

    - 随机分布拟合

    2.2  在统计工具箱里面有更多的随机数生成函数

    90405122af97725e3b5ccda4a5f7448c.png

    2.3 基于MATLAB常用随机数的举例

    举例:生成随机数

    %% Uniform distribution

    %

    % Numbers uniformly distributed along [0 1]

    % 产生100个随机分布的随机数在[0 1]这个闭区间内

    % rand的参数为n*n的矩阵

    rU = rand(1,10);

    hist(rU,10);

    图示:

    5a84c7890195ce801d6fe3c9a2246af0.png

    举例:生成正太分布随机数

    %% Normal distribution

    %

    % Numbers normally distribution with mean0,std1

    % 基于均值为0,标准差为1的正态分布随机数。

    % randn的参数为n*n的矩阵

    rN = randn(1,1000);

    hist(rN,1000);

    图示:

    db781ce162ae468fe548eacd7ca96e40.png

    举例:设计随机种子的方式生成随机数

    %% Setting the behaviour of the random numbers

    %

    % There are many implementations of pseudo-random number generator in

    % MATLAB,we will be working with

    %

    % mt19937ar - Mersenne Twister,which has an approximate period of

    % 2^19937-1

    % We can set the behaviour in a number of ways

    % Seed the generator

    % 以设定种子的方式设置随机数

    rng(0)

    [randn(1),randn(1),randn(1),randn(1)]

    rng(0);

    [randn(1),randn(1),randn(1),randn(1)]

    % 由于设定的种子都是一样的,因此生成的两组随机数也是一样的

    % ans =

    % 0.5377 1.8339 -2.2588 0.8622

    % ans =

    % 0.5377 1.8339 -2.2588 0.8622

    举例:其他产生随机数的方法

    %% Generating random numbers from different distributions

    %

    % Lets see a list of the supported distributions

    docsearch Continuous Distributions

    % 用random产生随机数,按照随机规则产生,具体规则在doc,查看flag内容

    %% Now,lets choose a number of draws from one of these,say the exponential

    % 产生指数的随机数,[]为矩阵形状,3为参数,exp为flag

    rB = random('exp',3,[1 10000]);

    hist(rB,100);

    图示:

    2b55c1b6af500952319dd6e84a075dd4.png

    2.3  对数据进行拟合fitdist

    2.4  产生股票价格路径

    458a0d88661f1cfd00834892bd2db89d.png

    2.5  公开函数:随机蒙特卡洛价格路径:

    function mat = pricePaths(S,r,T,sigma,nSims,nSteps)

    % S ==>> 起始价格

    % r ==>> 无风险回报率

    % T ==>> 时间宽度

    % sigma ==>> 波动率

    % nSims ==>> 做多少次蒙特卡洛放在

    % nSteps ==>> 在T时间内取多大的步长

    % Generate asset price paths using geometric brownian motion

    % Determine the timestep

    % 根据时间长度和步长,求出每个均匀分布点是多少长

    Dt = T/(nSteps);

    % Generate the random numbers

    % 初步随机数,多少蒙特卡罗仿真*多少步长的矩阵

    mat = randn(nSteps,nSims);

    % Generate the returns scaled using the relevant equation

    % 布朗运动公式

    mat = exp((r-sigma^2/2)*Dt + sigma*sqrt(Dt).*mat);

    % Generate price paths

    mat = cumprod(mat,1); % 按照列的方向累乘,从某一天累计的回报率

    % Scale with the initial asset price

    % 初始价格*实际价格=实际价格回报率后的价格

    mat = [repmat(S,1,nSims); mat.*S];

    end

    应用实例:

    %%

    S = 10; % 股票起始价格

    r = 0.03; % 无风险收益率

    T = 1; % 时间跨度

    sigma = 0.2; % 波动率

    nSims = 10; % 多少条路径(多少次蒙特卡洛实验)

    nSteps = 250*10; % 步长是多少 这里是2500个步长

    paths = pricePaths(S,r,T,sigma,nSims,nSteps);

    %% Plotting

    figure;

    plot(paths);

    图示:我们可以看到以10为起始价格,生成10条蒙特卡洛的随机股票价格路径。生成这些随机的股票价格可以进行一些模型的压力检测。不仅在样本内可以进行检测,而且在可能会产生的不可知价格路径下,模型的鲁棒性效果如何(Robust)。

    f811a1619dc5e44cda6a4f007dfc4c0c.png

    再比如我们可以把初始价格设置为3000个点也会生成如下路径:

    44145526eaa77907b30f420f32502a9e.png

    展开全文
  • MATLAB蒙特卡洛方法求椭圆面积代码 在某个规定的范围内随机打点,找到满足条件的点,并数一下这些点的数量与总的随机点数量的比,就OK了。关键是设置条件。 代码 clear;clc; n=10000; %随机数的个数 a=51/2; %长...

    MATLAB蒙特卡洛方法求椭圆面积


    在某个规定的范围内随机打点,找到满足条件的点,并数一下这些点的数量与总的随机点数量的比,就OK了。关键是设置条件。

    代码

    clear;clc;
    n=10000; %随机数的个数
    
    a=51/2; %长半轴
    b=29/2; %短半轴
    %生成随机数
    x=rand(1,n);
    y=rand(1,n);
    %改变随机数的范围
    x=2*a.*x-a;
    y=2*b.*y-b;
    
    r=(1/(a*a)).*(x.*x)+(1/(b*b)).*(y.*y); %椭圆边界
    m1=find(r<=1);%满足条件(椭圆内)的点
    
    X=x(m1);Y=y(m1);
    mm=length(m1); 
    area=a*b*mm/n;%椭圆面积
    
    %把椭圆点出来
    figure(1);hold on;
    plot(X,Y,'.b');
    xlim([-30 30]);ylim([-15 15]);
    
    ax=gca;
    fs=18;
    ax.XColor = 'red';
    ax.YColor = 'red';
    ax.XAxisLocation='Origin';
    ax.YAxisLocation='Origin';
    ax.FontSize = fs;
    
    %把椭圆边缘画出来
    fplot(@(x)sqrt((1-x.^2./650.25).*210.25),[-25.5 25.5],...
        'Color','red');
    
    fplot(@(x)-sqrt((1-x.^2./650.25).*210.25),[-25.5 25.5],...
        'Color','red');
    

    如果用一条直线把椭圆切割一下。。。

    代码

    %Monte Carlo 方法计算椭圆被一条直线切割后其中一部分的面积
    
    clear;clc;
    n=50000;
    
    a=51/2; %长半轴
    b=29/2; %短半轴
    x=rand(1,n);
    y=rand(1,n);
    x=2*a.*x-a;
    y=2*b.*y-b;
    
    r1=(1/(a*a)).*(x.*x)+(1/(b*b)).*(y.*y);
    r2=2.*x+5-y;
    m1=find(r1<=1);%第一个条件
    m2=find(r2>=0);%第二个条件
    m3=find(ismember(m2,m1));
    M=m2(m3);
    X=x(M);
    Y=y(M);
    mm=length(M); 
    area=a*b*mm/n;
    
    figure(1);hold on;
    plot(X,Y,'.b');
    xlim([-30 30]);
    ylim([-15 15]);
    
    ax=gca;
    fs=18;
    ax.XColor = 'red';
    ax.YColor = 'red';
    ax.XAxisLocation='Origin';
    ax.YAxisLocation='Origin';
    ax.FontSize = fs;
    
    % 把椭圆的边缘画出来
    fplot(@(x)sqrt((1-x.^2./650.25).*210.25),[-25.5 25.5],...
        'Color','red');
    
    fplot(@(x)-sqrt((1-x.^2./650.25).*210.25),[-25.5 25.5],...
        'Color','red');
    
    %把直线画出来
    fplot(@(x)2.*x+5,[-30 30],...
        'Color','blue');
    
    
    

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

    展开全文
  • * MATLAB随机数的产生  - Uniform,Normal & Custom distributions * 蒙特卡洛仿真 * 产生股票价格路径 * 期权定价  - 经典公式  - 和蒙特卡洛方法比较  - 方差减小技巧  - Exotic Options * ...

    1  目录

    *  MATLAB随机数的产生

      - Uniform,Normal & Custom distributions

    *  蒙特卡洛仿真

    *  产生股票价格路径

    *  期权定价

      - 经典公式

      - 和蒙特卡洛方法比较

      - 方差减小技巧

      - Exotic Options

    *  多变量仿真

      - Basket Option

      - Portfolio Value at Risk

     

    2  重点内容讲解

    2.1  蒙特卡洛仿真

      - 依赖随机数生成

      - rand,randn,randi

        注:rand:产生平均分布随机数

          randn:产生正太分布随机数

          randi:产生随机整数随机数 

      -支持的随机分布

      - 随机分布拟合

    2.2  在统计工具箱里面有更多的随机数生成函数

    2.3 基于MATLAB常用随机数的举例

      举例:生成随机数

    %% Uniform distribution
    %
    % Numbers uniformly distributed along [0 1]
    % 产生100个随机分布的随机数在[0 1]这个闭区间内
    % rand的参数为n*n的矩阵
    rU = rand(1,10);  
    hist(rU,10);
    

      图示:

      

      举例:生成正太分布随机数

    %% Normal distribution
    %
    % Numbers normally distribution with mean0,std1
    % 基于均值为0,标准差为1的正态分布随机数。
    % randn的参数为n*n的矩阵
    rN = randn(1,1000);
    hist(rN,1000);
    

      图示:

     

      举例:设计随机种子的方式生成随机数

    %% Setting the behaviour of the random numbers
    %
    % There are many implementations of pseudo-random number generator in
    % MATLAB,we will be working with
    %
    % mt19937ar - Mersenne Twister,which has an approximate period of
    % 2^19937-1
    % We can set the behaviour in a number of ways
    % Seed the generator
    % 以设定种子的方式设置随机数
    rng(0)
    [randn(1),randn(1),randn(1),randn(1)]
    rng(0);
    [randn(1),randn(1),randn(1),randn(1)]
    % 由于设定的种子都是一样的,因此生成的两组随机数也是一样的
    % ans =
    %     0.5377    1.8339   -2.2588    0.8622
    % ans =
    %     0.5377    1.8339   -2.2588    0.8622
    

      

       举例:其他产生随机数的方法

    %% Generating random numbers from different distributions
    %
    % Lets see a list of the supported distributions
    docsearch Continuous Distributions
    % 用random产生随机数,按照随机规则产生,具体规则在doc,查看flag内容
    %% Now,lets choose a number of draws from one of these,say the exponential
    % 产生指数的随机数,[]为矩阵形状,3为参数,exp为flag
    rB = random('exp',3,[1 10000]);
    hist(rB,100);
    

      图示:

     

    2.3  对数据进行拟合fitdist

     

    2.4  产生股票价格路径

     

    2.5  公开函数:随机蒙特卡洛价格路径:

    function mat = pricePaths(S,r,T,sigma,nSims,nSteps)
    % S ==>> 起始价格
    % r ==>> 无风险回报率
    % T ==>> 时间宽度
    % sigma ==>> 波动率
    % nSims ==>> 做多少次蒙特卡洛放在
    % nSteps ==>> 在T时间内取多大的步长
    % Generate asset price paths using geometric brownian motion
    
    % Determine the timestep
    % 根据时间长度和步长,求出每个均匀分布点是多少长
    Dt = T/(nSteps);  
    
    % Generate the random numbers
    % 初步随机数,多少蒙特卡罗仿真*多少步长的矩阵
    mat = randn(nSteps,nSims);
    
    % Generate the returns scaled using the relevant equation
    % 布朗运动公式
    mat = exp((r-sigma^2/2)*Dt + sigma*sqrt(Dt).*mat);
    
    % Generate price paths
    mat = cumprod(mat,1); % 按照列的方向累乘,从某一天累计的回报率
    
    % Scale with the initial asset price
    % 初始价格*实际价格=实际价格回报率后的价格
    mat = [repmat(S,1,nSims); mat.*S];
    
    end  

       应用实例

    %% 
    S = 10; % 股票起始价格
    r = 0.03; % 无风险收益率
    T = 1; % 时间跨度
    sigma = 0.2;  % 波动率
    nSims = 10; % 多少条路径(多少次蒙特卡洛实验)
    nSteps = 250*10; % 步长是多少 这里是2500个步长
    
    paths = pricePaths(S,r,T,sigma,nSims,nSteps);
    %% Plotting
    figure;
    plot(paths);
    

      图示:我们可以看到以10为起始价格,生成10条蒙特卡洛的随机股票价格路径。生成这些随机的股票价格可以进行一些模型的压力检测。不仅在样本内可以进行检测,而且在可能会产生的不可知价格路径下,模型的鲁棒性效果如何(Robust)。

      再比如我们可以把初始价格设置为3000个点也会生成如下路径:

     

    转载于:https://www.cnblogs.com/noah0532/p/8720716.html

    展开全文
  • 使用MatLab实现蒙特卡洛求解圆周率 1.思路 基本原理,假设有一个正方形的内切圆,在正方形的内部均匀的取随机点,当取的两个x,y满足圆的方程 (a/2)^2 = x^2 + y^2是,表示在圆的内部,而在圆的内部的概率是: p =...

    使用MatLab实现蒙特卡洛求解圆周率

    1.思路

    基本原理,假设有一个正方形的内切圆,在正方形的内部均匀的取随机点,当取的两个x,y满足圆的方程 (a/2)^2 = x^2 + y^2是,表示在圆的内部,而在圆的内部的概率是:
    p = pi * (a/2)^2 / a^2 (a代表的是正方形的边长),
    此时,pi = 4 * p ,也就是四倍的概率,也就是在所有取得的随机数中,一共落在圆的内部 m 次,共抽取了n次。最终落入圆的概率:
    m/n
    pi = 4 * m/n
    (即满足方程x^2 + y^2 < (a/2)^2
    在此过程中,使用的函数是:rand ,随机生成(0,1)之间的均匀分布的伪随机数

    2.源代码

    %用来记录在圆的内部的点的个数
    m = 0
    n = input(“请输入你想做的实验的个数);
    %开始循环
    %假设圆的半径为1,也就是正方形的边长是2
    for i = 1:n
    	x = rand;
    	y = rand;
    	if (x^2 + y^2) < 1   %(1就是r ^2)
    		m = m + 1;   %满足条件,记录次数加1
    end
    
    fprintf(‘最终求出的pi的值是:%d’,4 * m/n)  %四倍的概率就是pi
    
    

    3.计算结果:

    在这里插入图片描述
    当然,随着实验的次数的不断的增大,得到的圆周率将会更加的准确
    觉得有帮助,记得点赞呐

    展开全文
  • Matlab实现蒙特卡洛法求心形线面积 思路: 1、生成一定数量的随机数,其大小在[0,1)之间; 2、用随机数确定一个长宽已知的矩形,并保证心形线在矩形中; 3、计算随机点落在心形线中的概率,然后乘以矩形的面积即可...
  • 我就不懂MATLAB,想知道具体代码。因为现在写论文急,也没时间仔细看书了蒙特卡罗模拟就是随机数相关的东西,你只要知道随机数是怎么得到。其它的事就要好办了。rand(m,n)产生m*n均匀随机数。ex:用概率方法求piN=...
  • 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以...基于matlab编写的算法,基于蒙特卡洛法求解椭圆面积,有很高的参考价值
  • Matlab关于蒙特卡洛仿真资料讲义和程序举例-第二讲-第五讲.rar 看到有些同学在找这方面的资料,的确蒙特卡洛仿真在通信中的应用非常广泛,我把我现有的资料发给大家,希望对大家有用。 比较多,分成了几个压缩...
  • Matlab规划问题——蒙特卡洛法 一、蒙特卡洛法简介 ​ 蒙特卡洛法是基于大量事件的统计结果来实现一些确定性问题的计算。而在规划问题中,蒙特卡洛法可以通俗理解为枚举法,通过产生很多随机数,对每一个随机数都...
  • Matlab--蒙特卡洛方法求pi值

    千次阅读 2020-08-13 22:13:45
    Matlab--蒙特卡洛方法求pi值 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值...
  • 蒙特卡洛方法 matlab 实现

    万次阅读 2015-01-28 18:29:43
    蒙特卡洛方法 matlab 实现 已有 12594 次阅读 2010-10-22 14:12 |个人分类:MATLAB|系统分类:科研笔记|关键词:蒙特卡洛方法 matlab 蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数...
  • 蒙特卡洛方法也称为统计模拟法、随机抽样技术、计算机随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。它源于世界著名的赌城—摩纳哥的...
  • 蒙特卡洛法之MATLAB实现

    万次阅读 多人点赞 2016-01-07 20:55:21
    使用蒙特卡洛法必须使用计算机生成相关分布的随机数。eg: y = x^2 ,y = 12 - x与X轴在第一象限与X轴围成一个曲边三角形。设计一个随机试验,求该图形的近似值。 其图形如下图所示:x=0:0.25:1
  • 基本概念蒙特卡洛模拟(Monte Carlo Simulation, MCS)是科学家冯·诺伊曼等人在1940年代发明的一种以概率为基础的方法,它以一座赌城命名——蒙特卡洛。如果用一句话来概括它的本质,那么就是基于重复随机抽样的模拟...
  • 基本概念蒙特卡洛模拟(Monte Carlo Simulation, MCS)是科学家冯·诺伊曼等人在1940年代发明的一种以概率为基础的方法,它以一座赌城命名——蒙特卡洛。如果用一句话来概括它的本质,那么就是基于重复随机抽样的模拟...
  • 蒙特卡洛模拟法是一种模拟法,由电子计算机来模拟一个过程的实现,重复 一定次数,然后计算系统的风险指标。它是用随机数来模拟数学与物理问题以求其近似解的一种通用方法。它可以解决带有随机性的问题和确定性问题...
  • 随机模拟—蒙特卡洛方法 Matlab代码实现 蒙特卡洛方法 蒙特卡洛方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为...
  • 随机数"的计算方法。 假设我们有个y=x^2的表达式,如何用MC方法求得函数在[0,1]区间的定积分呢? 定积分可以用面积来求解,也就是通过求箭头下的面积 为了衔接方便,照顾新手,给出作图程序吧 x=0:0.01:1;y=x.^...
  • 随机模拟——蒙特卡洛方法(含实例及matlab代码)

    万次阅读 多人点赞 2020-02-02 21:26:08
    是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。 基本思想 当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计...
  • MATLAB数学建模(6)-蒙特卡洛算法

    千次阅读 2016-08-11 18:22:20
    蒙特卡洛算法是基于概率论的一种计算方法,有些问题直接求解较为困难,但是利用类似做实验的方法去试探,利用随机数或”伪随机数”进行计算的话,问题会变得比较简单. 1.计算定积分 当然,这个问题比较简单,用...
  • 蒙特卡洛算法入门

    2018-04-20 11:35:53
    随机数产生开始讲述蒙特卡洛方法的原理,大致实施步骤,并以随机过程模拟等为例,示范蒙特卡洛方法的应用场景。有少量matlab代码,可供参考。
  • 蒙特卡洛MATLAB程序,利用蒙塔卡洛算法模拟金融。蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一...
  • (1)随机数的产生 A=rand(m,n); %生成m´n随机数矩阵,每个元素的选 取服从[0,1]上的平均分布 B=randn(m,n); %生成m´n随机数矩阵,每个元素的选 取服从标准正态分布 C=randi(nmax,m,n); %生成m´n随机数...
  • 它是基于对大量事件的统计结果来实现一些确定性问题的计算,使用蒙特卡洛方法必须使用计算机生成相关分布的随机数Matlab给出了生成各种随机数的命令。 举例(估算图形面积):y=x^2、y=12-x与x轴在第一象限围成...
  • % *monte - 蒙特卡洛法 % *lpint - 线性整数规划 % *L01p_e - 0-1整数规划枚举法 % *L01p_ie - 0-1整数规划隐枚举法 % *bnb18 - 非线性整数规划(在MATLAB5.3使用) % *bnbgui - 非线性整数规划图形工具(在MATLAB5.3...
  • Matlab有一个随机数生成函数rand(1,n),即在(0,1)区间产生均匀分布的n个随机数。如果需要在带权重的蒙特卡洛模拟中生成其他概率密度分布的随机数,该怎么办呢?能够利用均匀分布经过某种变换得到吗? 这篇笔记就是...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

matlab蒙特卡洛随机数

matlab 订阅