数学建模《计算机随机模拟》
二、Matlab中的部分随机数产生命令 方法一 方法二 [例2] [例3] 云南师范大学数学学院 计算机随机模拟(Monte Carlo) (建模培训) 张洪波 主讲 有些问题,由于随机因素很多,用概率论的方法进行求解可能很难和复杂,这时就需要借助随机模拟方法得到近似解答。 随机模拟法也叫蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法。 由于Monte Carlo法计算量大,精度不高,因而需要借助计算机,并仅适合一些用解析方法或常规数值方法难以解决问题的低精度求解和验证 一、简介 正态分布N(μ,σ2) normrnd(μ,σ,m,n) 均值为λ的泊松分布 poissrnd(λ,m,n) 均值为λ的指数分布 exprnd(λ,m,n) 标准正态分布N(0,1) randn(m,n) 1,…,N的等概率分布 unifrnd(N,m,n) [a,b]上均匀分布 unifrnd(a,b,m,n) [0,1]上均匀分布 rand(m,n) 说明 命令 注:以下都是产生不同分布m×n 阶随机矩阵 正态分布变量X的数学期望?,方差? 2 ,密度函数计算密度值函数:normpdf(x,mu,sigma) 累积分布函数,即积分上限函数计算概率值函数:normcdf(x,mu,sigma) 逆累积分布函数值,即已知概率值p,求z使得计算函数:z = norminv(p,mu,sigma) 有关正态分布matlab计算函数 直方图绘图函数: hist(data,n)其中,data是需要处理的数据块,绘图原理:利用data中最小数和最大数构成一区间,将区间等分为n个小区间,统计落入每个小区间的数据量,以数据量为高度绘小矩形,形成直方图。如果省略参数n,MATLAB将n的默认值取为10。 直方图统计计算函数:N=hist(data,n)计算结果N是n个数的一维数组,分别表示data中各个小区间的数据量。这种方式只计算而不绘图。 其他用法:hist(data,x)或 N= hist(data,x) 统计直方图matlab函数hist 三、一些随机模拟的例子 [例1](相遇问题) 甲、乙两船在24小时内独立地随机到达码头. 设两船到达码头时刻都服从[0,24]上的均匀分布,如果甲船到达码头后停留2小时,乙船到达码头后停留1小时.问两船相遇的概率有多大?(可用几何概率,此处略) 分析:如果知道甲、乙两船到达的时刻x和y,两船能相遇的条件就是: 两船到达的时刻x和y可以随机生成,生成一组到达时刻,可以确定是否能相遇。 如果重复很多次,统计相遇的比例就可近似为相遇的概率。 这也是Monte Carlo思想. 两船到达码头时刻服从[0,24]上的均匀分布,甲船停留2小时,乙船停留1小时,相遇概率? 利用软件产生一组[0,24]上的随机数xi:10.4 5.3 0.3 9.0 20.1 6.8 7.8 …… 5.4分别代表甲船到达码头时间; 再产生一组[0,24]上的随机数yi:6.0 3.4 8.1 17.5 0.8 13.4 ……14.0分别代表乙船到达码头时间; 把(xi,yi)(i=1,2…)当作一天中甲船乙船到达的时间,统计出能相遇的频数,计算出相遇的频率做为相遇的概率。 可以使用软件(excel、C等实现) 两船到达码头时刻服从[0,24]上的均匀分布,甲船停留2小时,乙船停留1小时,相遇概率? clc; N=1000; c=0; %模拟次数N,相遇次数c清零 for i=1:N %重复N次到达时间 x=unifrnd(0,24,1,1); %甲船到达时间x(随机数) y=unifrnd(0,24,1,1); %乙船到达时间y(随机数) if((x<=y & y<=x+2) |(y<=x & x<=y+1)) c=c+1; %如果能相遇,则计数器加1 end end P=c/N %显示相遇的概率近似值 注意:每次运行的结果一般都不一样 %计算机模拟程序 (报童诀窍的简化版)报童每天清晨从报社购进报纸零售,晚上退回没有卖掉的报纸.若每份报纸的购进价为b=0.75元,售出价为a=1元,退回价为c=0.6元.每天需求量X是离散型随机变量,其分布为 0.30 0.36 0.34 P 520 510 500 X 问:如果报童每天购进报纸为n=510份,每天的平均利润是多少? 方法二:如果我们知道每天的需求量,可直接计算利润。而每天需求量可以按分布生成(随机模拟思想) 方法一:概率方法(略) 报童诀窍的简化版 售出价a=1,购进