蒙特卡诺法的matlab实现

原理介绍

简介

1.蒙特卡罗法也称统计模拟法、统计试验法。是把概率现象作为研究对象的数值模拟方法。是按抽样调查法求取统计值来推定未知特性量的计算方法。蒙特卡罗是摩纳哥的著名赌城,该法为表明其随机抽样的本质而命名。故适用于对离散系统进行计算仿真试验。在计算仿真中,通过构造一个和系统性能相近似的概率模型,并在数字计算机上进行随机试验,可以模拟系统的随机特性。

模拟步骤

在这里插入图片描述

产生模拟随机数的matlab命令

1.服从均匀分布

在这里插入图片描述
在这里插入图片描述

2.服从正态分布

在这里插入图片描述
注:适用于正态分布的情况:
在这里插入图片描述

3.服从指数分布

在这里插入图片描述

4.服从泊松分布

在这里插入图片描述

5.指数分布与泊松分布的关系

在这里插入图片描述

实战

第一例

在这里插入图片描述

clc,clear
count=100000;%进行模拟的次数
a=[20 15 10 5 5 3 3 3 3 1 1 1];%十一个数,代表股东的股份
flag=zeros(1,12);%作为标志数组
c=1:12;
for i=1:count
     b=c(randperm(length(a)));%b就是a中12个数的随机顺序排列,randperm(n)函数随机产生1到n的整数,这里再次在f里索引,为了提高随机性
    for j=1:12
        if(sum(a(b(1:j)))>=50) %判断前j个数是否大于等于50
            break;
        end
    end
    flag(b(j))=flag(b(j))+1; %j停止加一,要追溯到b(j)
end
flag=flag/count;            

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

扫描二维码关注公众号,回复: 9375813 查看本文章

第二例求积分

**题目:**y = x^2 ,y = 12 - x与X轴在第一象限与X轴围成一个曲边三角形。设计一个随机试验,求该图形面积的近似值。
在这里插入图片描述
思路:我们可以随机产生很多个点,然后求出点落在所求图形内的概率,然后利用求得的概率乘以矩形区域的面积即可求出面积。

x=unifrnd(0,12,[1,10000000]);%产生服从均匀分布的点
y=unifrnd(0,9,[1,10000000]);
count_point=sum(y<x.^2 & x<=3)+sum(y<12-x & x>=3)%求落入区域的点数
mianji=12*9*count_point/10^7

第三例求解非线性规划

在这里插入图片描述

%转化为最小值求解
clc,clear
lb=0;%下界
ub=10;%上界
n=1000;%试验次数
x1=unifrnd(lb,ub, 1,n);%产生服从均匀分布的随机数
x2=unifrnd(lb,ub,1,n);
possible_value=[x1(1) x2(1)];
min=inf;
for i=1:n
     possible_value=[x1(i) x2(i)];
    equ=acc(possible_value);
   
    if equ==1
        f_value=f(possible_value);
        if f_value<min
            min=f_value;
            X_good=possible_value;
        end
    end
end
X_good
result=-min%转化为最大值



%定义函数
function z=f(x)
z=2*x(1)^2+x(2)^2-x(1)*x(2)-8*x(1)-3*x(2);
end
%设定精度值
function accuracy=acc(x)
    if 3*x(1)+x(2)-10<=0.5 && 3*x(1)+x(2)-10>=-0.5
            accuracy=1;
    else
            accuracy=0;
    end 
end

在这里插入图片描述

发布了23 篇原创文章 · 获赞 17 · 访问量 4179

猜你喜欢

转载自blog.csdn.net/qq_43786066/article/details/104334355
今日推荐