ssSetOptions( S, 0);
}
//=====================================================
//Установка временных харастерисик блока S-function
static void mdlInitializeSampleTimes(SimStruct *S)
{
ssSetSampleTime(S, 0, DISCRETE_STEP);
ssSetOffsetTime(S, 0, 0.0);
}
//=====================================================
//Функция, которая выполняется при запуске имитационного моделирования
static void mdlStart(SimStruct *S)
{ StartTime=clock();
}
//=====================================================
//Вычисление выхода блока S-function
static void mdlOutputs(SimStruct *S, int_T tid)
{ const mxArray *para = (const mxArray *) SYNCHR_R_PARAM(S);
double *N= mxGetPr(para);
clock_t NowTime;
DWORD diff_M_PC;
real_T InTime=(real_T)ssGetT(S); //Имитационное время модели
long Tr_Hold = 1000*DISCRETE_STEP/N[0];
NowTime=clock();
diff_M_PC=NowTime-StartTime;
if ((diff_M_PC>=0) && (diff_M_PC<Tr_Hold))
Sleep(Tr_Hold-diff_M_PC);
StartTime=clock();
}
//=====================================================
static void mdlTerminate(SimStruct *S)
{}
//=====================================================
#ifdef MATLAB_MEX_FILE
#include "simulink.c"
#else
#include "cg_sfun.h"
#endif
30.1 Вычисление координат прямоугольников для прямолинейной траектории посадки
z=0:10:400
y=-0.049*z+50
30.2 Вычисление координат прямоугольников для посадки с радиусом разворота 20000м
fi=0:0.005:pi/2;
x=2000*cos(fi);
y=31.2102*(fi)+1
z=sqrt(2000.^2-x.^2)-2000
x=x*(-1)+2000
fi=57.3*(fi)
30.3 Вычисление координат прямоугольников для посадки с радиусом разворота 20000м
fi=0:0.005:pi/2;
z=1000*cos(fi);
y=-0.049*z+50
x=-sqrt(1000.^2-z.^2)+1000
z=z*(1)-1000
31.1 Программа расчета дисперсии ошибки для прямолинейной траектории захода на посадку.
for i=1:5
link='C:\fly\';
link_2='Fly_line_200_75';
object='\traekt_';
type='_p3';
object_ip=['1' '2' '3' '4' '5'];
load([link link_2 object object_ip(i) ]);
x=0;
y=0.049*koord(4,:)+50;
z=koord(4,:);
l=koord(4,:)+1000;
otkly=koord(3,:)-(y+0.375)
otklx=koord(2,:)-x
otklz=koord(4,:)-(z)
otkleps=sqrt(otklx.^2+otklz.^2)
l_massiv=0:0.5:200;
otkl_massiv(:,:,i)=[l_massiv;interp1(l,otkleps,l_massiv);interp1(l,otkly,l_massiv)];
end
[n m r]=size(otkl_massiv);
for i=1:n
for j=1:m
mat_oszid(i,j)=sum(abs(otkl_massiv(i,j,:)))/r;
disp(i,j)=(1/4).*sum((otkl_massiv(i,j,:)-mat_oszid(i,j)).^2);
end
end
figure(1)
subplot(4,1,1)
plot(mat_oszid(1,:),mat_oszid(2,:),'b'),YLABEL('Мат. ожид. бок. ошибки '),hold on, grid on
subplot(4,1,2)
plot(mat_oszid(1,:),mat_oszid(3,:),'b'),YLABEL('Мат. ожид. ошибки по H'),hold on, grid on
subplot(4,1,3)
plot(mat_oszid(1,:),disp(2,:),'b'),YLABEL('Дисп. бок. ошибки'),hold on, grid on
subplot(4,1,4)
plot(mat_oszid(1,:),disp(3,:),'b'),YLABEL('Дисп. ошибки по H'),hold on, grid on
mat_eps_max=max(mat_oszid(2,1:240));
mat_y_max=max(mat_oszid(3,1:240));
mat_mid_eps=sum(mat_oszid(2,1:240))/240;
mat_mid_y=sum(mat_oszid(3,1:400))/240;
disp_eps_max=max(disp(2,1:240));
disp_y_max=max(disp(3,1:240));
disp_mid_eps=sum(disp(2,1:240))/240;;
disp_mid_y=sum(disp(3,1:240))/240;
save([link link_2 '.mat'],'mat_oszid','disp','mat_eps_max','mat_y_max','mat_mid_eps',...
'mat_mid_y','disp_eps_max','disp_y_max','disp_mid_eps','disp_mid_y');
31.2 Программа расчета дисперсии ошибки для захода на посадкус радиусом разворота 20000 м
for i=1:5
link='C:\fly\';
link_2='Fly_curve_20_200_75';
object='\traekt_';
type='_p3';
object_ip=['1' '2' '3' '4' '5'];
load([link link_2 object object_ip(i) type]);
Rtek=sqrt((koord(2,:)-2000).^2+(koord(4,:)+2000).^2); %x^2+z^2=R*^2
Ltek=-2000-koord(4,:);
fi=-asin(Ltek./Rtek);
x=2000*cos(fi);
y=31.2102*(fi)+1;
z=sqrt(2000.^2-x.^2)-2000;
x=x*(-1)+2000;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.