Merge branch 'occbin_bug' into 'master'

bug fixes in error traps in PKF update steps

See merge request Dynare/dynare!2063
mr#2067
Stéphane Adjemian 2022-08-02 17:00:51 +00:00
commit 9e79d95cb7
1 changed files with 12 additions and 11 deletions

View File

@ -61,14 +61,10 @@ function [a, a1, P, P1, v, T, R, C, regimes_, error_flag, M_, lik, etahat] = kal
warning off
regimes_(1).regime=false;
regimes_(2).regime=false;
regimes_(3).regime=false;
regimes_(1).regimestart=NaN;
regimes_(2).regimestart=NaN;
regimes_(3).regimestart=NaN;
options_.noprint = true;
R=NaN(size(RR));
C=NaN(size(CC));
T=NaN(size(TT));
lik=Inf;
sto.a=a;
@ -86,6 +82,7 @@ else
base_regime.regime2 = 0;
base_regime.regimestart2 = 1;
end
regimes_ = [base_regime base_regime base_regime];
mm=size(a,1);
%% store info in t=1
@ -116,7 +113,6 @@ else
end
if error_flag
etahat=NaN(size(QQQ,1),1);
T=NaN(size(TT));
return;
end
@ -135,10 +131,10 @@ else
my_order_var = oo_.dr.order_var;
end
options_.occbin.simul=opts_simul;
options_.noprint=1;
[~, out, ss] = occbin.solver(M_,oo_,options_);
if out.error_flag
error_flag = out.error_flag;
etahat=etahat(:,2);
return;
end
@ -226,6 +222,7 @@ if any(myregime) || ~isequal(regimes_(1),regimes0(1))
[~, out, ss] = occbin.solver(M_,oo_,options_);
if out.error_flag
error_flag = out.error_flag;
etahat=etahat(:,2);
return;
end
regimes0=regimes_;
@ -275,6 +272,7 @@ if any(myregime) || ~isequal(regimes_(1),regimes0(1))
[~, out, ss] = occbin.solver(M_,oo_,options_);
if out.error_flag
error_flag = out.error_flag;
etahat=etahat(:,2);
return;
end
end
@ -332,6 +330,7 @@ if ~error_flag && niter>options_.occbin.likelihood.max_number_of_iterations && ~
[~, out, ss] = occbin.solver(M_,oo_,options_);
if out.error_flag
error_flag = out.error_flag;
etahat=etahat(:,2);
return;
end
if isequal(out.regime_history(1),regimes_(1))
@ -343,15 +342,16 @@ if ~error_flag && niter>options_.occbin.likelihood.max_number_of_iterations && ~
end
end
a = out.piecewise(1:2,my_order_var)' - repmat(out.ys(my_order_var),1,2);
if ~error_flag
a = out.piecewise(1:2,my_order_var)' - repmat(out.ys(my_order_var),1,2);
regimes_=regimes_(1:3);
end
T = ss.T(my_order_var,my_order_var,1:2);
R = ss.R(my_order_var,:,1:2);
C = ss.C(my_order_var,1:2);
QQ = R(:,:,2)*QQQ(:,:,3)*transpose(R(:,:,2));
P(:,:,1) = P(:,:,2);
P(:,:,2) = T(:,:,2)*P(:,:,1)*transpose(T(:,:,2))+QQ;
% P = cat(3,P(:,:,2),P2);
regimes_=regimes_(1:3);
etahat=etahat(:,2);
warning_config;
@ -368,6 +368,7 @@ if nargin<18
IF_likelihood=0;
end
t=2;
lik=0;
%% forward pass
% given updated variables and covarnace in t=1, we make the step to t=2
T = TT(:,:,t);