drimwai的博客

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

## 前言: 蒙特卡罗法(Monte Carlo method)是以概率和统计的理论、方法为基础的一种计算方法,将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解,故又称统计模拟法或统计试验法。

** 简单来说就是,用多次重复试验的方法得出随机事件的概率和其他统计结果 (均值、标准差等)。以下,博主会通过一个实例进行讲解。


## 实例

### 1. 问题:

Salemach Corporation是一家生产简单机器的新兴公司。它想要分析一批新机器的利润。 据估计,每套机器的售价为150美元,安装和广告费用总计为25万美元。 该公司估计,每单位原材料的成本服从5080美元之间均匀分布,并且是等可能的。 该机器的需求量通常服从均值为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);
drimwai的博客
drimwai的博客
使用条款和私隐条款。版权所有,保留一切权利。
Copyright by drimwai Liang (2018-2020). All Right Reserved.