导弹巡航追踪目标模拟程序–matlab

1说明(接各类代码定制)

  • 本文是对书本教材中一个特定问题的模拟分析。
  • 文中的内容只作为理论推导,无实际意义
  • 代码的运行环境为matlab 2020a
  • 本文主要源码直接分享展示,后续会更新建立gui模拟程序
  • 转载请注明来源,本文代码为原创内容。

2更新进度

  • 示意图展示
  • 源码程序
  • 数学模型过程
  • gui界面

3背景简介

  • 导弹追击目标过程包括三个过程:
  • 1.直行过程 导弹向目标方位附近直行接近目标。
  • 2.导弹巡航搜敌过程,导弹在完成设定的直行距离会开始圆周绕行过程,通过扇面角辐射范围寻找目标。
  • 3.当目标接近导弹设定距离时,启动尾追程序。当导弹接近目标的距离到预警距离时,目标会出现回避行为用于规避尾追。

4追击过程的示意图

4.1寻找目标过程图

4.2尾追目标示意图

4.3接近目标时的规避行为示意图

5 构建导弹巡航模型的数学过程

相关数学模型部分可以参考下列文献。本文使用的具体过程会在后续更新中补齐。

[1]陈道升, 郑晓庆, 梁朝阳,等. 潜艇规避对声自导鱼雷命中
概率的影响[J]. 测试技术学报, 2014(5).
[2]张江, 张静远, 潘逊. 反潜鱼雷齐射作战能力仿真分析[C]

6 巡航程序gui界面


7巡航模拟源程序

  • 7.1 主程序
%% 鱼雷攻击潜艇过程
%% 只在第一次仿真展示击中图
clc
clear
close all
%% 开始仿真
cp_x_max=7;%仿真变动点数目
cpp_1_max=200;%仿真次数
cf_p_max=2; %发射次数
for cp_x=1:cp_x_max %仿真变动数目10个点hh=0;for cpp_1=1:cpp_1_max %仿真次数%         close alltime_name=0;%判断前一次运行是否击中%% 发射次数for cf_p=1:cf_p_max %发射次数%% 基础参数c_torpedo=0; %鱼雷回避角度shf=75;%鱼雷自导扇面角t_cx=10;% 发射间隔时间Rd=2000;%自导距离v=20;%直行速度12m/smat_len=10000;%最大航行距离if hh==0 && cf_p~=1%                 t1=floor(normrnd(mat_len/(4*v),0.2*mat_len/(3*v))); % 直行时间t1=120;elset1=120;endv_cs=10;%船速w1=deg2rad(12);%环形旋转角度r=1000; %环形半径%% 改变敌舷角参数Initial_distance_2=pi/(3);%初始敌舷角Interval_variation_2=0;%变动的敌舷角步长if cf_p==1Qm=Initial_distance_2+normrnd(Interval_variation_2*cp_x,Interval_variation_2*pi/12);%敌舷角else%                 Qm=Qm+deg2rad(t_cx*1);%敌舷角Qm=atan((t_cx*v_cs*sin(stat_way)-torpedo_x(end))/(t_cx*v_cs*cos(stat_way)-torpedo_y(end)));end%% 初始变动距离 % 0.1的正态误差Initial_distance=4200;%初始距离Interval_variation=0;%变动的间隔if cf_p==1x_target=[normrnd(Initial_distance+Interval_variation*(cp_x-1),Interval_variation*0.1)*cos(Qm),normrnd(Initial_distance+Interval_variation*(cp_x-1),Interval_variation*0.1)*sin(Qm)]; %仿真变动elseif c_torpedo~=0 %判断是否进行了偏转x_target(1)=torpedo_x(end);x_target(2)=torpedo_y(end);elsex_target(1)=x_target(1)+mV*v*t_cx*cos(c_P); %x角度变化x_target(2)=x_target(2)+mV*v*t_cx*sin(c_P); %y角度变化endend%% 速度比设定Initial_distance_3=0.1;%速度比Interval_variation_3=0.05;%速度比if Initial_distance_3+Interval_variation_3*cp_x >=1 %速度比disp('本次仿真不可靠')endif cf_p==1mV=Initial_distance_3+normrnd(Interval_variation_3*cp_x,0.02); %速度比if mV >=1mV=1;endelsemV=mV;end%% 方向角变动Initial_distance_4=0;%目标运行的角度方向Interval_variation_4=0;%目标运行的角度方向if cf_p==1
%                 c_P=Initial_distance_4+normrnd(Interval_variation_4*cp_x,pi/12);%目标运行的角度方向c_P=Initial_distance_4+normrnd(Interval_variation_4*cp_x,Interval_variation_4*pi/12);%目标运行的角度方向elsec_P=c_P;end%% 计算鱼雷射击有利提前角r_x=deg2rad(shf);%角度转弧度Ds=sqrt((x_target(1))^2+(x_target(2))^2);K=2*sin(r_x)/3*r_x;beta=asin(K*mV*Rd*(sin(Qm)/(Ds+K*mV*Rd*cos(Qm))));c_a=asin(mV*sin(Qm-beta))-beta;w=0;%% 初始船航向Initial_distance_5=0;%目标运行的角度方向Interval_variation_5=0;%目标运行的角度方向if cf_p==1stat_way=Initial_distance_5+Interval_variation_5*cp_x; %船头起始方向endc=c_a+deg2rad(stat_way)+Qm; %% 初始方向选择 鱼雷%             r=abs(v/w1);%回旋半径CT_A=c; %航向max_t=floor((mat_len)/v);%torpedo_x=x_target(1);torpedo_y=x_target(2);if cf_p==1x_t=zeros(max_t,1);y_t=zeros(max_t,1);elseclear x_t y_tx_t=[t_cx*v_cs*cos(stat_way);zeros(max_t-1,1)];y_t=[t_cx*v_cs*sin(stat_way);zeros(max_t-1,1)];end%% 步进计算鱼雷位置for t=2:max_tc=c+w;%% 更新目标位置if t==1torpedo_x(t)=torpedo_x(t)+(1-mV)*v*cos(c_P);%更新目标位置torpedo_y(t)=torpedo_y(t)+(1-mV)*v*sin(c_P);%更新目标位置x_target(1)=torpedo_x;x_target(2)=torpedo_y;elsetorpedo_x(t)=torpedo_x(t-1)+(1-mV)*v*cos(c_P);%更新目标位置torpedo_y(t)=torpedo_y(t-1)+(1-mV)*v*sin(c_P);%更新目标位置x_target(1)=torpedo_x(t);x_target(2)=torpedo_y(t);end%% 开始判断是否环绕if t<=t1x_t(t)=x_t(t-1)+v*cos(c);y_t(t)=y_t(t-1)+v*sin(c);t2=t;elsea=w1*(t1-t);x_t(t)=x_t(t2)+r*cos((CT_A)+pi/2*sign(a))+r*cos((CT_A)-pi/2*sign(a)+a);y_t(t)=y_t(t2)+r*sin((CT_A)+pi/2*sign(a))+r*sin((CT_A)-pi/2*sign(a)+a);x_length=sqrt((x_t(t)-x_target(1))^2+(y_t(t)-x_target(2))^2);if t==max_t  && x_length>Rd && cpp_1==1 %当达到最大时,展示图figure(cp_x)plot(x_t(1:t),y_t(1:t),'k-')hold onplot(torpedo_x(1),torpedo_y(1),'*-')hold onplot(torpedo_x,torpedo_y,'r-')end%% 判断是否接近敌人if x_length<=Rdop=atan(y_t(t)-x_target(2)/(x_t(t)-x_target(1)));disp('接近敌')a_xx = (y_t(t)-x_target(2))/norm(x_t(t)-x_target(1));teta=rad2deg(dot(a_xx, a));if teta<shf*2|| cf_p==1A = v*mV; %目标速度 %仿真变动B = v;%鱼雷速度xf_s=[x_t(t),y_t(t)];%当前鱼雷位置xf_q=[x_target(1),x_target(2)];%目标位置if cf_p==1figure(cp_x)endif cpp_1==1plot(x_t(1:t),y_t(1:t),'k-')hold onendt_has=max_t-t;%% 判断尾追过程[hh_t,torpedo_x,torpedo_y]=ch_test(xf_s,xf_q,A,B,t_has,cpp_1,c_P,c_torpedo);time_name=1*hh_t+time_name;if time_name == 1hh=1*hh_t+hh;endbreak %跳出大循环endendendendendhh_all(cp_x,1)=hh;hh_all(cp_x,2)=cpp_1;end
end
%% 绘制概率结果图
if Interval_variation~=0figureplot(Initial_distance:Interval_variation:(cp_x-1)*Interval_variation+Initial_distance,hh_all(:,1)./hh_all(:,2),'-*')title('敌方位置变动')ylabel('命中率')xlabel('初始雷目距离')ylim([-0.1,1.1])
endif Interval_variation_2~=0figureplot(rad2deg(Initial_distance_2:Interval_variation_2:(cp_x-1)*Interval_variation_2+Initial_distance_2),hh_all(:,1)./hh_all(:,2),'-*')title('敌方初始敌舷角变动')ylabel('命中率')xlabel('敌舷角')
endif Interval_variation_3~=0figureplot(Initial_distance_3:Interval_variation_3:(cp_x-1)*Interval_variation_3+Initial_distance_3,hh_all(:,1)./hh_all(:,2),'-*')title('敌方速度比变动')ylabel('命中率')xlabel('速度比')ylim([-0.1,1.1])
end
if Interval_variation_4~=0figureplot(Initial_distance_4:Interval_variation_4:(cp_x-1)*Interval_variation_4+Initial_distance_4,hh_all(:,1)./hh_all(:,2),'-*')title('敌方移动方向变动')ylabel('命中率')xlabel('目标运行的角度方向')ylim([-0.1,1.1])
endif Interval_variation_5~=0figureplot(Initial_distance_5:Interval_variation_5:(cp_x-1)*Interval_variation_5+Initial_distance_5,hh_all(:,1)./hh_all(:,2),'-*')title('船初始移动方向变动')ylabel('命中率')xlabel('船初始方向')ylim([-0.1,1.1])
end
  • 7.2尾追过程程序
function [hh,torpedo_x,torpedo_y,xf_s,B_N]=ch_test(xf_s,xf_q,A,B,t_has,cpp_1,c_p,c)
% clc
% clear
% close all
% A = 6; %目标速度
% B = 18;%导弹速度
hh=0;
cx=deg2rad(c_p);%起始移动
% c=90;%目标回旋角度
c_rad=deg2rad(c)+cx;
cu=0;
% x_1=20;
% t_has=100;%
tspan = [0 ,t_has+eps]; %模拟的时间范围
% xf_s=[ 607 386];
% xf_q=[895,-986];
L = norm([xf_s-xf_q]);%计算两点距离
cat=atan((xf_s(2)-xf_q(2))/(xf_s(1)-xf_q(1)));
if sign(cat)==-1y0 = [cat+pi  L]; %初始值, 曲线方向,初始相距距离
elseif xf_s(2)<xf_q(2)y0 = [cat+pi  L]; %初始值, 曲线方向,初始相距距离
elsey0 = [cat  L]; %初始值, 曲线方向,初始相距距离
end[t,y] = ode45(@(t,y) odefcn(t,y,A,B), tspan, y0);
torpedo_x=xf_q(1);
torpedo_y=xf_q(2);for t_t=1:size(y,1)vm=A;A_n=vm*t(t_t);B_N(t_t)=A_n+complex(xf_q(1),xf_q(2))+y(t_t,2)*exp(1i*y(t_t,1));%     B_N(t_t)=B_N(t_t)+exp(1i*cx);cel_xy=[torpedo_x(1,t_t);torpedo_y(1,t_t)];ax=sqrt((cel_xy(2)-imag(B_N(t_t)))^2+(cel_xy(1)-real(B_N(t_t)))^2);if  ax<=200if cpp_1==1hold onplot_rust(xf_s,B_N,torpedo_x,torpedo_y) %运行仿真,注释调end
%         disp('击中')hh=1;breakelseif t_t>=size(y,1)+1
%         disp('未击中')endif t_t<=10  && norm([cel_xy-B_N(t_t)])>=500torpedo_x(t_t+1)=torpedo_x(t_t)+vm*cos(cx);torpedo_y(t_t+1)=torpedo_y(t_t)+vm*sin(cx);elsetorpedo_x(t_t+1)=torpedo_x(t_t)+vm*cos(c_rad);torpedo_y(t_t+1)=torpedo_y(t_t)+vm*sin(c_rad);end
end
if cpp_1==1
%     hh=1;plot_rust(xf_s,B_N,torpedo_x,torpedo_y) %运行仿真,注释调
end
endfunction plot_rust(xf_s,B_N,torpedo_x,torpedo_y)
plot(xf_s(1),xf_s(2),'b*')
hold on
plot(B_N,'g-')
hold on
plot(torpedo_x(1),torpedo_y(1),'*-')
hold on
plot(torpedo_x,torpedo_y,'r-')
hold on
end
function dydt = odefcn(t,y,vm,vt)
dydt = zeros(2,1);
dydt(1)=-vm*sin(y(1))/y(2);
dydt(2)=-vt-vm*cos(y(1));%-deg2rad(75)*t;
end
  • 7.3 尾追简化模型
% clc
% clear
% close all\function [x1,x2]=test_u(cansu)
t=cansu(1);
H=cansu(2);
Ve=cansu(3);
Vw=cansu(4);
% t=0.1; %运行步长
% H=1200; %距离
% Ve=90;%目标速度
% Vw=300;%导弹速度
% h=H/ n;
lamda=Ve / Vw ;
y(1)=cansu(6);
x(1)=cansu(5);p(1)=0;T(1)=5;
for i=1:100 %迭代次数M= (Ve*T(i)-x(i))/ (H-y(i) );x1(i+1)=x(i)+Vw*t/ sqrt (1+1/M.^2) ;y1(i+1)=y(i)+Vw*t / sqrt (1+M.^2);T(i+1)=i*t;x(i+1)=0.5*(x1(i+1)+x(i)+Vw*t/sqrt (1+((H-y1(i+1) )/ (Ve*T(i+1)-x1(i+1)) ).^2) ) ;y(i+1)=0.5*(y1(i+1)+y(i )+Vw*t/sqrt(1+( (Ve*T(i+1)-x1(i+1))/(H-y1(i+1) ) ).^2) );if y (i+1)>=Hbreak;end
end[T;x;y]'L=x(i+1)T=x(i+1)/Veplot(x1,y1)hold onx2=H*ones(1,size(x,2));plot(x1,x2)ylabel('y坐标')xlabel('x坐标')
end

8 模拟结果图


9 模拟说明

10 gui完整展示




11 gui说明书

弹道仿真软件app说明书

  1. 设计环境:matlab2020b
  2. 运行环境要求win10 包含matlab离线支持包
  3. 主要功能描述:
    1)实现鱼雷追究目标过程的可视化过程。展示的运行分为直行、环绕、尾追、命中判定。2)通过设定参数仿真不同条件下命中结果的变化大小。
    3)设定目标潜艇的不同规避方式研究不同规避方式过程中命中率变化。
    4)软件包含对仿真的结果分析与保存。
  4. 设计app的算法流程:
    5 仿真APP的界面展示
  5. 仿真结果展示:
  6. 设计思路:
    1)输入初始仿真参数
    2)判断输入参数的合理性
    3)选择对应的仿真模型
    4)将参数带入预先设计的数学模型
    5)展示仿真过程中鱼雷与目标的位置轨迹图
    6)根据需求保存对应文件
  1. 展示命中结果
    8)分析仿真数据

导弹巡航追踪目标模拟程序(1)源码版--matlab相关推荐

  1. c++ gdb 绑定源码_【Vue原理】VNode 源码版

    ↑点击上方 "神仙朱" 一起研究Vue源码吧 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版 ...

  2. element 往node里面增加属性值_【Vue原理】Compile - 源码版 之 Parse 属性解析

    写文章不容易,点个赞呗兄弟 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本 [2.5.17] 如果你觉得排版难 ...

  3. 初始化触发点击事件_【Vue原理】Event - 源码版 之 自定义事件

    专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本[2.5.17] Vue 的自定义事件很简单,就是使用 观察者模 ...

  4. Bootstrap 源码版文件结构

    源码版的Bootstrap提供了CSS.JavaScript的源文件,以及一份文档,还有使用 ImageOptim 工具压缩后的图片文件. 源码版的所有文件,也是按逻辑进行分类存储.将下载的文件解压, ...

  5. 【Vue原理】Diff - 源码版 之 Diff 流程

    写文章不容易,点个赞呗兄弟 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本 [2.5.17] 如果你觉得排版难 ...

  6. php表白树洞怎么写,树洞表白墙免费源码版

    树洞表白墙免费源码版是一款实用工具,这款软件的主要功能就是制作属于你的表白情书,发送给你爱慕已久的对象,如果你因为羞涩不敢口头表白,使用这款软件不能说百分百成功,但至少是一个表白的途径. 软件介绍 树 ...

  7. alfresco6.1(源码版) + onlyoffice安装部署

    alfresco6.1(源码版) + onlyoffice安装部署 简要说明 docker部署安装alfresco6.1 前提环境 Java maven docker 从原型生成项目 集成onlyof ...

  8. 【Vue原理】Methods - 源码版

    写文章不容易,点个赞呗兄弟 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本 [2.5.17] 如果你觉得排版难 ...

  9. vue使用computed有参数_【Vue原理】Computed - 源码版

    专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本2.5.17 今天要记录 computed 的源码,有时候想,理 ...

  10. vue如何创建vnode_【Vue原理】Component - 源码版 之 创建组件VNode

    专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本[2.5.17] 今天就要开启我们 Component 探索之旅 ...

最新文章

  1. Mathematica 画图操作中的一些小惊喜
  2. 文巾解题 184. 部门工资最高的员工
  3. 基础知识(三)makefile文件编写初级篇
  4. 由Handle转换为控件
  5. ARMv8 MMU及Linux页表映射:TLB
  6. Module LUT6 is not defined
  7. 企业实战|Mysql不停机维护主从同步
  8. 【优化覆盖】基于matlab移动网格求解无线传感器网络节点覆盖优化问题【含Matlab源码 1300期】
  9. Java通过JNI/JNA加载dll库文件调用C接口,出现“java.lang.UnsatisfiedLinkError:包名.类.方法(参数)”问题
  10. java基础学习1-java实验输出希腊字母表
  11. 计算机文化第15版快速测试答案,《计算机文化基》第1次作业及答案.doc
  12. buuctf——(HDCTF2019)Maze
  13. html文本特效代码逐个出现,JS特效文字逐个显示
  14. Node学习 | Day04 数据库与身份验证(数据库的基本概念、安装并配置MySQL、MySQL的基本使用、在项目中操作MySQL、前后端的身份验证)
  15. Scala-Day13
  16. 软件测试研究生院校排名,自动化专业考研学校有哪些 最新考研院校排名
  17. bitwise oracle,linq – 与NHibernate和Oracle的Bitwise AND
  18. Day08_vant实现_网易云音乐案例
  19. boto3使用教程用法
  20. python uniform 函数

热门文章

  1. php faker,faker php伪造填充数据
  2. 记模拟器出现横竖屏切换闪屏问题
  3. Linux开发板网络直连电脑的设置方法
  4. 模板templates的使用
  5. View 的各种知识
  6. SAT考试填空习题(一)及答案
  7. FastDFS Destination image dimensions must not be less than 0 pixels
  8. 微信平台开发获取微信用户的OPENID
  9. 安卓手机怎样安装apk应用
  10. 【sklearn下的SVM转onnx】