问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

导弹追击问题的数学建模与MATLAB仿真

创作时间:
作者:
@小白创作中心

导弹追击问题的数学建模与MATLAB仿真

引用
CSDN
1.
https://blog.csdn.net/2301_81340086/article/details/136761212

导弹追击问题是一个经典的数学建模问题,涉及微分方程、坐标变换和编程实现等多个方面的知识。本文将通过一个具体的实例,详细介绍如何通过MATLAB编程来模拟导弹追踪移动目标的过程。

问题描述

导弹基地发现正北方向120km处海面上有一艘敌舰以90km/h的速度向正东方向行驶。该基地立即发射导弹追踪追击敌舰,导弹速度为450km/h,自动导航系统使导弹在任一时刻都能对准敌舰。试问导弹在何时何处击中敌舰?

问题分析

由于自动导航系统的存在,导弹始终对准了敌舰,所以导弹的轨迹应该是一个曲线。我们可以采用微分的思想解决这个问题。先计算出基地和敌舰的初始距离d,然后利用三角函数将导弹和敌舰的坐标表示出来,设敌舰在t(t极小)时间内走过的距离为s,而导弹到飞行的距离为s1,通过此时导弹与敌舰连线与x轴的角度算出导弹的新坐标(x1,y1),以及敌舰的新坐标(x2,y2)。通过选取足够多的t,就可以找到d足够小时(视作打击完成)的导弹的坐标及飞行时间。

本题使用MATLAB编程和图像绘制。

相应公式

代码展示

clear;clc;
v1=25;v2=125;n=200;t=1; %采用米做单位,时间间隔选定1秒
a=rand(n,2,2);
a(1,1,1)=0;a(1,2,1)=0;
a(1,1,2)=0;a(1,2,2)=120000;
c=1;
while c>0.01
    for i=1:1100   %冗余循环次数
    d=sqrt((a(i,1,1)-a(i,1,2))^2+(a(i,2,1)-a(i,2,2))^2);
    cos_1 = (abs(a(i,1,2)-a(i,1,1)))/d;
    sin_1 = (abs(a(i,2,2)-a(i,2,1)))/d;
    a(i+1,1,2)=a(i,1,2)+v1*t;
    a(i+1,2,2)=120000;
    a(i+1,1,1)=a(i,1,1)+v2*t*cos_1;   %依次描出导弹每个点的坐标
    a(i+1,2,1)=a(i,2,1)+v2*t*sin_1;
    plot(a(i,1,1),a(i,2,1),'r.',a(i,1,2),a(i,2,2),'b.')
    %legend('船','导弹','Location','northeastoutside')
    xlabel('东方向距离')
    ylabel('北方向距离')
    title('导弹追击')
    hold on;
    pause(0.01)
    if d<50  %假设导弹在离敌舰50米处即可命中
        break
    end
    end
    c=0;
end
time1 = a(i+1,1,2)/v2 %计算导弹命中的时间
zuobiao = [a(i,1,1) a(i,2,2)]
%显示命中坐标  

图像示例

展望

真实的追击过程远比模拟的困难,需要用到更加复杂的公式,为了简单模拟,追击过程被大大简化。希望以后我也能模拟出真正的追踪过程。

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号