- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微分方程建模专题讲座
MATLAB软件仿真法 当建立动态系统的微分方程模型很困难时, 我们可以用计算机仿真法对系统进行分析研究。 所谓计算机仿真就是利用计算机对实际动态系 统的结构和行为进行编程、模拟和计算,以此 来预测系统的行为效果。 MATLAB软件仿真法 x c o y 走私船初始位在点(0,0),方向为y轴正方向, 缉私艇的初始位在点(c,0), 追赶方向可用方向余弦表示为: 走私船的位置: 缉私艇的位置: o 缉私艇的位置: 则 时间步长 仿真算法: 第二步: 计算动点缉私艇D在时刻 时的坐标 计算走私船R在时刻 时的坐标 第一步:设置时间步长 , 速度a, b及初始位置 第三步:计算缉私艇与走私船这两个动点之间的距离: 根据事先给定的距离,判断缉私艇是否已经追上了走私船,从而判断退出循环还是让时间产生一个步长,返回到第二步继续进入下一次循环; 第四步:当从上述循环退出后,由点列 和 可分别绘制成两条曲线 即为缉私艇和走私船走过的轨迹曲线。 取c=3千米,a=0.4千米/分钟,b=0.8千米/分钟, c=3; a=0.4/60; b=0.8/60; d=0.01;dt=2;t=0; jstx=c;jsty=0;zscx=0;zscy=0; hold on axis([0,3,0,2]) while (sqrt((jstx-zscx)^2+(jsty-zscy)^2)d) t=t+dt; jstx=jstx-b*dt*jstx/sqrt(jstx^2+(a*t-jsty)^2); jsty=jsty+b*dt*(a*t-jsty)/sqrt(jstx^2+(a*t-jsty)^2); zscy=a*t; plot(jstx,jsty,r+,zscx,zscy,b*) pause(0.2) end jstx,jsty,zscx,zscy,t 程序zhuixiantu.m 历时:296秒, 艇:(0.000041,1.97) 船:(0,1.97) 显示船与艇行进路线程序 c=3; a=0.4/60; b=0.8/60; d=0.01;dt=2;t=0; jstx=c;jsty=0;zscx=0;zscy=0; while (sqrt((jstx-zscx)^2+(jsty-zscy)^2)d) pause(0.01) hold on axis([0,3,0,2]) t=t+dt; jstx=jstx-b*dt*jstx/sqrt(jstx^2+(a*t-jsty)^2); jsty=jsty+b*dt*(a*t-jsty)/sqrt(jstx^2+(a*t-jsty)^2); zscy=a*t; plot(jstx,jsty,rO,zscx,zscy, b*) end 例设A(0,0)为一导弹发射点,发现位于B(0,100)处一架敌机沿水平方向逃离(如图),随即发射一枚导弹予以打击,现已知导弹时刻对准敌机,且速率为飞机速率的两倍(设飞机速度为1)。试编程模拟导弹打击敌机的动态过程,并实时给出飞机和导弹的位置坐标。 分析:现将整个动态过程离散化, 即以dt为时间间隔,实时观测飞机 与导弹的位置: 假定敌机从B点飞行到B1点, 导弹沿向量AB1到A1点; 此时敌机又到B2点,导弹则 沿向量A1B2到A2点; 以此类推,计算飞机的位置 坐标和导弹的位置坐标。 记 step1 画出导弹与飞机A、B点位置; step2 求出dt时间段后的B1点坐标; 2.1 求出向量A0B1的方向, 2.2 求出A1点坐标 2.3 求出导弹与飞机间的距离d; step3 判断距离d是否达到精度要求;如果没有 达到要求,转向step1重复画点、计算新的位置…… 直到d达到要求. 步骤: hold on axis([0 3 0 2]); k=0;A=[3,0];B=[0,0]; v=0.01;dt=1;d=3; while d0.01 plot(A(1),A(2),r.); plot(B(1),B(2),b*); pause(0.2); k=k+1; B=B+[0,v*dt]; e=B-A; d=norm(e); A=A+2.0*v*dt*e/d; fprintf(k=%.0f B(%.2f,100) A(%.2f,%.2f) d=%.2f\n,k,B(1),A(1),A(2),d); end 结果分析 用求解析解的方法算得的解是最为精确的;用数值方法计算的结果依赖于迭代终值的设定,减小迭代终值可以提高计算精度
文档评论(0)