电子科技大学数学实验6:随机模拟实验

随机模拟实验

基础训练

假设学生到达图书馆的间隔时间服从在区间[0, 5](单位:秒)上的均匀分布,请编程产生100个学生的到达时刻。

解:

all=[];

ddsk=0;

for i=1:100

  j=5*rand(1);

  ddsk=ddsk+j;

  all=[all;ddsk];

end

disp(all)
>> Untitled

  1.5755

  3.4824

  3.5724

  6.0906

  6.7256

余下省略

假设在某30分钟内学生到达图书馆的间隔时间服从在区间[0,5](单位:秒)上均匀分布,请编程产生30分钟内所有到达图书馆的学生的到达时刻,并输出到达人数.

解:

all=[];

ddsk=0;

i=0;

while true

  j=5*rand(1);

  ddsk=ddsk+j;

  if ddsk>30*60break

  end

  all=[all;ddsk];

  i=i+1;

end

fprintf('到达人数为%d\n',i)

disp(vpa(all,4))

到达人数为724

1.778

2.615

5.497

8.954

11.99

16.72

1791.0

1793.0

1795.0

1800.0

综合训练

一.实验任务

请用蒙特卡罗法求解下列优化模型。

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{f}(x)=2(x_1-1)^2+3(x_2-4)^2+x_1x_2+(2x_3-5)^2 minf(x)=2(x11)2+3(x24)2+x1x2+(2x35)2
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 为整数 . 3x_1+2x_2+6x_3≤20 \\4x_1+5x_2+2x_3≤21\\ 0≤x_1≤15\\ 0≤x_2≤9\\ 0≤x_3≤25且x_3为整数. 3x1+2x2+6x3204x1+5x2+2x3210x1150x290x325x3为整数.

二. 实验目的

​ 熟悉蒙特卡罗法求解优化问题的原理。

三. 实验过程

all=[];

for i=1:1000000

  x1=15*rand(1);

  x2=9*rand(1);

  x3=fix(26*rand(1));

  if 3*x1+2*x2+6*x3<=20&4*x1+5*x2+2*x3<=21

​    all=[all;x1,x2,x3];

  end

end

x1=all(:,1);

x2=all(:,2);

x3=all(:,3);

f=inline('2*(x1-1).^2+3*(x2-4).^2+x1.*x2+(2*x3-5).^2');

s=f(x1,x2,x3);

l=length(s);

fmin=min(s);

fprintf('其中最小值为%d,一百万个点中落在范围内的共有%d个\n',fmin,l)
>> Untitled

其中最小值为4.207e+00,一百万个点中落在范围内的共有7454个

四.实验自评与改进方向

基本上完成了实验的任务 在最后一个实验的过程中 最开始采用的是利用find直接找出所有符合条件的点的位置 但是考虑到有三个未知数 并且不熟悉find输出 的含义的情况下 没有采用find而是采用了for循环

随后在和同学的讨论中 找到了自己对find的误区 利用find一次性找出所有点的程序如下

N=1000000;

x1=15*rand(1,N);

x2=9*rand(1,N);

x3=fix(26*rand(1,N));

a=find(3*x1+2*x2+6*x3<=20&4*x1+5*x2+2*x3<=21);

xx1=x1(a);

xx2=x2(a);

xx3=x3(a);

f=inline('2*(x1-1).^2+3*(x2-4).^2+x1.*x2+(2*x3-5).^2');

s=f(xx1,xx2,xx3);

l=length(s);

fmin=min(s);

fprintf('其中最小值为%d,%d个点中落在范围内的共有%d个\n',fmin,N,l)

其中最小值为4.114575e+00,1000000个点中落在范围内的共有7718个

五. 实验体会,收获及建议

本次上机实验不仅使我们基本了解了随机数实验的相关函数命令,了解了蒙特卡罗方法的思想,并且能用这种思想去解决一些随机分布问题、概率问题、面积体积问题。也使得我们对Matlab的–些编程技巧更加熟悉,收获很大。

在编程中遇到的一些意想不到的问题也让我意识到,要在平时多加练习,不能眼高手低。不能仅仅掌握课堂上的函数命令,在课余时间多去看一些编程,丰富自己的函数储备,并且学习思路,从而让自己的编程更加容易。

同时针对最后一题,我认为x1 x2 x3给出的范围并不合适,从输出结果来看,在x1 x2 x3所给的范围内随机摇点,最终满足结果的仅有不到百分之一,这意味着设置一百万个点仅能有不到一万个点满足要求。所以我建议根据前两个不等式,改变下未知数的范围,这可以让模拟的结果更加明显,而不至于出现:设置了十万个点所得结果仍然无法趋于稳定的情况。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值