实验5: 随机模拟实验

实验5: 随机模拟实验

5.1 基础训练

  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名学生的到达时刻如下
在这里插入图片描述

  1. 假设在某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(x11)2+3(x24)2+x1x2+(2x35)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+6x3204x1+5x2+2x3210x1150x290x325x3为整数

二、实验目的

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

三、实验过程

分析:在可行域内随机投点,比较各处函数值的大小找到最小值

代码:

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循环的使用注意事项,提醒我应当经常复习巩固所学知识,达到更好地学习效果。

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
随机信号是指信号的某些特性不能准确地预测或确定的信号。典型的随机信号包括噪声、随机震荡等。在信号处理中,我们需要对随机信号进行模拟和分析,以便更好地理解和处理它们。 Matlab提供了许多用于生成随机信号的函数。下面我们将介绍一些常用的函数及其用法。 1. rand函数 rand函数用于生成0~1之间的随机数。可以使用rand(n)生成一个n行n列的随机矩阵,也可以使用rand(m,n)生成m行n列的随机矩阵。 例如,生成一个3行4列的随机矩阵: ``` >> rand(3,4) ans = 0.8147 0.9134 0.2785 0.9649 0.9058 0.6324 0.5469 0.1576 0.1270 0.0975 0.9575 0.9706 ``` 2. randn函数 randn函数用于生成均值为0,方差为1的正态分布随机数。可以使用randn(n)生成一个n行n列的随机矩阵,也可以使用randn(m,n)生成m行n列的随机矩阵。 例如,生成一个3行4列的随机矩阵: ``` >> randn(3,4) ans = -0.1736 -0.1815 0.4103 0.8576 0.1774 -0.3115 -0.4018 -0.4336 -0.3439 0.3369 -0.2939 0.3426 ``` 3. randi函数 randi函数用于生成指定范围内的随机整数。可以使用randi(n)生成一个1~n之间的随机整数,也可以使用randi([a,b],m,n)生成一个a~b之间的m行n列的随机整数矩阵。 例如,生成一个1~10之间的随机整数: ``` >> randi(10) ans = 4 ``` 生成一个2行3列的5~15之间的随机整数矩阵: ``` >> randi([5,15],2,3) ans = 5 14 15 8 7 12 ``` 4. wgn函数 wgn函数用于生成指定均值和方差的高斯白噪声。可以使用wgn(n,m,power)生成一个n行m列的高斯白噪声矩阵,其中power为信号功率。 例如,生成一个3行4列的方差为0.5,均值为0的高斯白噪声矩阵: ``` >> wgn(3,4,0.5) ans = -0.0639 0.0163 0.0513 0.2526 0.1034 -0.2015 0.2668 0.3352 0.1665 -0.1635 -0.0388 0.1908 ``` 以上是Matlab中生成随机信号的一些常用函数。通过使用这些函数,我们可以方便地模拟和分析各种随机信号。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个毛毛虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值