2012-06-07 14:15:59 +02:00
function M = set_all_parameters ( xparam1,estim_params,M)
2009-12-16 18:17:34 +01:00
2012-06-07 14:15:59 +02:00
%@info:
%! @deftypefn {Function File} {@var{M} =} dynSeries (@var{xparams1},@var{estim_params},@var{M})
%! @anchor{set_all_parameters}
%! @sp 1
%! Update parameter values (deep parameters and covariance matrices).
%! @sp 2
%! @strong{Inputs}
%! @sp 1
%! @table @ @var
%! @item xparam1
%! N*1 vector of doubles, the values of the N estimated parameters.
%! @item estim_params
%! Dynare structure describing the estimated parameters.
%! @item M
%! Dynare structure describing the model.
%! @end table
%! @sp 1
%! @strong{Outputs}
%! @sp 1
%! @table @ @var
%! @item M
%! Dynare structure describing the model, with updated parameters and covariances matrices.
%! @end table
%! @sp 2
%! @strong{This function is called by:}
%! @sp 1
%! @ref{DsgeSmoother}, @ref{dynare_estimation_1}, @ref{@@gsa/filt_mc_}, @ref{identification_analysis}, @ref{PosteriorFilterSmootherAndForecast}, @ref{prior_posterior_statistics_core}, @ref{prior_sampler}
%! @sp 2
%! @strong{This function calls:}
%! @sp 2
%! @end deftypefn
%@eod:
2009-12-16 18:17:34 +01:00
2013-06-12 16:42:09 +02:00
% Copyright (C) 2003-2013 Dynare Team
2009-12-16 18:17:34 +01: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/>.
2012-06-07 14:15:59 +02:00
nvx = estim_params . nvx ;
ncx = estim_params . ncx ;
nvn = estim_params . nvn ;
ncn = estim_params . ncn ;
np = estim_params . np ;
Sigma_e = M . Sigma_e ;
H = M . H ;
2009-12-16 18:17:34 +01:00
% setting shocks variance
if nvx
2012-06-07 14:15:59 +02:00
var_exo = estim_params . var_exo ;
2009-12-16 18:17:34 +01:00
for i = 1 : nvx
k = var_exo ( i , 1 ) ;
Sigma_e ( k , k ) = xparam1 ( i ) ^2 ;
end
end
% update offset
offset = nvx ;
% setting measument error variance
if nvn
for i = 1 : nvn
2013-03-19 21:12:49 +01:00
k = estim_params . nvn_observable_correspondence ( i , 1 ) ;
2009-12-16 18:17:34 +01:00
H ( k , k ) = xparam1 ( i + offset ) ^2 ;
end
end
% update offset
offset = nvx + nvn ;
% setting shocks covariances
2012-06-07 14:15:59 +02:00
if ~ isempty ( M . Correlation_matrix )
2013-03-19 20:57:15 +01:00
Sigma_e = diag ( sqrt ( diag ( Sigma_e ) ) ) * M . Correlation_matrix * diag ( sqrt ( diag ( Sigma_e ) ) ) ; % use of old correlation matrix is correct due to the diagonal structure and later only using the hence correctly updated diagonal entries of Sigma_e
2012-06-06 18:24:03 +02:00
end
2009-12-16 18:17:34 +01:00
if ncx
2012-06-07 14:15:59 +02:00
corrx = estim_params . corrx ;
2009-12-16 18:17:34 +01:00
for i = 1 : ncx
k1 = corrx ( i , 1 ) ;
k2 = corrx ( i , 2 ) ;
2012-06-07 14:15:59 +02:00
M . Correlation_matrix ( k1 , k2 ) = xparam1 ( i + offset ) ;
M . Correlation_matrix ( k2 , k1 ) = M . Correlation_matrix ( k1 , k2 ) ;
2009-12-16 18:17:34 +01:00
Sigma_e ( k1 , k2 ) = xparam1 ( i + offset ) * sqrt ( Sigma_e ( k1 , k1 ) * Sigma_e ( k2 , k2 ) ) ;
Sigma_e ( k2 , k1 ) = Sigma_e ( k1 , k2 ) ;
end
end
% update offset
offset = nvx + nvn + ncx ;
% setting measurement error covariances
2013-03-19 21:12:49 +01:00
if ~ isempty ( M . Correlation_matrix_ME )
H = diag ( sqrt ( diag ( H ) ) ) * M . Correlation_matrix_ME * diag ( sqrt ( diag ( H ) ) ) ;
end
2009-12-16 18:17:34 +01:00
if ncn
2013-03-19 21:12:49 +01:00
corrn_observable_correspondence = estim_params . corrn_observable_correspondence ;
2009-12-16 18:17:34 +01:00
for i = 1 : ncn
2013-03-19 21:12:49 +01:00
k1 = corrn_observable_correspondence ( i , 1 ) ;
k2 = corrn_observable_correspondence ( i , 2 ) ;
M . Correlation_matrix_ME ( k1 , k2 ) = xparam1 ( i + offset ) ;
M . Correlation_matrix_ME ( k2 , k1 ) = M . Correlation_matrix_ME ( k1 , k2 ) ;
2009-12-16 18:17:34 +01:00
H ( k1 , k2 ) = xparam1 ( i + offset ) * sqrt ( H ( k1 , k1 ) * H ( k2 , k2 ) ) ;
H ( k2 , k1 ) = H ( k1 , k2 ) ;
end
end
% update offset
offset = nvx + ncx + nvn + ncn ;
% setting structural parameters
%
if np
2012-06-07 14:15:59 +02:00
M . params ( estim_params . param_vals ( : , 1 ) ) = xparam1 ( offset + 1 : end ) ;
2009-12-16 18:17:34 +01:00
end
2012-06-07 14:15:59 +02:00
% updating matrices in M
if nvx || ncx
M . Sigma_e = Sigma_e ;
2009-12-16 18:17:34 +01:00
end
2013-03-19 21:12:49 +01:00
if nvn || ncn
2012-06-07 14:15:59 +02:00
M . H = H ;
end