c21l1.m

来自「这是本战略战术导弹制导的书中的matlab程序,比书中的 forchan程序简单」· M 代码 · 共 103 行

M
103
字号
	XNP=3.;
	TAU=1.;
	XNT=193.2;
   W=3.;
   n=0;
   %for RT1IC=500:500:40000
   %Number of runs reduced by factor of 4 to get acceptable running times
   for RT1IC=2000:2000:40000
      VM=3000.;
      VT=1000.;
      RM1=0.;
      RM2=0.;
      RT1=RT1IC;
      RT2=0.;      
      BETA=0.;
      VT1=-VT*cos(BETA);
      VT2=VT*sin(BETA);
      T=0.;
      S=0.;
      RTM1=RT1-RM1;
      RTM2=RT2-RM2;
      RTM=sqrt(RTM1^2+RTM2^2);
      XLAM=atan2(RTM2,RTM1);
      VM1=VM;
      VM2=0.;
      VTM1=VT1-VM1;
      VTM2=VT2-VM2;
      VC=-(RTM1*VTM1+RTM2*VTM2)/RTM;
      TGO=RTM/VC;
      XLAMH=0.;
      H=.01;
      while VC>0.
         if(RTM<1000.)
            H=.0005;
         end
            BETAOLD=BETA;
            RT1OLD=RT1;
            RT2OLD=RT2;
            RM1OLD=RM1;
            RM2OLD=RM2;
            VM1OLD=VM1;
            VM2OLD=VM2;
            XLAMHOLD=XLAMH;
            STEP=1;
            FLAG=0;
            while STEP<=1
               if FLAG==1
                  STEP=2;
                  BETA=BETA+H*BETAD;
                  RT1=RT1+H*VT1;
                  RT2=RT2+H*VT2;
                  RM1=RM1+H*VM1;
                  RM2=RM2+H*VM2;
                  VM1=VM1+H*AM1;
                  VM2=VM2+H*AM2;
                  XLAMH=XLAMH+H*XLAMHD;
                  T=T+H;
               end
               VT1=-VT*cos(BETA);
               VT2=VT*sin(BETA);
               BETAD=XNT*sin(W*T)/VT;
               RTM1=RT1-RM1;
               RTM2=RT2-RM2;
               RTM=sqrt(RTM1^2+RTM2^2);
               VTM1=VT1-VM1;
               VTM2=VT2-VM2;
               VC=-(RTM1*VTM1+RTM2*VTM2)/RTM;
               XLAM=atan2(RTM2,RTM1);
               XLAMHD=(XLAM-XLAMH)/TAU;
               XNC=XNP*VC*XLAMHD;
               AM1=-XNC*sin(XLAM);
               AM2=XNC*cos(XLAM);
               FLAG=1;
      end
      FLAG=0;
      BETA=.5*(BETAOLD+BETA+H*BETAD);
      RT1=.5*(RT1OLD+RT1+H*VT1);
      RT2=.5*(RT2OLD+RT2+H*VT2);
      RM1=.5*(RM1OLD+RM1+H*VM1);
      RM2=.5*(RM2OLD+RM2+H*VM2);
      VM1=.5*(VM1OLD+VM1+H*AM1);
      VM2=.5*(VM2OLD+VM2+H*AM2);
      XLAMH=.5*(XLAMHOLD+XLAMH+H*XLAMHD);
   end
	if RTM2>0.
		RTMP=RTM;
	else
		RTMP=-RTM;
   end 
   n=n+1;
   ArrayT(n)=T;
   ArrayRTMP(n)=RTMP;
end
figure
plot(ArrayT,ArrayRTMP),grid
xlabel('Flight Time (Sec)')
ylabel('Miss (Ft)')
clc
output=[ArrayT',ArrayRTMP'];
save datfil.txt output  -ascii
disp 'simulation finished'

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?