diff --git a/src/local_state_space_iteration/local_state_space_iteration_2.m b/src/local_state_space_iteration/local_state_space_iteration_2.m deleted file mode 100644 index 0c6a52d071a74c84dfcd2c69cd16cce9233084b5..0000000000000000000000000000000000000000 --- a/src/local_state_space_iteration/local_state_space_iteration_2.m +++ /dev/null @@ -1,275 +0,0 @@ -function [y,y_] = local_state_space_iteration_2(yhat,epsilon,ghx,ghu,constant,ghxx,ghuu,ghxu,a,b,c)%yhat_,ss) - -%@info: -%! @deftypefn {Function File} {@var{y}, @var{y_} =} local_state_equation_2 (@var{yhat},@var{epsilon}, @var{ghx}, @var{ghu}, @var{constant}, @var{ghxx}, @var{ghuu}, @var{ghxu}, @var{yhat_}, @var{ss}) -%! @anchor{particle/local_state_space_iteration_2} -%! @sp 1 -%! Given the states (y) and structural innovations (epsilon), this routine computes the level of selected endogenous variables when the -%! model is approximated by an order two taylor expansion around the deterministic steady state. Depending on the number of input/output -%! argument the pruning algorithm advocated by C. Sims is used or not (this version should not be used if the selected endogenous variables -%! are not the states of the model). -%! -%! @sp 2 -%! @strong{Inputs} -%! @sp 1 -%! @table @ @var -%! @item yhat -%! n*1 vector of doubles, initial condition, where n is the number of state variables. -%! @item epsilon -%! q*1 vector of doubles, structural innovations. -%! @item ghx -%! m*n matrix of doubles, restricted dr.ghx where we only consider the lines corresponding to a subset of endogenous variables. -%! @item ghu -%! m*q matrix of doubles, restricted dr.ghu where we only consider the lines corresponding to a subset of endogenous variables. -%! @item constant -%! m*1 vector of doubles, deterministic steady state plus second order correction for a subset of endogenous variables. -%! @item ghxx -%! m*n² matrix of doubles, restricted dr.ghxx where we only consider the lines corresponding to a subset of endogenous variables. -%! @item ghuu -%! m*q² matrix of doubles, restricted dr.ghuu where we only consider the lines corresponding to a subset of endogenous variables. -%! @item ghxu -%! m*(nq) matrix of doubles, subset of dr.ghxu where we only consider the lines corresponding to a subset of endogenous variables. -%! @item yhat_ -%! n*1 vector of doubles, spurious states for the pruning version. -%! @item ss -%! n*1 vector of doubles, steady state for the states. -%! @end table -%! @sp 2 -%! @strong{Outputs} -%! @sp 1 -%! @table @ @var -%! @item y -%! m*1 vector of doubles, selected endogenous variables. -%! @item y_ -%! m*1 vector of doubles, update of the latent variables needed for the pruning version (first order update). -%! @end table -%! @sp 2 -%! @strong{Remarks} -%! @sp 1 -%! [1] If the function has 10 input arguments then it must have 2 output arguments (pruning version). -%! @sp 1 -%! [2] If the function has 08 input arguments then it must have 1 output argument. -%! @sp 2 -%! @strong{This function is called by:} -%! @sp 2 -%! @strong{This function calls:} -%! -%! -%! @end deftypefn -%@eod: - -% Copyright (C) 2011-2012 Dynare Team -% -% 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/>. - -% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr -% frederic DOT karame AT univ DASH evry DOT fr - -if nargin==9 - pruning = 0; numthreads = a; - if nargout>1 - error('local_state_space_iteration_2:: Numbers of input and output argument are inconsistent!') - end -elseif nargin==11 - pruning = 1; numthreads = c; yhat_ = a; ss = b; - if nargout~=2 - error('local_state_space_iteration_2:: Numbers of input and output argument are inconsistent!') - end -else - error('local_state_space_iteration_2:: Wrong number of input arguments!') -end - -number_of_threads = numthreads; - -switch pruning - case 0 - for i =1:size(yhat,2) - y(:,i) = constant + ghx*yhat(:,i) + ghu*epsilon(:,i) ... - + A_times_B_kronecker_C(.5*ghxx,yhat(:,i),number_of_threads) ... - + A_times_B_kronecker_C(.5*ghuu,epsilon(:,i),number_of_threads) ... - + A_times_B_kronecker_C(ghxu,yhat(:,i),epsilon(:,i),number_of_threads); - end - case 1 - for i =1:size(yhat,2) - y(:,i) = constant + ghx*yhat(:,i) + ghu*epsilon(:,i) ... - + A_times_B_kronecker_C(.5*ghxx,yhat_(:,i),number_of_threads) ... - + A_times_B_kronecker_C(.5*ghuu,epsilon(:,i),number_of_threads) ... - + A_times_B_kronecker_C(ghxu,yhat_(:,i),epsilon(:,i),number_of_threads); - end - y_ = ghx*yhat_+ghu*epsilon; - y_ = bsxfun(@plus,y_,ss); -end - -%@test:1 -%$ n = 2; -%$ q = 3; -%$ -%$ yhat = zeros(n,1); -%$ epsilon = zeros(q,1); -%$ ghx = rand(n,n); -%$ ghu = rand(n,q); -%$ constant = ones(n,1); -%$ ghxx = rand(n,n*n); -%$ ghuu = rand(n,q*q); -%$ ghxu = rand(n,n*q); -%$ yhat_ = zeros(n,1); -%$ ss = ones(n,1); -%$ -%$ % Call the tested routine. -%$ for i=1:10 -%$ y1 = local_state_space_iteration_2(yhat,epsilon,ghx,ghu,constant,ghxx,ghuu,ghxu,1); -%$ [y2,y2_] = local_state_space_iteration_2(yhat,epsilon,ghx,ghu,constant,ghxx,ghuu,ghxu,yhat_,ss,1); -%$ end -%$ -%$ % Check the results. -%$ t(1) = dassert(y1,ones(n,1)); -%$ t(2) = dassert(y2,ones(n,1)); -%$ t(3) = dassert(y2_,ones(n,1)); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ old_path = pwd; -%$ cd([fileparts(which('dynare')) '/../tests/']); -%$ dynare('dsge_base2'); -%$ load dsge_base2; -%$ cd(old_path); -%$ dr = oo_.dr; -%$ clear('oo_','options_','M_'); -%$ delete([fileparts(which('dynare')) '/../tests/dsge_base2.mat']); -%$ istates = dr.nstatic+(1:dr.npred); -%$ n = dr.npred; -%$ q = size(dr.ghu,2); -%$ yhat = zeros(n,1); -%$ epsilon = zeros(q,1); -%$ ghx = dr.ghx(istates,:); -%$ ghu = dr.ghu(istates,:); -%$ constant = dr.ys(istates,:)+dr.ghs2(istates,:); -%$ ghxx = dr.ghxx(istates,:); -%$ ghuu = dr.ghuu(istates,:); -%$ ghxu = dr.ghxu(istates,:); -%$ yhat_ = zeros(n,1); -%$ ss = dr.ys(istates,:); -%$ -%$ t = ones(2,1); -%$ -%$ % Call the tested routine. -%$ try -%$ y1 = local_state_space_iteration_2(yhat,epsilon,ghx,ghu,constant,ghxx,ghuu,ghxu,1); -%$ catch -%$ t(1) = 0; -%$ end -%$ try -%$ [y2,y2_] = local_state_space_iteration_2(yhat,epsilon,ghx,ghu,constant,ghxx,ghuu,ghxu,yhat_,ss,1); -%$ catch -%$ t(2) = 0; -%$ end -%$ -%$ % Check the results. -%$ T = all(t); -%@eof:2 - -%@test:3 -%$ Bohrbug = 1; % A bug that manifests reliably under a possibly unknown but well-defined set of conditions. -%$ if ~Bohrbug -%$ n = 2; -%$ q = 3; -%$ -%$ yhat = .01*randn(n,1); -%$ epsilon = .001*randn(q,1); -%$ ghx = rand(n,n); -%$ ghu = rand(n,q); -%$ constant = ones(n,1); -%$ ghxx = rand(n,n*n); -%$ ghuu = rand(n,q*q); -%$ ghxu = rand(n,n*q); -%$ yhat_ = zeros(n,1); -%$ ss = ones(n,1); -%$ -%$ % Call the tested routine (mex version). -%$ y1a = local_state_space_iteration_2(yhat,epsilon,ghx,ghu,constant,ghxx,ghuu,ghxu,1); -%$ [y2a,y2a_] = local_state_space_iteration_2(yhat,epsilon,ghx,ghu,constant,ghxx,ghuu,ghxu,yhat_,ss,1); -%$ -%$ % Call the tested routine (matlab version) -%$ path_to_mex = fileparts(which(['qmc_sequence.' mexext])); -%$ where_am_i_coming_from = pwd; -%$ cd(path_to_mex); -%$ tar('local_state_space_iteration_2.tar',['local_state_space_iteration_2.' mexext]); -%$ cd(where_am_i_coming_from); -%$ dynare_config([],0); -%$ y1b = local_state_space_iteration_2(yhat,epsilon,ghx,ghu,constant,ghxx,ghuu,ghxu,1); -%$ [y2b,y2b_] = local_state_space_iteration_2(yhat,epsilon,ghx,ghu,constant,ghxx,ghuu,ghxu,yhat_,ss,1); -%$ cd(path_to_mex); -%$ untar('local_state_space_iteration_2.tar'); -%$ delete('local_state_space_iteration_2.tar'); -%$ cd(where_am_i_coming_from); -%$ dynare_config([],0); -%$ % Check the results. -%$ t(1) = dassert(y1a,y1b); -%$ t(2) = dassert(y2a,y2b); -%$ t(3) = dassert(y2a_,y2b_); -%$ T = all(t); -%$ else -%$ t(1) = 1; -%$ T = all(t); -%$ end -%@eof:3 - - -%@test:4 -%$ % TIMING TEST (parallelization with openmp) -%$ old_path = pwd; -%$ cd([fileparts(which('dynare')) '/../tests/']); -%$ dynare('dsge_base2'); -%$ load dsge_base2; -%$ cd(old_path); -%$ dr = oo_.dr; -%$ clear('oo_','options_','M_'); -%$ delete([fileparts(which('dynare')) '/../tests/dsge_base2.mat']); -%$ istates = dr.nstatic+(1:dr.npred); -%$ n = dr.npred; -%$ q = size(dr.ghu,2); -%$ yhat = zeros(n,10000000); -%$ epsilon = zeros(q,10000000); -%$ ghx = dr.ghx(istates,:); -%$ ghu = dr.ghu(istates,:); -%$ constant = dr.ys(istates,:)+dr.ghs2(istates,:); -%$ ghxx = dr.ghxx(istates,:); -%$ ghuu = dr.ghuu(istates,:); -%$ ghxu = dr.ghxu(istates,:); -%$ yhat_ = zeros(n,10000000); -%$ ss = dr.ys(istates,:); -%$ -%$ t = NaN(4,1); -%$ tic, for i=1:10, y1 = local_state_space_iteration_2(yhat,epsilon,ghx,ghu,constant,ghxx,ghuu,ghxu,1); end -%$ t1 = toc; -%$ tic, for i=1:10, y2 = local_state_space_iteration_2(yhat,epsilon,ghx,ghu,constant,ghxx,ghuu,ghxu,2); end -%$ t2 = toc; -%$ t(1) = dassert(y1,y2,1e-15); clear('y1'); -%$ tic, for i=1:10, y3 = local_state_space_iteration_2(yhat,epsilon,ghx,ghu,constant,ghxx,ghuu,ghxu,3); end -%$ t3 = toc; -%$ t(2) = dassert(y2,y3,1e-15); clear('y2'); -%$ tic, for i=1:10, y4 = local_state_space_iteration_2(yhat,epsilon,ghx,ghu,constant,ghxx,ghuu,ghxu,4); end -%$ t4 = toc; -%$ t(3) = dassert(y4,y3,1e-15); clear('y3','y4'); -%$ t(4) = (t1>t2) && (t2>t3) && (t3>t4); -%$ if ~t(4) -%$ disp('Timmings:') -%$ [t1, t2, t3, t4] -%$ end -%$ % Check the results. -%$ T = all(t); -%@eof:4