实验5: 随机模拟实验
5.1 基础训练
- 假设学生到达图书馆的间隔时间服从在区间[0, 5](单位:秒)上的均匀分布,请编程输出100个学生的到达时刻。
代码:
x = 5*rand(1,99); % 生成间隔时间向量
sum = 0; %求和数赋初值
y = []; %到达时刻向量
for i = 1:length(x)
sum = sum+x(i);
y(i+1)=sum;
end
y(1) = 0; %设第一个同学到底时刻为0
y %输出到达时刻向量
运行结果:假设第一名学生到达的时刻为0,则100名学生的到达时刻如下
- 假设在某30分钟内学生到达图书馆的间隔时间服从在区间均值为5秒的指数分布(exprnd(5)),请编程产生30分钟内所有到达图书馆的学生的到达时刻,并输出到达人数;并绘制学生的到达时刻散点图(横轴为人的序号,纵轴为到达时刻;学生从序号1开始编号).
代码:
x = exprnd(5,1,500); %生成到达时间间隔向量
sum = 0;
y = [0];
i = 1;
while 1
sum = sum + x(i);
if sum>1800
break
else
y = [y,sum];
i = i+1;
end
end
length(y) %输出到达人数
y %输出到达时刻
x = [1:length(y)]
% 使用 scatter 函数画散点图
scatter(x, y, '*');
% 添加标题和轴标签
title('学生到达时刻散点图');
xlabel('学生序号');
ylabel('学生到达时刻');
散点图:
运行结果:假设第一名学生到达的时刻为0,则30分钟内到达学生人数及其到达时刻如下
5.2 综合训练
一、实验任务
请用蒙特卡罗法求解下列优化模型。
m i n f ( x ) = 2 ( x 1 − 1 ) 2 + 3 ( x 2 − 4 ) 2 + x 1 x 2 + ( 2 x 3 − 5 ) 2 min\quad f(x)=2(x_1-1)^2+3(x_2-4)^2+x_1x_2+(2x_3-5)^2 minf(x)=2(x1−1)2+3(x2−4)2+x1x2+(2x3−5)2
s . t . { 3 x 1 + 2 x 2 + 6 x 3 ≤ 20 4 x 1 + 5 x 2 + 2 x 3 ≤ 21 0 ≤ x 1 ≤ 15 0 ≤ x 2 ≤ 9 0 ≤ x 3 ≤ 25 且 x 3 为整数 s.t.\begin{cases}3x_1+2x_2+6x_3\le20\\4x_1+5x_2+2x_3\le21\\0\le x_1\le15\\ 0\le x_2\le9\\0\le x_3\le 25 且x_3为整数\end{cases} s.t.⎩ ⎨ ⎧3x1+2x2+6x3≤204x1+5x2+2x3≤210≤x1≤150≤x2≤90≤x3≤25且x3为整数
二、实验目的
熟悉蒙特卡罗法求解优化问题的原理。
三、实验过程
分析:在可行域内随机投点,比较各处函数值的大小找到最小值
代码:
function opt
n = 1e8;%随机点的个数
fobj = inf;
for i = 1:n
x(1) = 15*rand;
x(2) = 9*rand;
x(3) = fix(26*rand);
if (fun(x)<fobj)&(cons(x)<=0) %找最小值
fx = x;
fobj = fun(x);
end
end
fx %变量x1,x2和x3取值
fobj %对应函数值
function y = fun(x)
y = 2*(x(1)-1).^2+3*(x(2)-4).^2+x(1)*x(2)+(2*x(3)-5).^2;
end
function c = cons(x)
c = zeros(1,2);
c(1) = 3*x(1)+2*x(2)+6*x(3)-20;
c(2) = 4*x(1)+5*x(2)+2*x(3)-21;
end
运行结果:
四、实验自评与改进方向
(一)实验自评:在本次实验中,基本完成了实验任务,较好地实现了实验目标。
(二)改进方向:应进一步熟悉蒙特卡罗方法在概率中的应用,加强各函数的熟练应用能力。
五、实验体会,收获及建议
通过本次实验,我了解了随机数学实验的相关函数命令,熟悉了蒙特卡洛的思想,并能用这个思想去解决一些最优化问题、随机分布问题等,对MATAB编程技巧更加熟悉,收获良多。
在这次实验中,我也发现自己对已经学习的知识有些许遗忘,比如while循环的使用注意事项,提醒我应当经常复习巩固所学知识,达到更好地学习效果。