## 前言: 蒙特卡罗法(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);