From bf65cb4f10ae3d123d751adfce6300c2d1ee1f30 Mon Sep 17 00:00:00 2001 From: michel Date: Wed, 3 Dec 2008 07:30:26 +0000 Subject: [PATCH] various bug fixes for filter and smoother with missing observations git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@2282 ac1d8469-bf42-47a9-8791-bf33cf982152 --- matlab/DiffuseKalmanSmoother3.m | 1 + matlab/DiffuseKalmanSmoother3_Z.m | 1 + ...ssing_observations_diffuse_kalman_filter.m | 2 +- matlab/missing_DiffuseKalmanSmoother3.m | 55 ++++++++-------- matlab/missing_DiffuseKalmanSmoother3_Z.m | 65 ++++++++++--------- 5 files changed, 64 insertions(+), 60 deletions(-) diff --git a/matlab/DiffuseKalmanSmoother3.m b/matlab/DiffuseKalmanSmoother3.m index 2889c372e..f3b0bc57d 100644 --- a/matlab/DiffuseKalmanSmoother3.m +++ b/matlab/DiffuseKalmanSmoother3.m @@ -74,6 +74,7 @@ end Fstar = zeros(pp,smpl_diff); Finf = zeros(pp,smpl_diff); +Fi = zeros(pp,smpl_diff); Ki = zeros(mm,pp,smpl); Li = zeros(mm,mm,pp,smpl); Linf = zeros(mm,mm,pp,smpl_diff); diff --git a/matlab/DiffuseKalmanSmoother3_Z.m b/matlab/DiffuseKalmanSmoother3_Z.m index c2f58b3bd..216f72636 100644 --- a/matlab/DiffuseKalmanSmoother3_Z.m +++ b/matlab/DiffuseKalmanSmoother3_Z.m @@ -83,6 +83,7 @@ end Fstar = zeros(pp,smpl_diff); Finf = zeros(pp,smpl_diff); +Fi = zeros(pp,smpl_diff); Ki = zeros(mm,pp,smpl); Li = zeros(mm,mm,pp,smpl); Linf = zeros(mm,mm,pp,smpl_diff); diff --git a/matlab/kalman/likelihood/missing_observations_diffuse_kalman_filter.m b/matlab/kalman/likelihood/missing_observations_diffuse_kalman_filter.m index 15108fdc2..a3d74c639 100644 --- a/matlab/kalman/likelihood/missing_observations_diffuse_kalman_filter.m +++ b/matlab/kalman/likelihood/missing_observations_diffuse_kalman_filter.m @@ -53,7 +53,7 @@ function [LIK, lik] = missing_observations_diffuse_kalman_filter(T,R,Q,H,Pinf,Ps oldK = 0; lik = zeros(smpl+1,1); LIK = Inf; - lik(smpl+1) = number_of_observations*pp*log(2*pi); + lik(smpl+1) = number_of_observations*log(2*pi); notsteady = 1; reste = 0; diff --git a/matlab/missing_DiffuseKalmanSmoother3.m b/matlab/missing_DiffuseKalmanSmoother3.m index 13efff232..140992e3b 100644 --- a/matlab/missing_DiffuseKalmanSmoother3.m +++ b/matlab/missing_DiffuseKalmanSmoother3.m @@ -75,6 +75,7 @@ end Fstar = zeros(pp,smpl_diff); Finf = zeros(pp,smpl_diff); +Fi = zeros(pp,smpl_diff); Ki = zeros(mm,pp,smpl); Li = zeros(mm,mm,pp,smpl); Linf = zeros(mm,mm,pp,smpl_diff); @@ -211,34 +212,34 @@ while notsteady & t crit - a(:,t) = a(:,t) + Ki_s(:,i)*v(i,t)/Fi_s(i); - end - end - a1(:,t+1) = T*a(:,t); - for jnk=1:nk, - aK(jnk,:,t+jnk) = T^jnk*a(:,t); - end +% notsteady = ~(max(max(abs(P(:,:,t+1)-P(:,:,t)))) crit +% $$$ a(:,t) = a(:,t) + Ki_s(:,i)*v(i,t)/Fi_s(i); +% $$$ end +% $$$ end +% $$$ a1(:,t+1) = T*a(:,t); +% $$$ for jnk=1:nk, +% $$$ aK(jnk,:,t+jnk) = T^jnk*a(:,t); +% $$$ end +% $$$ end ri=zeros(mm,1); t = smpl+1; while t>d+1 diff --git a/matlab/missing_DiffuseKalmanSmoother3_Z.m b/matlab/missing_DiffuseKalmanSmoother3_Z.m index e7c74a7a4..c2da9ec43 100644 --- a/matlab/missing_DiffuseKalmanSmoother3_Z.m +++ b/matlab/missing_DiffuseKalmanSmoother3_Z.m @@ -84,6 +84,7 @@ end Fstar = zeros(pp,smpl_diff); Finf = zeros(pp,smpl_diff); +Fi = zeros(pp,smpl); Ki = zeros(mm,pp,smpl); Li = zeros(mm,mm,pp,smpl); Linf = zeros(mm,mm,pp,smpl_diff); @@ -214,39 +215,39 @@ while notsteady & t crit - a(:,t) = a(:,t) + Ki_s(:,i)*v(i,t)/Fi_s(i); - end - end - a1(:,t+1) = T*a(:,t); - Pf = P(:,:,t); - for jnk=1:nk, - Pf = T*Pf*T' + QQ; - aK(jnk,:,t+jnk) = T^jnk*a(:,t); - PK(jnk,:,:,t+jnk) = Pf; - end +% notsteady = ~(max(max(abs(P(:,:,t+1)-P(:,:,t)))) crit +% $$$ a(:,t) = a(:,t) + Ki_s(:,i)*v(i,t)/Fi_s(i); +% $$$ end +% $$$ end +% $$$ a1(:,t+1) = T*a(:,t); +% $$$ Pf = P(:,:,t); +% $$$ for jnk=1:nk, +% $$$ Pf = T*Pf*T' + QQ; +% $$$ aK(jnk,:,t+jnk) = T^jnk*a(:,t); +% $$$ PK(jnk,:,:,t+jnk) = Pf; +% $$$ end +% $$$ end ri=zeros(mm,1); t = smpl+1; while t > d+1