From 79959aa58754ac2d3e28e7da9828c91cee65176c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Fri, 15 Dec 2023 15:29:25 +0100 Subject: [PATCH] Remove duplicate branches in if/then/else statements Detected by MATLAB Code Analyzer app. --- matlab/kalman/likelihood/kalman_filter.m | 11 ++++------- matlab/kalman/likelihood/kalman_filter_d.m | 10 +++------- matlab/kalman/likelihood/kalman_filter_fast.m | 10 +++------- .../likelihood/missing_observations_kalman_filter.m | 10 +++------- .../missing_observations_kalman_filter_d.m | 10 +++------- matlab/parallel/masterParallel.m | 12 ++---------- 6 files changed, 18 insertions(+), 45 deletions(-) diff --git a/matlab/kalman/likelihood/kalman_filter.m b/matlab/kalman/likelihood/kalman_filter.m index 73dc490cbc..b85d3edada 100644 --- a/matlab/kalman/likelihood/kalman_filter.m +++ b/matlab/kalman/likelihood/kalman_filter.m @@ -194,13 +194,10 @@ while notsteady && t<=last end end if badly_conditioned_F - if ~all(abs(F(:))<kalman_tol) - % Use univariate filter (will remove observations with zero variance prediction error) - return - else - % Pathological case, discard draw. - return - end + % if ~all(abs(F(:))<kalman_tol), then use univariate filter (will remove + % observations with zero variance prediction error), otherwise this is a + % pathological case and the draw is discarded + return else F_singular = false; if rescale_prediction_error_covariance diff --git a/matlab/kalman/likelihood/kalman_filter_d.m b/matlab/kalman/likelihood/kalman_filter_d.m index c00efe6628..8c0b850aca 100644 --- a/matlab/kalman/likelihood/kalman_filter_d.m +++ b/matlab/kalman/likelihood/kalman_filter_d.m @@ -87,13 +87,9 @@ while rank(Z*Pinf*Z',diffuse_kalman_tol) && (t<=last) else %rank of F_{\infty,t} is 0 Fstar = Z*Pstar*Z' + H; % (5.7) in DK (2012) if rcond(Fstar) < kalman_tol %F_{*} is singular - if ~all(abs(Fstar(:))<kalman_tol) - % The univariate diffuse kalman filter should be used. - return - else %rank 0 - %pathological case, discard draw - return - end + % if ~all(abs(Fstar(:))<kalman_tol), then use univariate diffuse filter, + % otherwise this is a pathological case and the draw is discarded + return else iFstar = inv(Fstar); dFstar = det(Fstar); diff --git a/matlab/kalman/likelihood/kalman_filter_fast.m b/matlab/kalman/likelihood/kalman_filter_fast.m index 2e7472b747..e7815f52ee 100644 --- a/matlab/kalman/likelihood/kalman_filter_fast.m +++ b/matlab/kalman/likelihood/kalman_filter_fast.m @@ -151,13 +151,9 @@ while notsteady && t<=last v = Y(:,t)-a(Z); end if rcond(F) < kalman_tol - if ~all(abs(F(:))<kalman_tol) - % The univariate diffuse kalman filter should be used. - return - else - %pathological case, discard draw - return - end + % if ~all(abs(F(:))<kalman_tol), then use univariate diffuse filter, otherwise + % this is a pathological case and the draw is discarded + return else F_singular = 0; dF = det(F); diff --git a/matlab/kalman/likelihood/missing_observations_kalman_filter.m b/matlab/kalman/likelihood/missing_observations_kalman_filter.m index 4ad63011b8..bf4407e617 100644 --- a/matlab/kalman/likelihood/missing_observations_kalman_filter.m +++ b/matlab/kalman/likelihood/missing_observations_kalman_filter.m @@ -191,13 +191,9 @@ while notsteady && t<=last end end if badly_conditioned_F && (~occbin_.status || (occbin_.status && t<first_period_occbin_update)) - if ~all(abs(F(:))<kalman_tol) - % Use univariate filter. - return - else - % Pathological case, discard draw - return - end + % if ~all(abs(F(:))<kalman_tol), then use univariate filter, otherwise this is a + % pathological case and the draw is discarded + return else F_singular = false; end diff --git a/matlab/kalman/likelihood/missing_observations_kalman_filter_d.m b/matlab/kalman/likelihood/missing_observations_kalman_filter_d.m index bdc64985a2..8754eaf63e 100644 --- a/matlab/kalman/likelihood/missing_observations_kalman_filter_d.m +++ b/matlab/kalman/likelihood/missing_observations_kalman_filter_d.m @@ -105,13 +105,9 @@ while rank(Pinf,diffuse_kalman_tol) && (t<=last) else %rank of F_{\infty,t} is 0 Fstar = ZZ*Pstar*ZZ' + H(d_index,d_index); % (5.7) in DK (2012) if rcond(Fstar) < kalman_tol %F_{*} is singular - if ~all(abs(Fstar(:))<kalman_tol) - % The univariate diffuse kalman filter should be used. - return - else %rank 0 - %pathological case, discard draw - return - end + % if ~all(abs(Fstar(:))<kalman_tol), then use univariate diffuse filter, + % otherwise this is a pathological case and the draw is discarded + return else iFstar = inv(Fstar); dFstar = det(Fstar); diff --git a/matlab/parallel/masterParallel.m b/matlab/parallel/masterParallel.m index e9a7f8070f..3110a4a61e 100644 --- a/matlab/parallel/masterParallel.m +++ b/matlab/parallel/masterParallel.m @@ -710,11 +710,7 @@ if parallel_recover ==0 pcerdone(j) = prtfrc; idCPU(j) = njob; if isoctave || options_.console_mode - if (~ispc || strcmpi('unix',Parallel(indPC).OperatingSystem)) - statusString = [statusString, int2str(j), ' %3.f%% done! ']; - else - statusString = [statusString, int2str(j), ' %3.f%% done! ']; - end + statusString = [statusString, int2str(j), ' %3.f%% done! ']; else status_String{j} = waitbarString; status_Title{j} = waitbarTitle; @@ -722,11 +718,7 @@ if parallel_recover ==0 catch % ME % To define! if isoctave || options_.console_mode - if (~ispc || strcmpi('unix',Parallel(indPC).OperatingSystem)) - statusString = [statusString, int2str(j), ' %3.f%% done! ']; - else - statusString = [statusString, int2str(j), ' %3.f%% done! ']; - end + statusString = [statusString, int2str(j), ' %3.f%% done! ']; end end end -- GitLab