Matlab计算仿真

  • 格式:pptx
  • 大小:760.17 KB
  • 文档页数:20

下载文档原格式

  / 20
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

se(1) = unifrnd(a, b);%%第一个顾客的理发时长
向量ar, se, be, en,
be(1) = ar(1);%%第一个顾客的理发开始时刻 en(1) = be(1) + se(1);%%第一个顾客的理发结束时刻
wa都是动态增长
wa(1) = be(1) - ar(1);%%第一个顾客的理发等待时长 的向量
be(k) max ar(k), en(k 1),
en(k) be(k) se(k), wa(k) be(k) ar(k).
Matlab代码 SimulateQueue.m
lambda = 30;%%指数分布参数
a = 15; b=30;%%均匀分布参数
ar(1) = exprnd(lambda);%%第一个顾客的达到时刻
max
k
arg
min
en
ar(k
)
k
j
max k j(k) k
其中 j(k) argminen(i) en(i) ar(k)
i
在Matlab中可以采用 j = find(en>ar(k), 1, 'first');来实现
记 ar(k) 表示第k个顾客的达到时间 随机生成 ,
wa(k) 表示第k个顾客的等待时间, be(k) 表示第k个顾客的理发开始时间,
y
20 10
0 -10 -20 -30 -40 -50 -60
0
10 20
30 40 x
猎狗仿真轨迹 兔子仿真轨迹 猎狗真实轨迹 兔穴
50 60 70
disp('狗捉住兔的位置是:'); [ rabbit(1, i), rabbit(2, i)] plot(rabbit(1, 1:i), rabbit(2, 1:i), 'b.', 'MarkerSize', 14)%%画出兔子轨迹
xd (t t) xd (t) vt cos yd (t t ) yd (t) vt sin
假设 t 时刻兔子位置xr (t ), yr (t), 猎狗位置xd (t), yd (t)
1 猎狗的追踪递推公式
xd (t t) xd (t) vt cos yd (t t ) yd (t) vt sin
k = 2;
ar(k) = a(k-1) + exprnd(lambda);%%下一个顾客的达到时刻
while ar(k)<= 600
se(k) = unifrnd(a, b);%%随机理发时长
be(k) = max(ar(k), en(k-1));%%开始理发时间
en(k) = be(k) + se(k);%%理发结束时间
仿真实验过程: (1)用指数分布生成一批[0, 600]到达的顾客; (2)对每个顾客用[15, 30]的均匀分布生成服务时间; (3)记录每个顾客的等待时间.
记 ar(k) 表示第k个顾客的达到时间 随机生成 ,
wa(k) 表示第k个顾客的等待时间, be(k) 表示第k个顾客的理发开始时间,
se(k) 表示第k个顾客的理发时长 随机生成 ,
%%最大的仿真步长
rabbit = zeros(2, maxSize); %%初始化兔子轨迹数组
dog = zeros(2, maxSize); %%初始化猎狗轨迹数组
rabbit(:, 1) = [0; b]; dog(:, 1) = [x0; y0]; for i = 1 : maxSize-1
试确定:(1)顾客平均等待时间; (2)理发师每天 平均工作时间; (3)最大队长。
不妨将10:00作为计数时刻0点, 一直到600min
(20:00)结束!
指数分布的密度函数为
f
(x)
ex
x0
0 x0
Matlab中只需调用 exprnd(lambda), lambda=30,
Matlab中调用 unirnd(15, 30)返回[15, 30]的随机值
2.28 200
y

v(
y)
2.28,
0 y 200 200 y 960
2.28 200
(1160
y),
960
y
1160
1160m
1000m 长江水流方向
起点: 武昌汉阳门
游泳者调整泳姿方向始终对着终点.
终点
给出游泳者的仿真轨迹.
u
v
2. 四只乌龟位于长度为1m的正方形四角, 同时向 逆时针方向邻近的乌龟追去. 假设四只乌龟的 速度相同, 在本移动过程中每只乌龟都正对着 被追的乌龟, 确定4只乌龟的追踪轨迹.
en(k) 表示第k个顾客的理发结束时间.
假设上述变量都已经计算得到,则
(1) 顾客平均等待时间 avgWait wa(k)
n
(2) 理发师每天平均工作时间 sumSe se(k)
(3)
最大队长 max Queue
max
k
arg min en
ar (k )
k
j
图示理解最大队长
(3) 最大队长maxQueue
之前捉到野兔?
实验目的 学会采用时间步长发进行计算机仿真实验.
时间步长法: 野兔逃一步,猎狗追一步. 当猎狗和野兔距离足够小时, 就认为猎狗已捉到野兔.
假设 t 时刻兔子位置xr (t ), yr (t), 猎狗位置xd (t), yd (t)
1 猎狗的追踪朝向
tan yr yd
xr xd 那么,
2. 如果理发店有2名理发师,假设理发时间服从 [15, 30]的均匀分布,洗头时间服从[10, 20]的 均匀分布,电发时间服从N(30, 52)的正态分布, 其中只理发占35%,理发并洗头50%,理发洗 头并电发占15%. 重新求解 (1)顾客的等待时 间;(2)理发师劳动时间;(3)最长等待队列长度. (正态分布用 R = normrnd(mu,sigma) )
for i = 1:1000
[avgWait(i), sumService(i), n(i), maxQueue(i)] = SimulateQueue;
end
mean(avgWait)
运行结果
mean(sumService)
ans = 30.6854
mean(n)
ans = 465.3677
mean(maxQueue) end
wa(k) = be(k) - ar(k);%%等待理发时长 k = k+1; ar(k) = ar(k-1) + exprnd(lambda);
仿真结束,把最 后一个多余数据
end ar(k) = [];
删掉, ar(k)>600
avgWait = mean(wa)%%计算平均理发等待时间
sumService = sum(se)%%计算理发师的工作时长
在步长法里t只取整数倍t, 从而改写为
1 猎狗的追踪递推公式, 令t kt
xd (k yd (k
1) 1)
xd (k) yd (k)
vt cos vt sin
xd yd
(k (k
1) 1)
xd (k) yd (k)
vt
cos sin
2 兔子的逃跑公式
xr yr
(k (k
1) 1)
b 0Байду номын сангаас
ukt
3 捕获条件
因为计算步骤 是离散的点了, 很难相等!
xd (k) xr (k) 2 yd (k) yr (k) 2 ut
b = -60; u = 3; v = 5; x0 = 70; y0 = 15;
dt = 1/2; err = dt * u;
maxSize = ceil(-b /dt);
2. 排队理发(有兴趣自学)
某理发店有一名理发师,理发店营业时间是10: 00—20:00, 平均每隔30min就有一名顾客到店(即 顾客达到时间间隔服从参数为30min的指数分布), 每位顾客的理发时间服从[15, 30]上的均匀分布。服 务原则严格按先到先理发,只要有顾客理发师就不 休息,理发师工作时顾客只能等候。 上午10:00起 就有顾客达到,晚于20:00到达的顾客将不提供服 务,但理发师会保证之前已经在店内的顾客得到理 发服务.
hold on plot(dog(1, 1:i), dog(2, 1:i), 'r.', 'MarkerSize', 14);%%画出猎狗仿真轨迹
练习
1. 假设长江两岸为平行直线, 垂直距离H=1160米,
水平距离L=1000米, 游泳者速度u=1.5m/sec, 水
流速度v为
终点: 汉阳南岸咀
2 兔子的逃跑公式
xr (t ) b ut yr (t) 0
3 捕获条件
xd (t) xr (t) 2 yd (t) yr (t) 2 0
y
20 10
0 -10 -20 -30 -40 -50 -60
0
猎狗仿真轨迹 兔子仿真轨迹 猎狗真实轨迹 兔穴
10 20 30 40 50 60 70 x
if norm(dog(:, i) - rabbit(:, i)) < err break %%捉到,跳出循环
end k = rabbit(:, i) - dog(:, i); k = k / norm(k); rabbit(:, i+1) = [0; b + i * u * dt]; dog(:, i+1) = dog(:, i) + k * v * dt; end
end maxQueue = max(waitQ)%%最长队列长度
计算结果: avgWait = 13.7885 sumService = 475.6372 n = 19 maxWait = 3
注意这只是一个随机 结果,一般需要仿真 多次(如1000次)来得到
Matlab代码(仿真1000次)
function DoSimulation%% DoSimulation.m avgWait = zeros(1000,1); sumService = zeros(1000,1); n = zeros(1000,1); maxQueue = zeros(1000,1);
余下Matlab代码
avgWait = mean(wa)%%计算平均理发等待时间 sumService = sum(se)%%计算理发师的工作时长 n = length(ar);%%顾客人数 waitQ(1) = 0;
for k=2:n waitQ(k) = k - find(en > ar(k), 1,'first');
Matlab计算仿真
仿真简介
利用模型复现实际系统中发生的本质过程, 并通 过对系统模型的实验来研究存在的或设计中的 系统.
桥梁受力结构
飞机模型的风洞试验
1. 追兔问题
设旷野上有一只野兔和一条猎狗. 在时刻 t=0, 猎 狗发现了野兔并开始追踪, 野兔也同时发现猎狗 并向兔穴直奔过去. 假设兔穴位于坐标原点, 时 刻t=0, 野兔位于(0, b) = (0, -60), 猎狗位于(x0, y0) = (70, 15), 猎狗追踪的方向始终对着野兔, 野兔 速度u=3, 猎狗速度v=5. (1) 确定猎狗的追踪轨迹; (2) 问猎狗能否在野兔进洞
ans = 20.7050 ans = 3.8290
%% SimulateQueuem.m
function [avgWait, sumService, n, maxQueue] = SimulateQueue
%%上两页ppt的程序,增加函数的返回值
end
练习
1. 如果顾客分两种,一种只剪发,剪发时间服从 [15, 25]的均匀分布,占60%,另一种是剪发并 洗头,洗头时间服从[10, 15]的均匀分布,占 40%. 重新求解 (1)顾客的等待时间;(2)理发师 劳动时间;(3)最长等待队列长度.
se(k) 表示第k个顾客的理发时长 随机生成 ,
en(k) 表示第k个顾客的理发结束时间. 关键弄清楚be(k), en(k), wa(k)之间的关系与计算!
对于第一位顾客: be(1) ar(1),en(1) be(1) se(1), wa(1) be(1) ar(1).
对于第 k 位顾客: