JackXavier Deleted File  almost 8 years ago

Commit id: 71edc7c21b0e20fda75e44be1b56f68754669c9f

deletions | additions      

         

\usepackage[usenames,dvipsnames]{color}  \usepackage[numbered,framed]{mcode}  \section{Листинг программы на matlab}  \begin{lstlisting}  % x(t) = u*t + a*x(t-1) + v_t   % y(t) = b*x(t-1) + e_t  %  % количество шагов  Quantity = 20;  % инициализируем массивы  k = 1:Quantity;  % координата  x = k;  % предсказанна¤ координата  x_predic = k;  % оценочна¤ координата  x_estim = k;  % наблюдаема¤ координата  y = k;  % предсказанное наблюдение  y_predic = k;  % дисперси¤ ошибки в предсказании X в  Sn = k;  % усиление калмана  KalmanGain = k;  % оценка дисперсии  EstimVar = k;  % предсказанна¤ дисперси¤  PredicVar = k;  %константы  % коэффииент координаты  a = 0.26;  % коэффициент наблюдени¤  b = 0.72;  % коэффициент при упрал¤ющей функции  ControlF = 0.8;  % дисперси¤ ошибки модели  disp_ErrorModel = 0.2;  % дисперис¤ ошибки сенсора  disp_ErrorSensor = 5;  % ошибка модели  ErrorModel = normrnd(0,disp_ErrorModel);   % ошибка сенсора  ErrorSensor = normcdf(0,disp_ErrorSensor);   % заполн¤ем координаты  x(1) = 0;  y(1) = b*x(1) + ErrorSensor;  for time = 1 : (Quantity-1)  ErrorModel = normrnd(0,disp_ErrorModel);  ErrorSensor = normrnd(0,disp_ErrorSensor);  x(time+1) = a*x(time) + ControlF*time + ErrorModel;  y(time+1) = b*x(time+1) + ErrorSensor;  end;  % в момент t = 1;  Sn(1) = 1;  PredicVar(1) = 1;  x_predic(1) = 0;  y_predic(1) = 0;  % симул¤ци¤ фильтра  for time = 1 : (Quantity-1)  disp(time);  KalmanGain(time) = (b*Sn(time))/((b*b*Sn(time)) + disp_ErrorModel);  disp(KalmanGain(time));  EstimVar(time) = (1 - b*KalmanGain(time))*Sn(time);  disp(EstimVar(time));  PredicVar(time+1) = EstimVar(time) * a * a + disp_ErrorSensor;  disp(PredicVar(time));  Sn(time+1) = a*a*EstimVar(time) + disp_ErrorSensor;   end;  % заполн¤ем координаты  for time = 1 : (Quantity-1)  disp(time);  x_estim(time) = x_predic(time) + KalmanGain(time)*(y(time)-y_predic(time));  disp( x_estim(time));  x_predic(time+1) = (ControlF*time) + a*x_estim(time);  disp( x_predic(time));  y_predic(time+1) = b*x_predic(time+1);  end;  set(0,'DefaultAxesFontSize',14,'DefaultAxesFontName','Times New Roman');  set(0,'DefaultTextFontSize',14,'DefaultTextFontName','Times New Roman');   figure('Units', 'normalized', 'OuterPosition', [0 0 1 1]);  title('ќдномерный фильтр  алмана');  hold on;  plot(k,x,'r','Color',[.7 .1 .1],'LineWidth',2);  plot(k,y,'--','Color',[.1 .7 .1],'LineWidth',2);  plot(k,x_predic,'r','Color',[.1 .1 .7],'LineWidth',2);  plot(k,x_estim,':b','Color',[.7 .1 .7],'LineWidth',2);  legend('координата','наблюдение','предсказание','оценка', 4);  hold off;  \end{lstlisting}