2016-10-02 09:26:30 +02:00
function options_= select_qz_criterium_value ( options_)
% function options_=select_qz_criterium_value(options_)
% set the value of options_.qz_criterium depending on the Kalman filter used
%
% INPUTS
% options_: Dynare options structure
%
% OUTPUTS
% options_: Dynare options structure
%
% SPECIAL REQUIREMENTS
% none
2017-05-16 14:11:15 +02:00
% Copyright (C) 2016-2017 Dynare Team
2016-10-02 09:26:30 +02:00
%
% This file is part of Dynare.
%
% Dynare is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% Dynare is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
% If options_.lik_init == 1
% set by default options_.qz_criterium to 1-1e-6
% and check options_.qz_criterium < 1-eps if options_.lik_init == 1
% Else
% set by default options_.qz_criterium to 1+1e-6
stack = dbstack ;
2017-04-02 18:37:45 +02:00
if options_ . particle . status
% Non linear filter
if isequal ( options_ . particle . initialization , 3 )
if isempty ( options_ . qz_criterium )
options_ . qz_criterium = 1 + 1e-6 ;
else
if options_ . qz_criterium < = 1
fprintf ( ' \n%s:: You set nonlinear_filter_initialization equal to 3, it is assumed that you try to estimate a non stationary model. Resetting it to 1+1e-6.\n' , stack ( 2 ) . file )
options_ . qz_criterium = 1 + 1e-6 ;
end
end
2017-04-02 20:32:15 +02:00
else
if isempty ( options_ . qz_criterium )
options_ . qz_criterium = 1 - 1e-6 ;
end
2016-10-02 09:26:30 +02:00
end
else
2017-04-02 18:37:45 +02:00
% Linear filter
if isequal ( options_ . lik_init , 1 )
if isempty ( options_ . qz_criterium )
options_ . qz_criterium = 1 - 1e-6 ;
elseif options_ . qz_criterium > 1 - eps
error ( [ stack ( 2 ) . file ' : option qz_criterium is too large for estimating/smoothing ' ...
' a stationary model. If your model contains unit roots, use ' ...
' option diffuse_filter' ] )
end
2016-10-02 09:26:30 +02:00
else
2017-04-02 18:37:45 +02:00
if isempty ( options_ . qz_criterium )
2016-10-02 09:26:30 +02:00
options_ . qz_criterium = 1 + 1e-6 ;
2017-04-02 18:37:45 +02:00
else
if options_ . qz_criterium < = 1
fprintf ( ' \n%s:: diffuse filter is incompatible with a qz_criterium<=1. Resetting it to 1+1e-6.\n' , stack ( 2 ) . file )
options_ . qz_criterium = 1 + 1e-6 ;
end
2016-10-02 09:26:30 +02:00
end
end
2017-04-02 18:37:45 +02:00
end