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