From b9741548b0da873c5ff3c81c92d2f9f30129f63f Mon Sep 17 00:00:00 2001 From: Marco Ratto <marco.ratto@jrc.ec.europa.eu> Date: Thu, 16 Nov 2017 17:19:39 +0100 Subject: [PATCH] As we do for the smoother, check the rank of Pinf only for the observables (i.e. using Z*Pinf*Z') --- matlab/kalman/likelihood/kalman_filter_d.m | 2 +- matlab/kalman/likelihood/univariate_kalman_filter_d.m | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/matlab/kalman/likelihood/kalman_filter_d.m b/matlab/kalman/likelihood/kalman_filter_d.m index 79b3607fb..48c0d91c4 100644 --- a/matlab/kalman/likelihood/kalman_filter_d.m +++ b/matlab/kalman/likelihood/kalman_filter_d.m @@ -65,7 +65,7 @@ dLIK = Inf; % Default value of the log likelihood. oldK = Inf; s = 0; -while rank(Pinf,diffuse_kalman_tol) && (t<=last) +while rank(Z*Pinf*Z',diffuse_kalman_tol) && (t<=last) s = t-start+1; v = Y(:,t)-Z*a; %get prediction error v^(0) in (5.13) DK (2012) Finf = Z*Pinf*Z'; % (5.7) in DK (2012) diff --git a/matlab/kalman/likelihood/univariate_kalman_filter_d.m b/matlab/kalman/likelihood/univariate_kalman_filter_d.m index ce78d2421..6abe6b9a7 100644 --- a/matlab/kalman/likelihood/univariate_kalman_filter_d.m +++ b/matlab/kalman/likelihood/univariate_kalman_filter_d.m @@ -154,7 +154,7 @@ while newRank && (t<=last) end end if newRank - oldRank = rank(Pinf,diffuse_kalman_tol); + oldRank = rank(Z*Pinf*Z',diffuse_kalman_tol); else oldRank = 0; end @@ -162,7 +162,7 @@ while newRank && (t<=last) Pstar = T*Pstar*T'+QQ; Pinf = T*Pinf*T'; if newRank - newRank = rank(Pinf,diffuse_kalman_tol); + newRank = rank(Z*Pinf*Z',diffuse_kalman_tol); end if oldRank ~= newRank disp('univariate_diffuse_kalman_filter:: T does influence the rank of Pinf!') -- GitLab