导弹巡航追踪目标模拟程序(1)源码版--matlab
导弹巡航追踪目标模拟程序–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说明书
- 设计环境:matlab2020b
- 运行环境要求win10 包含matlab离线支持包
- 主要功能描述:
1)实现鱼雷追究目标过程的可视化过程。展示的运行分为直行、环绕、尾追、命中判定。2)通过设定参数仿真不同条件下命中结果的变化大小。
3)设定目标潜艇的不同规避方式研究不同规避方式过程中命中率变化。
4)软件包含对仿真的结果分析与保存。 - 设计app的算法流程:
5 仿真APP的界面展示 - 仿真结果展示:
- 设计思路:
1)输入初始仿真参数
2)判断输入参数的合理性
3)选择对应的仿真模型
4)将参数带入预先设计的数学模型
5)展示仿真过程中鱼雷与目标的位置轨迹图
6)根据需求保存对应文件
- 展示命中结果
8)分析仿真数据
导弹巡航追踪目标模拟程序(1)源码版--matlab相关推荐
- c++ gdb 绑定源码_【Vue原理】VNode 源码版
↑点击上方 "神仙朱" 一起研究Vue源码吧 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版 ...
- element 往node里面增加属性值_【Vue原理】Compile - 源码版 之 Parse 属性解析
写文章不容易,点个赞呗兄弟 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本 [2.5.17] 如果你觉得排版难 ...
- 初始化触发点击事件_【Vue原理】Event - 源码版 之 自定义事件
专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本[2.5.17] Vue 的自定义事件很简单,就是使用 观察者模 ...
- Bootstrap 源码版文件结构
源码版的Bootstrap提供了CSS.JavaScript的源文件,以及一份文档,还有使用 ImageOptim 工具压缩后的图片文件. 源码版的所有文件,也是按逻辑进行分类存储.将下载的文件解压, ...
- 【Vue原理】Diff - 源码版 之 Diff 流程
写文章不容易,点个赞呗兄弟 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本 [2.5.17] 如果你觉得排版难 ...
- php表白树洞怎么写,树洞表白墙免费源码版
树洞表白墙免费源码版是一款实用工具,这款软件的主要功能就是制作属于你的表白情书,发送给你爱慕已久的对象,如果你因为羞涩不敢口头表白,使用这款软件不能说百分百成功,但至少是一个表白的途径. 软件介绍 树 ...
- alfresco6.1(源码版) + onlyoffice安装部署
alfresco6.1(源码版) + onlyoffice安装部署 简要说明 docker部署安装alfresco6.1 前提环境 Java maven docker 从原型生成项目 集成onlyof ...
- 【Vue原理】Methods - 源码版
写文章不容易,点个赞呗兄弟 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本 [2.5.17] 如果你觉得排版难 ...
- vue使用computed有参数_【Vue原理】Computed - 源码版
专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本2.5.17 今天要记录 computed 的源码,有时候想,理 ...
- vue如何创建vnode_【Vue原理】Component - 源码版 之 创建组件VNode
专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本[2.5.17] 今天就要开启我们 Component 探索之旅 ...
最新文章
- Mathematica 画图操作中的一些小惊喜
- 文巾解题 184. 部门工资最高的员工
- 基础知识(三)makefile文件编写初级篇
- 由Handle转换为控件
- ARMv8 MMU及Linux页表映射:TLB
- Module LUT6 is not defined
- 企业实战|Mysql不停机维护主从同步
- 【优化覆盖】基于matlab移动网格求解无线传感器网络节点覆盖优化问题【含Matlab源码 1300期】
- Java通过JNI/JNA加载dll库文件调用C接口,出现“java.lang.UnsatisfiedLinkError:包名.类.方法(参数)”问题
- java基础学习1-java实验输出希腊字母表
- 计算机文化第15版快速测试答案,《计算机文化基》第1次作业及答案.doc
- buuctf——(HDCTF2019)Maze
- html文本特效代码逐个出现,JS特效文字逐个显示
- Node学习 | Day04 数据库与身份验证(数据库的基本概念、安装并配置MySQL、MySQL的基本使用、在项目中操作MySQL、前后端的身份验证)
- Scala-Day13
- 软件测试研究生院校排名,自动化专业考研学校有哪些 最新考研院校排名
- bitwise oracle,linq – 与NHibernate和Oracle的Bitwise AND
- Day08_vant实现_网易云音乐案例
- boto3使用教程用法
- python uniform 函数