计算机模拟建模
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机模拟建模
李志林,欧宜贵
(海南大学信息科学技术学院海南海口570228)*
摘要:通过在数学建模教学实践中编写的两个典型案例的建模和利用MATLAB
软件求解,具体展示了对连续系统计算机模拟的建模步骤和方法。
关键词:计算机模拟;数学建模;连续系统
1. 计算机模拟概述
在一定假设条件下,利用数学运算模拟系统的运行,可称为数学模拟,现代的数学模拟都是在计算机上进行的,因此称为计算机模拟。模拟分为静态模拟和动态模拟。数值积分中的蒙特卡罗方法就是典型的静态模拟。动态模拟可分为连续系统模拟和离散事件系统模拟,连续系统模拟研究系统的状态随时间连续变化的情形,其模型一般是微分方程模型。建模时首先确定系统的连续状态变量,然后将它在时间上进行离散化处理,并由此模拟系统的运行状态。离散事件系统模拟讨论的是系统状态只在一些离散时间点上,由于随机事件驱动而发生变化,其模型一般用流程图或网络来表示。
为了模拟系统必须设置一个模拟时钟将时间从一个时刻向另一个时刻推进,并且可随时反映系统时间的当前值。模拟时间推进方式有两种:下次事件推进法和均匀间隔时间推进法。模拟离散系统常用下次事件推进法,其过程是:置模拟时间初值为0,跳到第一个事件发生的时刻,计算系统的状态,产生未来事件并加入到队列中去;跳到下一事件,计算系统的状态,……,重复这一过程直到满足某个终止条件为止。例如“海港系统的卸载货物问题”[1]假设某海港在任何时刻只允许一艘船卸载货物,由于船到达的时间是离散的,每艘船卸载货物的时间是随机的,因此,时间推进只能是以一艘船卸载货物从开始到完成,然后跳到下一艘船开始卸载货物。
一般说来,在下列情况中,计算机模拟能有效地解决问题[2]:(1)难于用数学公式表示的系统,或者没有建立和求解数学模型的有效方法; (2)虽然可以用解析的方法解决问题,但数学的分析与计算过于复杂,此时计算机模拟可能提供简单可行的求解方法;(3)希望能在较短的时间内观察到系统发展的全过程,以估计某些参数对系统行为的影响;(4)难以在实际环境中进行实验和观察时,计算机模拟是唯一可行的方法,例如太空飞行的研究;(5)需要对系统或过程进行长期运行比较,从大量方案中寻找最优方案。
模拟连续系统常用均匀间隔时间推进法,下面是我们在计算机模拟数学建模教学中编写的几个典型案例。
2. 三人追逐模型
正三角形三个顶点各有一人。在某一时刻(设为t0=0)三人同时出发以匀速v按顺时针方向走向下一个人。如果他们始终保持对准目标,则最终将按螺旋状曲线汇合于中心点O。请求出这种情况下每个人的行进轨迹。
2.1 问题分析与模型的建立
+∆建立平面坐标系,取时间间隔t∆,采样并计算每个人在每一时刻t的下一时刻t t
基金项目:海南省教育厅高校科研资助项目,批准号:Hjsk200519
作者简介:李志林(1964-),男,海南大学信息学院副教授.
的位置(坐标)。设A 追逐B ,t 时刻A 的坐标为,()A A x y ,B 的坐标为(,)B B x y ,容易计算A 在t t +∆的坐标为:,(cos sin )A A x v t y v t ++∆α∆α ,其中
cos α=
sin α=
该问题的算法为:
(1) 赋初值,终止时间t,采样间隔t ∆,行进速度v ,及各起点位置;
(2) 确定循环次数n;
(3) 对j=1,2,3,……n 循环计算,对i=1,2,3,循环计算,
1,i j ij x x x x v t +-=+∆
1,i j ij y y y x v t +-=+∆
(4) 分别将三人各自在各个时刻的对应点连接成一折线,并将它们画在同一图中,即得他们的行进轨迹。
2.2 编程画出轨迹
根据算法可编出如下的Matlab 源程序(取1,20,0.02,v t t A ==∆=
点的初始坐标为
)
: t=20;dt=0.02;v=1;n=t/dt;
x(1,1,1)=5;x(1,1,2)=5*sqrt(3);x(2,1,1)=10;x(2,1,2)=0;
x(3,1,1)=0;x(3,1,2)=0;
for j=1:n
for i=1:3
xx1=x(i,j,1);
yy1=x(i,j,2);
if(i~=3)
xx2=x(i+1,j,1);
yy2=x(i+1,j,2);
else
xx2=x(1,j,1);
yy2=x(1,j,2);
end
dd=sqrt((xx2-xx1)^2+(yy2-yy1)^2);
xx1=xx1+(v*dt*(xx2-xx1))/dd;
yy1=yy1+(v*dt*(yy2-yy1))/dd;
x(i,j+1,1)=xx1;
x(i,j+1,2)=yy1;
plot(x(i,j+1,1),x(i,j+1,2),'b');hold on;
end
end
运行后得到三人追逐的轨迹如下图:
图1 三人追逐轨迹
3. 猎狗攻击问题
一只野兔在平面上沿着直线以匀速1v 前进,突然一只猎狗攻击他,这只猎狗在侧后方以恒定速率221,()v v v >奔向该兔,狗的运动方向始终指向这只兔子。
(1)设开始时兔在A 处坐标为 00(,)x y 狗在原点O 处,兔子沿平行于y 轴直线奔跑,请建立数学模型求狗运动的轨迹。
(2)在如下数据下计算并画出狗的轨迹,12001/,3/,10,20v m s v m s x m y m ====。 3.1 模型的建立
狗的轨迹曲线为y=y(x),并设经过时间t,狗位于((),())P x t y t ,兔位于001(,)Q x y v t +, PQ 就是狗的运动轨迹曲线弧在点P 处的切线。因此有
010
y y v t dy dx x x --=- 即 100()v t x x y y y '=-+- OP
弧的长度为:0s =⎰ 又根据题意,弧OP的长度为线段AQ长度的
21v v 倍。即
20001
[()]v x x y y y v '=-+-⎰