Fixed bugs (initialization of the Kalman filter with the fixed point of the Riccatti equation).
parent
0caaeddb46
commit
3cbd702b3e
|
@ -361,7 +361,7 @@ if (kalman_algo == 2) || (kalman_algo == 4)
|
||||||
else
|
else
|
||||||
if all(all(abs(H-diag(diag(H)))<1e-14))% ie, the covariance matrix is diagonal...
|
if all(all(abs(H-diag(diag(H)))<1e-14))% ie, the covariance matrix is diagonal...
|
||||||
H = diag(H);
|
H = diag(H);
|
||||||
mmm = mm;
|
mmm = mm;
|
||||||
else
|
else
|
||||||
Z = [Z, eye(pp)];
|
Z = [Z, eye(pp)];
|
||||||
T = blkdiag(T,zeros(pp));
|
T = blkdiag(T,zeros(pp));
|
||||||
|
@ -410,7 +410,7 @@ switch DynareOptions.lik_init
|
||||||
% Use standard kalman filter except if the univariate filter is explicitely choosen.
|
% Use standard kalman filter except if the univariate filter is explicitely choosen.
|
||||||
if kalman_algo == 0
|
if kalman_algo == 0
|
||||||
kalman_algo = 3;
|
kalman_algo = 3;
|
||||||
elseif ~((kalman_algo == 3) || (kalman_algo == 4))
|
elseif ~((kalman_algo == 3) || (kalman_algo == 4))
|
||||||
error(['diffuse filter: options_.kalman_algo can only be equal ' ...
|
error(['diffuse filter: options_.kalman_algo can only be equal ' ...
|
||||||
'to 0 (default), 3 or 4'])
|
'to 0 (default), 3 or 4'])
|
||||||
end
|
end
|
||||||
|
@ -475,16 +475,18 @@ switch DynareOptions.lik_init
|
||||||
kalman_algo = 1;
|
kalman_algo = 1;
|
||||||
end
|
end
|
||||||
if isequal(H,0)
|
if isequal(H,0)
|
||||||
[err,Pstar] = kalman_steady_state(transpose(T),R*Q*transpose(R),transpose(build_selection_matrix(Z,np,length(Z))));
|
[err,Pstar] = kalman_steady_state(transpose(T),R*Q*transpose(R),transpose(build_selection_matrix(Z,mm,length(Z))));
|
||||||
else
|
else
|
||||||
[err,Pstar] = kalman_steady_state(transpose(T),R*Q*transpose(R),transpose(build_selection_matrix(Z,np,length(Z))),H);
|
[err,Pstar] = kalman_steady_state(transpose(T),R*Q*transpose(R),transpose(build_selection_matrix(Z,mm,length(Z))),H);
|
||||||
end
|
end
|
||||||
if err
|
if err
|
||||||
disp(['dsge_likelihood:: I am not able to solve the Riccati equation, so I switch to lik_init=1!']);
|
disp(['dsge_likelihood:: I am not able to solve the Riccati equation, so I switch to lik_init=1!']);
|
||||||
DynareOptions.lik_init = 1;
|
DynareOptions.lik_init = 1;
|
||||||
Pstar = lyapunov_symm(T,R*Q*R',DynareOptions.qz_criterium,DynareOptions.lyapunov_complex_threshold);
|
Pstar = lyapunov_symm(T,R*Q*R',DynareOptions.qz_criterium,DynareOptions.lyapunov_complex_threshold);
|
||||||
end
|
end
|
||||||
Pinf = [];
|
Pinf = [];
|
||||||
|
a = zeros(mm,1);
|
||||||
|
Zflag = 0;
|
||||||
otherwise
|
otherwise
|
||||||
error('dsge_likelihood:: Unknown initialization approach for the Kalman filter!')
|
error('dsge_likelihood:: Unknown initialization approach for the Kalman filter!')
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue