第十二届“中关村青联杯”全国研究生数学建模竞赛-A题:水面舰艇编队防空和信息化战争评估模型(续)

目录

5.5 问题五模型的建立与求解

5.5.1 战略级信息化战争评估模型

5.5.2 战略级信息化战争评估模型的验证

6. 模型的评价

6.1 模型的优点

6.2 模型的缺点

参考文献

代码实现

附件1

(1)No_1_result.m 源代码

(2)No_1_figure.m 源代码

附录 2

(1)No_2_Init.m 源代码

(2)No_2_Main.m 源代码

(3)No_2_Beta.m 源代码

(4)No_2_Location_t.m 源代码

(5)No_2_Attack_Or_Not.m 源代码

附录 3

(1)No_3_Init.m 源代码

(2)No_3_Main.m 源代码

(3)No_3_Beta.m 源代码

(4)No_3_Location_t.m 源代码

(5)No_3_Attack_Or_Not.m 源代码

附录 4

(1)No_4_Example.mat 中数据

(2)No_4_Init.m 源代码

(3)No_4_Main.m 源代码

(4)No_4_Membership_1.m 源代码

附录 5

(1)No_5_Init.m 源代码

(2)No_5_Main.m 源代码


本文篇幅较长,分为上下两篇,上篇详见水面舰艇编队防空和信息化战争评估模型

5.5 问题五模型的建立与求解

信息化条件下作战对传统的作战评估模型和作战结果已经产生重要的甚至
某种程度上是决定性的影响。由于经典兰彻斯特方程没有考虑信息对现代战争进
程的影响,若直接采用兰彻斯特方程这种传统的消耗战模型去预测信息化战争的
结果,必然会出现重大误差。
文献 [5] 提出了一种广义兰彻斯特作战模型,该模型 通过将战场感知系数和信
息优势系数引入兰彻斯特方程,描述信息对于信息化战争的影响。 本文参考了
这种模型,并在此基础上,建立了战略级信息化战争评估模型。

5.5.1 战略级信息化战争评估模型

经典兰彻斯特方程根据两种战术情况分为线性律和平方律两种。
兰彻斯特线性律方程如下

5.5.2 战略级信息化战争评估模型的验证

根据题目附件 B 海湾战争相关资料,得到双方交战兵力数据,其中伊军总
兵力 120 万,美国及多国部队总兵力 76 万。战争中美国及多国部队充分利用其
在信息系统、指挥对抗、系统稳定性上的优势,掌握了制信息权,从而拥有了战
争主动权。
为了检验模型中信息化条件对于战争的影响程度,分别测试两组感知系数,
使用 Matlab 软件对模型进行仿真,并对结果进行比较。(相关 Matlab 源代码,
见附录 5)
对比分析图 5-13 和图 5-14 可知,当 k = 2 时,作战时间大约为 9 个时间单位,
美国及多国部队兵力损失 86200 个单位;当 k = 3 时,作战时间大约为 3 个时间
单位,美国及多国部队兵力损失 21583 个单位。信息优势从 k = 2 提高到 k = 3 时,
作战时间减少至原来的 13 ,美国及多国部队兵力损失减少到原来的 14
综上所述, 在双方兵力、武器性能相当的情况下,获得信息优势的一方能迅
速击败敌方,而且随着信息优势的提高,己方伤亡大幅减小,作战进程大幅加
快。

6. 模型的评价

6.1 模型的优点

对于问题一,指挥舰位于内侧,护卫舰位于外侧,提高了防御纵深。水上舰
艇编队优化模型以使来袭导弹在被发现时刻的位置与指挥舰的最短距离最长为
目标,而不是以警戒幕面积最大为优化目标,简化了模型计算的复杂程度,提高
了模型的可行性。
对于问题二和问题三,从来袭导弹的运动轨迹、防空导弹的拦截过程、舰艇
编队的火力分配等三个角度进行问题的分析与求解。尤其是构建了基于
Multi-Agent 的火力分配优化模型,不仅适用于单批次或多批次单方向来袭导弹
拦截任务的火力分配,还适用于多批次多方向来袭导弹拦截任务的火力分配,具
有较强的实际意义。
对于问题四,建立了适用于只有少量训练样本的模糊识别模型,并通过蒙
特·卡罗方法确定了较优的参数,模型识别的准确率达到 73.33% ,具有一定可
靠性。
对于问题五,采用定性与定量相结合的思想,在兰彻斯特方程基础上,引入
战场感知系数和信息优势系数,建立了战略级信息化战争评估模型,计算出了在
信息化战争中,信息对于战争双方的影响。

6.2 模型的缺点

对于问题一,水上舰艇编队优化模型未考虑电子干扰、近程火炮(包括密集
阵火炮)等拦截手段以及来袭导弹“二次捕捉”能力等因素对编队队形的影响。
对于问题五,模型的计算是基于作战双方的实力进行的。本文由于数据不全,
只考虑了作战双方的兵力数量,并没有考虑能够影响作战双方实力的武器装备等
因素。

参考文献

[1] 闫国玉 , 郭万海 , 李国建 . 水面舰艇编队防空体系构建及其效能研究 [J]. 火力与指挥控
, 2005, 30( 增刊 ).
[2] 周晶 , 宋辉 , 王秀森 , . 基于 Multi-Agent 的编队对空防御方法 [J]. 兵工自动化 , 2011,
30(9).
[3] 汪天飞 , 邹进 , 张军 . 数学建模与数学实验 [M]. 北京 : 科学出版社 , 2013.
[4] 李志强 . 复杂系统与战争模拟研究 [M]. 北京 : 国防大学出版社 , 2011.
[5] 吴俊 , 杨峰 , 梁彦 , . 面向信息化战争的广义兰切斯特作战模型 [J]. 火力与指挥控制 ,
2010, 35(2).

代码实现

附件1

1No_1_result.m 源代码

clc;
clear all;
x=42.878;
% - A 点距离
L_A=sqrt((20*sind(10)+x*cosd(10))^2+(20*cosd(10)-x*sind(10))^2)
% - A 点角度
T_A=atand((20*cosd(10)-x*sind(10))/(20*sind(10)+x*cosd(10)))+30
% - B 点距离
L_B=sqrt((20)^2+(sqrt(1600-(20*sind(10)+x*cosd(10)-20)^2)+20*cosd(10)-x*sind(10))^2)
% - B 点角度
T_B=atand((sqrt(1600-(20*sind(10)+x*cosd(10)-20)^2)+20*cosd(10)-x*sind(10))/20)+30
% - C 点距离
L_C=L_B
% - C 点角度
T_C=T_B+2*atand(20/(sqrt(1600-(20*sind(10)+x*cosd(10)-20)^2)+20*cosd(10)-x*sind(10)))
% - D 点距离
L_D=L_A
% - D 点角度
T_D=T_A+2*atand((20*sind(10)+x*cosd(10))/(20*cosd(10)-x*sind(10)))

(2No_1_figure.m 源代码

clc;
clear all;
x_min=16.782;
x_max=56.782;
x_equal=42.878;
x1=x_min:0.05:x_equal;
x2=x_equal:0.05:x_max;
y1=x1;
y2=sqrt(-0.9702*x2.^2 + 32.5444*x2 + 1327.0896)-0.174*x2+19.7;
figure;
plot(x1,y1);
hold on;
plot(x2,y2);
grid on;

附录 2

1No_2_Init.m 源代码

clc;
clear all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% 
% - 设定运动参数
% - 单位(m/s)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
v0=8.231; %指挥舰运动速度
v1=306; %来袭导弹运动速度
v2=816; %防空导弹运动速度
Pmax=42878; %导弹群初始位置与指挥舰距离,单位 m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - 设定仿真参数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
t=0; %仿真时钟
step=0.1; %设定时钟步长,单位 s
flag=0; %仿真控制标志位,为 1 时仿真结束(来袭导弹群距离指挥舰距离≤10 公里)
beat=0; %拦截次数
eggs=No_2_Location_t(Pmax,v0,v1,0); %来袭导弹群初始位置
dmin=10000; %仿真结束判断阈值,10000m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - 以指挥舰为远点,正北方向为 y 轴正方向,建立指标坐标系
% - 单位(m)!!!!!!!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - 变换单位(m-km)
Pmax=Pmax/1000;
% - A 点距离
L_A=sqrt((20*sind(10)+Pmax*cosd(10))^2+(20*cosd(10)-Pmax*sind(10))^2);
% - A 点角度
T_A=atand((20*cosd(10)-Pmax*sind(10))/(20*sind(10)+Pmax*cosd(10)))+30;
% - B 点距离
L_B=sqrt((20)^2+(sqrt(1600-(20*sind(10)+Pmax*cosd(10)-20)^2)+20*cosd(10)-Pmax*sind(10))
^2);
% - B 点角度
T_B=atand((sqrt(1600-(20*sind(10)+Pmax*cosd(10)-20)^2)+20*cosd(10)-Pmax*sind(10))/20)+3
0;
% - C 点距离
L_C=L_B;
% - C 点角度
T_C=T_B+2*atand(20/(sqrt(1600-(20*sind(10)+Pmax*cosd(10)-20)^2)+20*cosd(10)-Pmax*sind
(10)));
% - D 点距离
L_D=L_A;
% - D 点角度
T_D=T_A+2*atand((20*sind(10)+Pmax*cosd(10))/(20*cosd(10)-Pmax*sind(10)));
% - 变换单位(km-m)
Pmax=Pmax*1000;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - 构建舰队模型 [ 编号 , x 坐标 , y 坐标 , beta , l , 状态标志 ]
% - 指挥舰编号为 0,护卫舰编号为 1-4
% - beta 为【舰船与来袭导弹初始位置连线】与【来袭导弹飞行方向】的夹角
% - l 为舰船与来袭导弹初始位置距离
% - 状态标志=0 表示可以发射防空导弹
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
ships=[ 0 , 0 , 0 , 0 , 0 , 0 ;1 , L_A*sind(T_A)*1000 , L_A*cosd(T_A)*1000 , 0 , 0 , 0 ;2 , L_B*sind(T_B)*1000 , L_B*cosd(T_B)*1000 , 0 , 0 , 0 ;3 , L_C*sind(T_C)*1000 , L_C*cosd(T_C)*1000 , 0 , 0 , 0 ;4 , L_D*sind(T_D)*1000 , L_D*cosd(T_D)*1000 , 0 , 0 , 0 ];
% - 计算 beta,beta
for i=1:1:5ships(i,4)=No_2_Beta(ships(i,2:3),eggs);ships(i,5)=sqrt(sum((ships(i,2:3)-eggs).^2));
end

(2No_2_Main.m 源代码

% - 初始化
No_2_Init;
% - 开始仿真
disp(['--> ------------------------------------------------------------']);
disp(['-->']);
disp(['--> 【开始仿真】']);
disp(['-->']);
38
disp(['--> ------------------------------------------------------------']);
disp(['-->']);
tic;
while flag==0% - step1:计算导弹群距离指挥舰距离eggs_now=No_2_Location_t(Pmax,v0,v1,t); %导弹群当前位置d=sqrt(sum(eggs_now.^2)); %导弹群与指挥舰当前距离 %disp(['--> t= ',num2str(t),' s , 来袭导弹距离指挥舰 : ',num2str(d/1000),' 
km']);%pause(0.05);% - step2:判断仿真是否终止% - 仿真继续if d>999 %仿真继续% - step3:对 Multi-Agent 进行任务分配for i=1:1:5% - step4:进行状态轮询if ships(i,6)==0% - step:5 计算攻击条件attack_flag=No_2_Attack_Or_Not(Pmax,ships(i,2:5),v0,v1,v2,t); %attack_flag=[flag,det_t];if attack_flag(1)==1 %可以发射防空导弹ships(i,6)=7+attack_flag(2);%ships(i,6)=7;disp(['--> t= ',num2str(t),' s , 来袭导弹距离指挥舰: ',num2str(d/1000),' 
km , ',num2str(i),' 号舰船发起拦截']);%pause(0.05);endelseships(i,6)=ships(i,6)-step;if ships(i,6)<=0ships(i,6)=0;beat=beat+1;disp(['--> t= ',num2str(t),' s , 来袭导弹距离指挥舰: ',num2str(d/1000),' 
km , ',num2str(i),' 号舰船拦截完成,总拦截数:',num2str(beat)]);%pause(0.05);% - 重复 step:5 计算攻击条件attack_flag=No_2_Attack_Or_Not(Pmax,ships(i,2:5),v0,v1,v2,t); %attack_flag=[flag,det_t];if attack_flag(1)==1 %可以发射防空导弹ships(i,6)=7+attack_flag(2);%ships(i,6)=7;disp(['--> t= ',num2str(t),' s , 来袭导弹距离指挥舰: ',num2str(d/1000),' 
km , ',num2str(i),' 号舰船发起拦截']);%pause(0.05);endendendend% - 更新仿真时钟t=t+step;% - 仿真终止else flag=1;end 
end
disp(['-->']);
disp(['--> ------------------------------------------------------------']);
disp(['-->']);
disp(['--> 【仿真结束】']);
disp(['-->']);
disp(['--> 总计拦截来袭导弹 ',num2str(beat),' 批']);
disp(['-->']);
disp(['--> 仿真用时: ',num2str(toc),' s']);
disp(['--> ------------------------------------------------------------']);

(3No_2_Beta.m 源代码

function beta=No_2_Beta(X_ship,egg)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - beta:【舰船与来袭导弹初始位置连线】与【来袭导弹飞行方向】的夹角
% - X_ship=[x,y]:目标舰坐标
% - egg=[x,y]:来袭导弹初始位置坐标
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
cos_beta=(sum(egg.^2)+sum((X_ship-egg).^2)-sum(X_ship.^2))/(2*sqrt(sum(egg.^2))*sqrt(sum((
X_ship-egg).^2)));
beta=acosd(cos_beta);

(4No_2_Location_t.m 源代码

function Location=No_2_Location_t(Pmax,v0,v1,t)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - Location=[xt,yt]:t 时刻导弹的位置
% - Pmax
% - v0:指挥舰速度
% - v1:来袭导弹速度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - 计算导弹相对于指挥舰速度的 x 轴分量
vx=v1*cosd(220.5249-180)+v0*sind(200-180); %235.4130% - 计算导弹相对于指挥舰速度的 y 轴分量
vy=v1*sind(220.5249-180)+v0*cosd(200-180); %206.5668
% - 导弹相对运动方向与 x 轴夹角
A=atand(vy/vx);
% - 计算 xt
xt=vx*t-Pmax*cosd(A);
% - 计算 yt
yt=vy*t-Pmax*sind(A);
% - 整理输出
Location=[xt,yt];

(5No_2_Attack_Or_Not.m 源代码

function attack_flag=No_2_Attack_Or_Not(Pmax,ship,v0,v1,v2,t)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - attack_flag=[flag,det_t]
% - flag=1:表示可以发射防空导弹
% - det_t:拦截冻结时间
% - ship=[x,y,beta,l]
% - v0:指挥舰速度
% - v1:来袭导弹速度
% - v2:防空导弹速度
% - t:仿真时钟当前值
% 注:导弹发射准备时间为 7 秒
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - 构建方程参数
a=v1^2-v2^2;
b=2*(v1^2)*(t+7)-2*cosd(ship(3))*v1*ship(4);
c= ship(4)^2 + ((t+7)^2)*(v1^2) - 2*cosd(ship(3))*v1*ship(4)*(t+7);
% - 构建方程
str=['(',num2str(a),')*x^2+(',num2str(b),')*x+(',num2str(c),')=0'];
% - 求解
x=solve(str);
x=double(x);
% - 分析结果
if x(1)<0det_t=x(2);
elseif x(2)<0det_t=x(1);elsedet_t=min([x(1),x(2)]);
end
% - 判断攻击条件
flag=1;
% - 条件 1:是否超出防空导弹射程
if det_t*v2>=80000flag=0;
end
if det_t*v2<=10000flag=0;
end
% - 条件 2:拦截地点距离指挥舰是否太近
attack_Location=No_2_Location_t(Pmax,v0,v1,t+det_t);
if sqrt(sum(attack_Location.^2))<10000 || t+det_t>115flag=0;
end
% - 整理输出
attack_flag=[flag,det_t];

附录 3

1No_3_Init.m 源代码

clc;
clear all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% 
% - 设定运动参数
% - 单位(m/s)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
v0=8.231; %指挥舰运动速度
v1=306; %来袭导弹运动速度
v2=816; %防空导弹运动速度
Pmax=200000; %导弹群初始位置与指挥舰距离,单位 m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - 设定仿真参数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
t=0; %仿真时钟
step=1; %设定时钟步长,单位 s
flag=0; %仿真控制标志位,为 1 时仿真结束(来袭导弹群距离指挥舰距离≤10 公里)
beat=0; %拦截次数
eggs=No_3_Location_t(Pmax,v0,v1,0); %来袭导弹群初始位置
dmin=999; %仿真结束判断阈值,10000m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - 以指挥舰为远点,正北方向为 y 轴正方向,建立指标坐标系
% - 单位(m)!!!!!!!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - 变换单位(m-km)
Pmax=42878/1000;
% - A 点距离
L_A=sqrt((20*sind(10)+Pmax*cosd(10))^2+(20*cosd(10)-Pmax*sind(10))^2);
% - A 点角度
T_A=atand((20*cosd(10)-Pmax*sind(10))/(20*sind(10)+Pmax*cosd(10)))+30;
% - B 点距离
L_B=sqrt((20)^2+(sqrt(1600-(20*sind(10)+Pmax*cosd(10)-20)^2)+20*cosd(10)-Pmax*sind(10))
^2);
% - B 点角度
T_B=atand((sqrt(1600-(20*sind(10)+Pmax*cosd(10)-20)^2)+20*cosd(10)-Pmax*sind(10))/20)+3
0;
% - C 点距离
L_C=L_B;
% - C 点角度
T_C=T_B+2*atand(20/(sqrt(1600-(20*sind(10)+Pmax*cosd(10)-20)^2)+20*cosd(10)-Pmax*sind
(10)));
% - D 点距离
L_D=L_A;
% - D 点角度
T_D=T_A+2*atand((20*sind(10)+Pmax*cosd(10))/(20*cosd(10)-Pmax*sind(10)));
% - 变换单位(km-m)
Pmax=200000;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - 构建舰队模型 [ 编号 , x 坐标 , y 坐标 , beta , l , 状态标志 ]
% - 指挥舰编号为 0,护卫舰编号为 1-4
% - beta 为【舰船与来袭导弹初始位置连线】与【来袭导弹飞行方向】的夹角
% - l 为舰船与来袭导弹初始位置距离
% - 状态标志=0 表示可以发射防空导弹
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
ships=[ 0 , 0 , 0 , 0 , 0 , 0 ;1 , L_A*sind(T_A)*1000 , L_A*cosd(T_A)*1000 , 0 , 0 , 0 ;2 , L_B*sind(T_B)*1000 , L_B*cosd(T_B)*1000 , 0 , 0 , 0 ;3 , L_C*sind(T_C)*1000 , L_C*cosd(T_C)*1000 , 0 , 0 , 0 ;4 , L_D*sind(T_D)*1000 , L_D*cosd(T_D)*1000 , 0 , 0 , 0 ];
% - 计算 beta,beta
for i=1:1:5ships(i,4)=No_3_Beta(ships(i,2:3),eggs);ships(i,5)=sqrt(sum((ships(i,2:3)-eggs).^2));
end

(2)No_3_Main.m 源代码


% - 初始化
No_3_Init;
% - 开始仿真
disp(['--> ------------------------------------------------------------']);
disp(['-->']);
disp(['--> 【开始仿真】']);
disp(['-->']);
disp(['--> ------------------------------------------------------------']);
disp(['-->']);
tic;
while flag==0% - step1:计算导弹群距离指挥舰距离eggs_now=No_3_Location_t(Pmax,v0,v1,t); %导弹群当前位置d=sqrt(sum(eggs_now.^2)); %导弹群与指挥舰当前距离 %disp(['--> t= ',num2str(t),' s , 来袭导弹距离指挥舰 : ',num2str(d/1000),' 
km']);%pause(0.05);% - step2:判断仿真是否终止% - 仿真继续if d>dmin %仿真继续% - step3:对 Multi-Agent 进行任务分配for i=1:1:5% - step4:进行状态轮询if ships(i,6)==0% - step:5 计算攻击条件attack_flag=No_3_Attack_Or_Not(Pmax,ships(i,2:5),v0,v1,v2,t); %attack_flag=[flag,det_t];if attack_flag(1)==1 %可以发射防空导弹ships(i,6)=7+attack_flag(2);%ships(i,6)=7;disp(['--> t= ',num2str(t),' s , 来袭导弹距离指挥舰: ',num2str(d/1000),' 
km , ',num2str(i),' 号舰船发起拦截']);%pause(0.05);endelseships(i,6)=ships(i,6)-step;if ships(i,6)<=0ships(i,6)=0;beat=beat+1;disp(['--> t= ',num2str(t),' s , 来袭导弹距离指挥舰: ',num2str(d/1000),' 
km , ',num2str(i),' 号舰船拦截完成,总拦截数:',num2str(beat)]);%pause(0.05);% - 重复 step:5 计算攻击条件attack_flag=No_3_Attack_Or_Not(Pmax,ships(i,2:5),v0,v1,v2,t); %attack_flag=[flag,det_t];if attack_flag(1)==1 %可以发射防空导弹ships(i,6)=7+attack_flag(2);%ships(i,6)=7;disp(['--> t= ',num2str(t),' s , 来袭导弹距离指挥舰: ',num2str(d/1000),' 
km , ',num2str(i),' 号舰船发起拦截']);%pause(0.05);endendendend% - 更新仿真时钟t=t+step;% - 仿真终止else flag=1;end 
end
disp(['-->']);
disp(['--> ------------------------------------------------------------']);
disp(['-->']);
disp(['--> 【仿真结束】']);
disp(['-->']);
disp(['--> 总计拦截来袭导弹 ',num2str(beat),' 批']);
disp(['-->']);
disp(['--> 仿真用时: ',num2str(toc),' s']);
disp(['--> ------------------------------------------------------------']);

(3)No_3_Beta.m 源代码


function beta=No_3_Beta(X_ship,egg)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - beta:【舰船与来袭导弹初始位置连线】与【来袭导弹飞行方向】的夹角
% - X_ship=[x,y]:目标舰坐标
% - egg=[x,y]:来袭导弹初始位置坐标
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
cos_beta=(sum(egg.^2)+sum((X_ship-egg).^2)-sum(X_ship.^2))/(2*sqrt(sum(egg.^2))*sqrt(sum((
X_ship-egg).^2)));
beta=acosd(cos_beta);

(4)No_3_Location_t.m 源代码


function Location=No_3_Location_t(Pmax,v0,v1,t)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - Location=[xt,yt]:t 时刻导弹的位置
% - Pmax
% - v0:指挥舰速度
% - v1:来袭导弹速度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - 计算导弹相对于指挥舰速度的 x 轴分量
vx=v1*cosd(220-180)+v0*sind(200-180); %237.2248% - 计算导弹相对于指挥舰速度的 y 轴分量
vy=v1*sind(220-180)+v0*cosd(200-180); %204.4276
% - 导弹相对运动方向与 x 轴夹角
A=atand(vy/vx);
% - 计算 xt
xt=vx*t-Pmax*cosd(A);
% - 计算 yt
yt=vy*t-Pmax*sind(A);
% - 整理输出
Location=[xt,yt];

(5)No_3_Attack_Or_Not.m 源代码


function attack_flag=No_3_Attack_Or_Not(Pmax,ship,v0,v1,v2,t)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - attack_flag=[flag,det_t]
% - flag=1:表示可以发射防空导弹
% - det_t:拦截冻结时间
% - ship=[x,y,beta,l]
% - v0:指挥舰速度
% - v1:来袭导弹速度
% - v2:防空导弹速度
% - t:仿真时钟当前值
% 注:导弹发射准备时间为 7 秒
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
% - 构建方程参数
a=v1^2-v2^2;
b=2*(v1^2)*(t+7)-2*cosd(ship(3))*v1*ship(4);
c= ship(4)^2 + ((t+7)^2)*(v1^2) - 2*cosd(ship(3))*v1*ship(4)*(t+7);
% - 构建方程
str=['(',num2str(a),')*x^2+(',num2str(b),')*x+(',num2str(c),')=0'];
% - 求解
x=solve(str);
x=double(x);
% - 分析结果
if x(1)<0det_t=x(2);
elseif x(2)<0det_t=x(1);elsedet_t=min([x(1),x(2)]);
end
% - 判断攻击条件
flag=1;
% - 条件 1:是否超出防空导弹射程
if det_t*v2>=80000flag=0;
end
if det_t*v2<=10000flag=0;
end
% - 条件 2:拦截地点距离指挥舰是否太近
attack_Location=No_3_Location_t(Pmax,v0,v1,t+det_t);
if sqrt(sum(attack_Location.^2))<10000 || t+det_t>605flag=0;
end
% - 整理输出
attack_flag=[flag,det_t];

附录 4

1No_4_Example.mat 中数据

1.0e+003 *
0.8100 0.2810 0.2500 0.2020 0.0060 0.0030 0.0010
2.3000 0.2100 0.3000 0.3100 0.0040 0.0012 0.0020
0.8200 0.2800 0.2450 0.2010 0.0065 0.0054 0.0010
2.3250 0.2150 0.3200 0.3240 0.0042 0.0028 0.0020
0.8300 0.2820 0.2550 0.2000 0.0042 0.0047 0.0010
0.8250 0.2840 0.2500 0.2040 0.0050 0.0026 0.0010
2.2500 0.1500 0.3000 0.1550 0.0050 0.0033 0.0020
4.0000 0.1100 0.3000 0.0500 0.0034 0.0021 0.0030
2.8000 0.2600 0.2150 0.2600 0.0077 0.0068 0.0040
5.1200 0.1100 0.2100 0.0520 0.0036 0.0037 0.0050
4.0200 0.1200 0.2800 0.0520 0.0036 0.0017 0.0030
4.8000 0.1400 0.2200 0.0180 0.0096 0.0057 0.0050
0.4800 0.2950 0.2920 0.2450 0.0099 0.0069 0.0050
2.4500 0.2100 0.2300 0.2100 0.0050 0.0012 0.0050
2.9000 0.2900 0.2720 0.3500 0.0056 0.0052 0.0020

(2No_4_Init.m 源代码

clc;
clear all;
% - 导入源数据(data 为 15x7 的矩阵,行为样本,列为属性)
load No_4_Example.mat;
total_std=std(No_4_Example(:,1:6),1);
new_std=total_std./sum(total_std);
new_std(2,:)=new_std(1,:);
new_std(3,:)=new_std(1,:);
new_std(4,:)=new_std(1,:);
new_std(5,:)=new_std(1,:);
% - 归一化
temp_he=sum(No_4_Example(:,1:6));
data(1:15,1)=No_4_Example(1:15,1)/temp_he(1);
data(1:15,2)=No_4_Example(1:15,2)/temp_he(2);
data(1:15,3)=No_4_Example(1:15,3)/temp_he(3);
data(1:15,4)=No_4_Example(1:15,4)/temp_he(4);
data(1:15,5)=No_4_Example(1:15,5)/temp_he(5);
data(1:15,6)=No_4_Example(1:15,6)/temp_he(6);
data(:,7)=No_4_Example(:,7);
% - 计算样本各个属性平均值和标准差% - u1 u2 u3 u4 u5 u6
% - v1
% - v2
% - v3
% - v4
% - v5
m=zeros(5,6); %平均值
n=zeros(5,6); %标准差
for i=1:5temp_data=zeros(1,6);temp_index=0;for j=1:15if data(j,7)==itemp_index=temp_index+1;temp_data(temp_index,1:6)=data(j,1:6);endendm(i,:)=mean(temp_data,1);if i==4n(i,:)=mean(temp_data);elsen(i,:)=std(temp_data,1);end
end
% - 导入待识别数据
Aim_data=[4021,213,142,61,7.0,3.5;
2830,206,269,13,9.2,5.7;
3622,221,230,10,4.6,1.9;
2032,220,195,307,5.2,4.3;
353,232,195,261,5.2,5.5;
1170,160,266,231,3.4,2.6;
1907,208,283,170,9.4,6.2;
4952,205,301,100,1.4,1.1;
6393,168,301,144,2.6,5.5;
6,163,301,174,2.6,5.5;
4738,236,177,99,6.0,1.7;
4748,235,177,358,6.0,1.7;
888,229,195,232,4.8,3.6;
877,227,195,114,4.8,3.6;
99,243,213,155,8.6,3.1;
92,241,213,278,8.6,3.1]; 
% - 归一化
temp_he=sum(Aim_data(:,1:6));
temp_Aim_data(1:length(Aim_data(:,1)),1)=Aim_data(1:length(Aim_data(:,1)),1)/temp_he(1);
temp_Aim_data(1:length(Aim_data(:,1)),2)=Aim_data(1:length(Aim_data(:,1)),2)/temp_he(2);
temp_Aim_data(1:length(Aim_data(:,1)),3)=Aim_data(1:length(Aim_data(:,1)),3)/temp_he(3);
temp_Aim_data(1:length(Aim_data(:,1)),4)=Aim_data(1:length(Aim_data(:,1)),4)/temp_he(4);
temp_Aim_data(1:length(Aim_data(:,1)),5)=Aim_data(1:length(Aim_data(:,1)),5)/temp_he(5);
temp_Aim_data(1:length(Aim_data(:,1)),6)=Aim_data(1:length(Aim_data(:,1)),6)/temp_he(6);
Aim_data=temp_Aim_data;

(3)No_4_Main.m 源代码


% - 程序初始化
No_4_Init;
tic;
% - 计算模糊评价矩阵
result=zeros(length(Aim_data(:,1)),1);
a=[1.8938,0.6209,0.0008,22.8997,2.8169];
for i=1:length(Aim_data(:,1))W=zeros(5,6);W(1,1:5)=No_4_Membership_1(a(1),Aim_data(i,:),m,n);W(2,1:5)=No_4_Membership_2(a(2),Aim_data(i,:),m,n);W(3,1:5)=No_4_Membership_3(a(3),Aim_data(i,:),m,n);W(4,1:5)=No_4_Membership_4(a(4),Aim_data(i,:),m,n);W(5,1:5)=No_4_Membership_5(a(5),Aim_data(i,:),m,n);W(1,6)=No_4_Judge_1(Aim_data(i,6),n(1,6));W(2,6)=No_4_Judge_2(Aim_data(i,6),n(2,6));W(3,6)=No_4_Judge_3(Aim_data(i,6),n(3,6));W(4,6)=No_4_Judge_4(Aim_data(i,6),n(4,6));W(5,6)=No_4_Judge_5(Aim_data(i,6),n(5,6));%W=sum(W')'/5;W=(sum((W.*new_std)'))';[value,index]=max(W);if index<1index=round(5*rand(1));endresult(i,1)=index;
end
result
toc

(4)No_4_Membership_1.m 源代码


function Membership_j=No_4_Membership_1(a,x,m,n)
%Membership_j=exp(-10*(x(1,1:5)-m(1,1:5)).^2./n(1,1:5).^2)*No_4_Judge_1(x(1,6),n(1,6));
Membership_j=exp(-a*(x(1,1:5)-m(1,1:5)).^2./n(1,1:5).^2);
(5)No_4_Membership_2.m 源代码
function Membership_j=No_4_Membership_2(a,x,m,n)
%Membership_j=exp(-10*(x(1,1:5)-m(2,1:5)).^2./n(2,1:5).^2)*No_4_Judge_2(x(1,6),n(2,6));
Membership_j=exp(-a*(x(1,1:5)-m(2,1:5)).^2./n(2,1:5).^2);
(6)No_4_Membership_3.m 源代码
function Membership_j=No_4_Membership_3(a,x,m,n)
%Membership_j=exp(-10*(x(1,1:5)-m(3,1:5)).^2./n(3,1:5).^2)*No_4_Judge_3(x(1,6),n(3,6));
Membership_j=exp(-a*(x(1,1:5)-m(3,1:5)).^2./n(3,1:5).^2);
(7)No_4_Membership_4.m 源代码
function Membership_j=No_4_Membership_4(a,x,m,n)
%Membership_j=exp(-10*(x(1,1:5)-m(4,1:5)).^2./n(4,1:5).^2)*No_4_Judge_4(x(1,6),m(4,6));
Membership_j=exp(-a*(x(1,1:5)-m(4,1:5)).^2./n(4,1:5).^2);
(8)No_4_Membership_5.m 源代码
function Membership_j=No_4_Membership_5(a,x,m,n)
%Membership_j=exp(-10*(x(1,1:5)-m(5,1:5)).^2./n(5,1:5).^2)*No_4_Judge_5(x(1,6),n(5,6));
Membership_j=exp(-a*(x(1,1:5)-m(5,1:5)).^2./n(5,1:5).^2);
(9)No_4_Judge_1.m 源代码
function y=No_4_Judge_1(x6,n_16)
if x6>=4%y=exp(-10*(x6-4)^2/n_16^2);y=0;
elsey=1;
end
(10)No_4_Judge_2.m 源代码
function y=No_4_Judge_2(x6,n_26)
y=1;
(11)No_4_Judge_3.m 源代码
function y=No_4_Judge_3(x6,n_36)
if x6>=4%y=exp(-10*(x6-4)^2/n_36^2);y=0;
elsey=1;
end
52
53
(12)No_4_Judge_4.m 源代码
function y=No_4_Judge_4(x6,n_46)
if x6<=2%y=exp(-10*(x6-2)^2/n_46^2);y=0;
elsey=1;
end
(13)No_4_Judge_5.m 源代码
function y=No_4_Judge_5(x6,n_56)
y=1;

附录 5

1No_5_Init.m 源代码

clc;
clear all;
% - 设置仿真参数
t=0;
step=1;
flag=0;
r=10000;
b=10000;
Ts=0.1;
Us=0.1;
Tl=0.00001;
Ul=0.00001;
Ur=0.2;
Ub=0.1;
k=Ur/Ub;

(2No_5_Main.m 源代码

% - 程序初始化
No_5_Init;
% - 开始仿真
r_result=0;
b_result=0;
while flag==0if t>0r_result(t)=r;b_result(t)=b;temp_r=No_5_r(r,b,Us,k,Ub,Ul);temp_b=No_5_b(b,r,k,Ts,Ur,Tl);r=temp_r;b=temp_b;end% - 判断仿真是否终止if r<=0 || b<=0flag=1;elset=t+step;enddisp(['--> t= ',num2str(t),' , r= ',num2str(r),' , b= ',num2str(b)]);
endplot(1:t,r_result,1:t,b_result);
(3)No_5_r.m 源代码
function y=No_5_r(r,b,Us,k,Ub,Ul)
y=r-Us*b*Ub/k-(1-Ub)*Ul*r*b/(k^2);
(4)No_5_b.m 源代码
function y=No_5_b(b,r,k,Ts,Ur,Tl)
y=b-k*Ts*r*Ur-(1-Ur)*Tl*(k^2)*r*b;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/269127.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车零部件制造中的信息抽取技术:提升效率与质量的关键

一、引言 在汽车制造业中&#xff0c;零部件的生产是整个制造流程的关键一环。这些零部件&#xff0c;包括但不限于制动系统、转向系统和传动系统&#xff0c;是确保汽车安全、可靠运行的基础。为了满足现代汽车工业对效率和质量的严格要求&#xff0c;制造商们纷纷投入到高度…

HarmonyOS—HAP唯一性校验逻辑

HAP是应用安装的基本单位&#xff0c;在DevEco Studio工程目录中&#xff0c;一个HAP对应一个Module。应用打包时&#xff0c;每个Module生成一个.hap文件。 应用如果包含多个Module&#xff0c;在应用市场上架时&#xff0c;会将多个.hap文件打包成一个.app文件&#xff08;称…

P-States/C-States/S-States/G-States/D-States

P-States是指处理器的性能状态&#xff0c;可以根据需要调整处理器的工作频率和电压来平衡性能和能效。 S-States是指系统的睡眠状态&#xff0c;可以让系统在空闲时进入低功耗状态以节省能量。 G-States是系统的全局状态&#xff0c;通常用于描述整个系统的运行状态。 C-St…

文件上传之图片马

图片马介绍 图片马&#xff1a;就是在正常图片中插入木马。 图片马的制作 1.我们先创建php木马文件1.php&#xff0c;内容有以下两种方式&#xff1a; <?php eval($_POST[a]); ?> /* 常规一句话木马 */ <?php $aPD9waHAgQGV2YWwoJF9QT1NUWydhJ10pOz8; $myfile…

使用Pytorch导出自定义ONNX算子

在实际部署模型时有时可能会遇到想用的算子无法导出onnx&#xff0c;但实际部署的框架是支持该算子的。此时可以通过自定义onnx算子的方式导出onnx模型&#xff08;注&#xff1a;自定义onnx算子导出onnx模型后是无法使用onnxruntime推理的&#xff09;。下面给出个具体应用中的…

重构笔记系统:Docker Compose在微服务架构中的应用与优化

虽然我的笔记系统的开发是基于微服务的思想&#xff0c;但是在服务的配置和编排上感觉还是不太合理&#xff0c;具体来说&#xff0c;在开发上的配置和在生产上的配置差别太大。现在规模小&#xff0c;后面规模变大&#xff0c;估计这一块会成为系统生长的瓶颈。 因此&#xff…

推特API(Twitter API)对接说明,用户code To Token换取

前期准备 提前准备、说明&#xff1a;目前对接推特api开发门户分为3个版本&#xff0c;分别是免费的&#xff0c;100美金一个月的基础版以及5000美金一个月的企业版&#xff0c;免费的目前就两个接口可以调用&#xff0c;所以想要对接和使用推特最基本的也需要付100美元一个月…

ETAS工具链ISOLAR-AB重要概念,RTE配置,ECU抽取

RTE配置界面&#xff0c;包含ECU抽取关联 首次配置RTE&#xff0c;出现需要勾选的抽取EXTRACT 创建System System制作SWC到ECU的Mapping System制作System Data 的Mapping

LabVIEW眼结膜微血管采集管理系统

LabVIEW眼结膜微血管采集管理系统 开发一套基于LabVIEW的全自动眼结膜微血管采集管理系统&#xff0c;以提高眼结膜微血管临床研究的效率。系统集成了自动化图像采集、图像质量优化和规范化数据管理等功能&#xff0c;有效缩短了图像采集时间&#xff0c;提高了图像质量&#…

9.WEB渗透测试-Linux基础知识-Linux用户权限管理(上)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;8.WEB渗透测试-Linux基础知识-Linux基础操作&#xff08;二&#xff09;-CSDN博客 用户管…

Laravel框架: Call to a member function connect() on null 异常报错处理

Laravel框架&#xff1a; Call to a member function connect() on null 异常报错处理 Date: 2024.03.01 21:03:11 author: lijianzhan 原文链接: https://learnku.com/laravel/t/63721 问题&#xff1a; local.ERROR: Call to a member function connect() on null {"…

【办公类-21-08】三级育婴师 多个二级文件夹的docx合并成PDF

背景需求: 前期制作了单题文件夹 【办公类-21-07】新建文件夹 三级育婴师操作参考题目-CSDN博客文章浏览阅读439次&#xff0c;点赞7次&#xff0c;收藏10次。【办公类-21-07】新建文件夹 三级育婴师操作参考题目https://blog.csdn.net/reasonsummer/article/details/1363360…

Spring Boot项目中不使用@RequestMapping相关注解,如何动态发布自定义URL路径

一、前言 在Spring Boot项目开发过程中&#xff0c;对于接口API发布URL访问路径&#xff0c;一般都是在类上标识RestController或者Controller注解&#xff0c;然后在方法上标识RequestMapping相关注解&#xff0c;比如&#xff1a;PostMapping、GetMapping注解&#xff0c;通…

Gitlab: PHP项目CI/CD实践

目录 1 说明 2 CI/CD 2.1 部署方式一&#xff1a;增量部署 2.1.1 目标服务器准备 2.2.2 Gitlab及Envoy脚本 2.2 部署方式二&#xff1a;镜像构建与部署 2.2.1 推送到私有化容器仓库 准备工作 脚本 要点 2.2.2 推送到hub.docker.com 准备工作 脚本 3 参考&#x…

鸿蒙实战应用开发:【拨打电话】功能

概述 本示例通过输入电话&#xff0c;进行电话拨打&#xff0c;及电话相关信息的显示。 样例展示 涉及OpenHarmony技术特性 网络通信 基础信息 拨打电话 介绍 本示例使用call相关接口实现了拨打电话并显示电话相关信息的功能 效果预览 使用说明 1.输入电话号码后&#…

「滚雪球学Java」:多线程(章节汇总)

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

STM32F1 - SPI读写Flash

Serial peripheral interface 1> 实验概述2> SPI硬件框图初始化程序 3> STM32的SPI通信时序3.1> 时序图3.2> 文字描述3.3> 注意事项3.4> 流程图表示3.5> 程序表示接收程序&#xff1a;发送程序&#xff1a; 4> SPI的4种模式5> W25Q128存储结构块…

【学习心得】网站运行时间轴(爬虫逆向)

一、网站运行时间轴 掌握网站运行时间轴&#xff0c;有助于我们对“请求参数加密”和“响应数据加密”这两种反爬手段的深入理解。 二、从网站运行的时间轴角度来理解两种反爬手段 1、加载HTML&#xff1a; 这是浏览器访问网站时的第一步&#xff0c;服务器会返回基础…

docker基线安全修复和容器逃逸修复

一、docker安全基线存在的问题和修复建议 1、将容器的根文件系统挂载为只读 修复建议&#xff1a; 添加“ --read-only”标志&#xff0c;以允许将容器的根文件系统挂载为只读。 可以将其与卷结合使用&#xff0c;以强制容器的过程仅写入要保留的位置。 可以使用命令&#x…

基于Springboot的助农管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的助农管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…