Merge branch 'occbin_bug' into 'master'
bug fixes in error traps in PKF update steps See merge request Dynare/dynare!2063mr#2067
commit
9e79d95cb7
|
@ -61,14 +61,10 @@ function [a, a1, P, P1, v, T, R, C, regimes_, error_flag, M_, lik, etahat] = kal
|
||||||
|
|
||||||
warning off
|
warning off
|
||||||
|
|
||||||
regimes_(1).regime=false;
|
options_.noprint = true;
|
||||||
regimes_(2).regime=false;
|
|
||||||
regimes_(3).regime=false;
|
|
||||||
regimes_(1).regimestart=NaN;
|
|
||||||
regimes_(2).regimestart=NaN;
|
|
||||||
regimes_(3).regimestart=NaN;
|
|
||||||
R=NaN(size(RR));
|
R=NaN(size(RR));
|
||||||
C=NaN(size(CC));
|
C=NaN(size(CC));
|
||||||
|
T=NaN(size(TT));
|
||||||
lik=Inf;
|
lik=Inf;
|
||||||
|
|
||||||
sto.a=a;
|
sto.a=a;
|
||||||
|
@ -86,6 +82,7 @@ else
|
||||||
base_regime.regime2 = 0;
|
base_regime.regime2 = 0;
|
||||||
base_regime.regimestart2 = 1;
|
base_regime.regimestart2 = 1;
|
||||||
end
|
end
|
||||||
|
regimes_ = [base_regime base_regime base_regime];
|
||||||
|
|
||||||
mm=size(a,1);
|
mm=size(a,1);
|
||||||
%% store info in t=1
|
%% store info in t=1
|
||||||
|
@ -116,7 +113,6 @@ else
|
||||||
end
|
end
|
||||||
if error_flag
|
if error_flag
|
||||||
etahat=NaN(size(QQQ,1),1);
|
etahat=NaN(size(QQQ,1),1);
|
||||||
T=NaN(size(TT));
|
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -135,10 +131,10 @@ else
|
||||||
my_order_var = oo_.dr.order_var;
|
my_order_var = oo_.dr.order_var;
|
||||||
end
|
end
|
||||||
options_.occbin.simul=opts_simul;
|
options_.occbin.simul=opts_simul;
|
||||||
options_.noprint=1;
|
|
||||||
[~, out, ss] = occbin.solver(M_,oo_,options_);
|
[~, out, ss] = occbin.solver(M_,oo_,options_);
|
||||||
if out.error_flag
|
if out.error_flag
|
||||||
error_flag = out.error_flag;
|
error_flag = out.error_flag;
|
||||||
|
etahat=etahat(:,2);
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -226,6 +222,7 @@ if any(myregime) || ~isequal(regimes_(1),regimes0(1))
|
||||||
[~, out, ss] = occbin.solver(M_,oo_,options_);
|
[~, out, ss] = occbin.solver(M_,oo_,options_);
|
||||||
if out.error_flag
|
if out.error_flag
|
||||||
error_flag = out.error_flag;
|
error_flag = out.error_flag;
|
||||||
|
etahat=etahat(:,2);
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
regimes0=regimes_;
|
regimes0=regimes_;
|
||||||
|
@ -275,6 +272,7 @@ if any(myregime) || ~isequal(regimes_(1),regimes0(1))
|
||||||
[~, out, ss] = occbin.solver(M_,oo_,options_);
|
[~, out, ss] = occbin.solver(M_,oo_,options_);
|
||||||
if out.error_flag
|
if out.error_flag
|
||||||
error_flag = out.error_flag;
|
error_flag = out.error_flag;
|
||||||
|
etahat=etahat(:,2);
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -332,6 +330,7 @@ if ~error_flag && niter>options_.occbin.likelihood.max_number_of_iterations && ~
|
||||||
[~, out, ss] = occbin.solver(M_,oo_,options_);
|
[~, out, ss] = occbin.solver(M_,oo_,options_);
|
||||||
if out.error_flag
|
if out.error_flag
|
||||||
error_flag = out.error_flag;
|
error_flag = out.error_flag;
|
||||||
|
etahat=etahat(:,2);
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
if isequal(out.regime_history(1),regimes_(1))
|
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
|
||||||
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);
|
T = ss.T(my_order_var,my_order_var,1:2);
|
||||||
R = ss.R(my_order_var,:,1:2);
|
R = ss.R(my_order_var,:,1:2);
|
||||||
C = ss.C(my_order_var,1:2);
|
C = ss.C(my_order_var,1:2);
|
||||||
QQ = R(:,:,2)*QQQ(:,:,3)*transpose(R(:,:,2));
|
QQ = R(:,:,2)*QQQ(:,:,3)*transpose(R(:,:,2));
|
||||||
P(:,:,1) = P(:,:,2);
|
P(:,:,1) = P(:,:,2);
|
||||||
P(:,:,2) = T(:,:,2)*P(:,:,1)*transpose(T(:,:,2))+QQ;
|
P(:,:,2) = T(:,:,2)*P(:,:,1)*transpose(T(:,:,2))+QQ;
|
||||||
% P = cat(3,P(:,:,2),P2);
|
|
||||||
regimes_=regimes_(1:3);
|
|
||||||
etahat=etahat(:,2);
|
etahat=etahat(:,2);
|
||||||
|
|
||||||
warning_config;
|
warning_config;
|
||||||
|
@ -368,6 +368,7 @@ if nargin<18
|
||||||
IF_likelihood=0;
|
IF_likelihood=0;
|
||||||
end
|
end
|
||||||
t=2;
|
t=2;
|
||||||
|
lik=0;
|
||||||
%% forward pass
|
%% forward pass
|
||||||
% given updated variables and covarnace in t=1, we make the step to t=2
|
% given updated variables and covarnace in t=1, we make the step to t=2
|
||||||
T = TT(:,:,t);
|
T = TT(:,:,t);
|
||||||
|
|
Loading…
Reference in New Issue