仿真结果:
比例导引计算公式为:
其中a为导弹加速度,N为比例导引系数,λ为导弹目视线角变化率。其中在平面交战几何有以下关系:
%比例导引,目标阶跃机动
clc
clear
close all
%导弹的初始参数
VM = 1200.;%导弹的初始速度
RM1 = 0;%导弹初始位置
RM2 = 10000;
XNP = 4.;%比例导引系数,根据经验取3-5
THET=0/180*pi;%导弹的初始飞行航向角
VM1=VM*cos(THET);%导弹的初始速度
VM2=VM*sin(THET);
XNM_R=0;%导弹实际加速度指令的初始值
TAU_M=1;%导弹制导系统的时间常数
%目标的初始参数
VT = 600.;
RT1 = 50000;%目标初始位置
RT2 = 30000;
BETA=-5/57.3;%目标的初始飞行航向角
VT1=-VT*cos(BETA);
VT2=VT*sin(BETA);
XNT_R=0;
XNTLIM=2.5*9.8;%30km高度,目标最大过载初始值
TAU_T=0.5;
%弹目初始相对信息
RTM1=RT1-RM1;%X轴上的相对距离
RTM2=RT2-RM2;%Y轴上的相对距离
RTM=sqrt(RTM1*RTM1+RTM2*RTM2);%相对距离
XLAM=atan2(RTM2,RTM1); %视线角
VTM1 = VT1 - VM1;%相对距离在X轴上的投影
VTM2 = VT2 - VM2;%相对距离在Y轴上的投影
VC=-(RTM1*VTM1 + RTM2*VTM2)/RTM;%接近速度(相对速度)
n=0;
w=0.5;
T=0.;
S=0.;
while VC >= 0 %弹目在接近时,就一直循环
if RTM < 1000
H=.0002;%仿真步长
else
H=.01;
end
BETAOLD=BETA;%涉及到利用二阶runge-kutta递推微分方程的值
THETOLD=THET;
RT1OLD=RT1;
RT2OLD=RT2;
RM1OLD=RM1;
RM2OLD=RM2;
XNMOLD=XNM_R;
XNTOLD=XNT_R;
STEP=1;
FLAG=0;
while STEP <=1
if FLAG==1
STEP=2;
BETA=BETA+H*BETAD;%对应8个微分方程,也涉及到利用二阶runge-kutta计算微分方程的值
THET=THET+H*THETD;
RT1=RT1+H*VT1;
RT2=RT2+H*VT2;
RM1=RM1+H*VM1;
RM2=RM2+H*VM2;
XNM_R=XNM_R+H*XNM_RD;
XNT_R=XNT_R+H*XNT_RD;
T=T+H;
end
%比例导引公式中需要计算的参数的值
RTM1=RT1-RM1;
RTM2=RT2-RM2;
RTM=sqrt(RTM1*RTM1+RTM2*RTM2);
VTM1=VT1-VM1;
VTM2=VT2-VM2;
VC=-(RTM1*VTM1+RTM2*VTM2)/RTM;
XLAM=atan2(RTM2,RTM1);
XLAMD=(RTM1*VTM2-RTM2*VTM1)/(RTM*RTM);
%导弹进行制导
XNM=XNP*VC*XLAMD;%比例导引公式
XNM_RD=(XNM-XNM_R)/TAU_M;
VM1=VM*cos(THET);
VM2=VM*sin(THET);
THETD=XNM_R/VM;
%目标进行阶跃机动
VT1=-VT*cos(BETA);
VT2=VT*sin(BETA);
XNTLIM=2.5*9.8*2^((30000-RT2)/10000);%假设目标过载与高度有关
XNT=-XNTLIM;
XNT_RD=(XNT-XNT_R)/TAU_T;
BETAD=XNT_R/VT;
FLAG=1;
end
FLAG=0;
%求解下一步长的值,利用二阶runge-kutta递推微分方程的值
BETA=.5*(BETAOLD+BETA+H*BETAD);
THET=.5*(THETOLD+THET+H*THETD);
RT1=.5*(RT1OLD+RT1+H*VT1);
RT2=.5*(RT2OLD+RT2+H*VT2);
RM1=.5*(RM1OLD+RM1+H*VM1);
RM2=.5*(RM2OLD+RM2+H*VM2);
XNM_R=.5*(XNMOLD+XNM_R+H*XNM_RD);
XNT_R=.5*(XNTOLD+XNT_R+H*XNT_RD);
S=S+H;
if S>=.09999
S=0.;
n=n+1;
ArrayT(n)=T;
ArrayRT1(n)=RT1;
ArrayRT2(n)=RT2;
ArrayRM1(n)=RM1;
ArrayRM2(n)=RM2;
ArrayXNCG(n)=XNM/9.8;
ArrayXNTG(n)=XNT/9.8;
ArrayRTM(n)=RTM;
ArrayXLAMD(n)=XLAMD;
ArrayTHET(n)=THET;
end
end
figure
plot(ArrayRT1,ArrayRT2,ArrayRM1,ArrayRM2),grid
title('导弹目标交战轨迹')
xlabel('X轴(m) ')
ylabel('Y轴(m)')