首页 > 上网技巧 > matlab实现蒙特卡洛方法 附代码和实例

matlab实现蒙特卡洛方法 附代码和实例

时间:2020-12-15 21:22 作者:QQ地带 我要评论

## 前言: 蒙特卡罗法(Monte Carlo method)是以概率和统计的理论、方法为基础的一种计算方法,将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解,故又称统计模拟法或统计试验法。
 
** 简单来说就是,用多次重复试验的方法得出随机事件的概率和其他统计结果 (均值、标准差等)。以下,博主会通过一个实例进行讲解。
 
 
 
## 实例
 
### 1. 问题:
 
Salemach Corporation是一家生产简单机器的新兴公司。它想要分析一批新机器的利润。 据估计,每套机器的售价为150美元,安装和广告费用总计为25万美元。 该公司估计,每单位原材料的成本服从50到80美元之间均匀分布,并且是等可能的。 该机器的需求量通常服从均值为12,000、标准差为3000的正态分布。下面给出了单位人工成本范围的概率分布。
 
人工成本/单位
 
概率
 
52
 
0.05
 
53
 
0.25
 
54
 
0.4
 
55
 
0.25
 
56
 
0.05
 
求:
 
a). 利润的最大值、最小值、均值、标准差的估计值。
 
b). 生产该批机器的损失概率。
 
 
 
### 2. 解答:
 
#### 这里,我们很容易能够得出利润的公式为:
 
利润 = 售价 * 个数 – (材料费 + 人工费) * 个数 – 安装和广告费
 
简化为:profit = p * n – (m + l) * n – a
 
 
 
#### 现在,问题来了。这里的(个数、材料费和人工费)都是一个不确定数,那我们要怎么做呢?这就是蒙特卡洛方法发挥作用的时候了。蒙塔卡洛方法通过做重复且足够多次的试验,得到利润的一系列的可能值。我们通过统计这些值,便可得到相应 (a)、(b)的答案了 --- 利润的统计量,且他们均满足大数定律。
 
** 根据大数定律,当一个随机事件发生次数足够多时,他的算数平均值会接近于他本身的期望。
 
 
 
### 3. 相应的Matlab代码
 
 
clear;clc;
% 蒙特卡洛方法计算利润
profit=[];
frequency=100000;
for i=1:frequency
    P=150;
    A=250000;
    M=50+(80-50)*rand;
    R=normrnd(12000,3000);
    alphabet = [52 53 54 55 56]; 
    prob = [0.05 0.25 0.4 0.25 0.05];
    L=randsrc(1,1,[alphabet; prob]);
    tp=(P-M-L)*R-A;
    profit=[profit;tp];
end
% 计算利润的相关统计量
me=mean(profit);
ma=max(profit);
mi=min(profit);
sg=std(profit);
po=0;
ne=0;
% 计算损失概率
for i=1:length(profit)
    if profit(i,1)<0
        ne=ne+1;
    end
end
lo=ne/length(profit);

标签: MATLAB
顶一下
(0)
0%
踩一下
(0)
0%

Google提供的广告