this is for holding javascript data
JackXavier added verb_x_t_u_t__.tex
almost 8 years ago
Commit id: 575b214e92c57eceb1b5104c52c550876efed2a5
deletions | additions
diff --git a/verb_x_t_u_t__.tex b/verb_x_t_u_t__.tex
new file mode 100644
index 0000000..1e2c0b9
--- /dev/null
+++ b/verb_x_t_u_t__.tex
...
\verb|% 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;|