diff --git a/matlab/AIM_first_order_solver.m b/matlab/AIM_first_order_solver.m index f0c391013ad187efa67e7e7815607dd5b002aa67..2e6adec8a53dc5aa37bb2c75b37063b1f48fc128 100644 --- a/matlab/AIM_first_order_solver.m +++ b/matlab/AIM_first_order_solver.m @@ -77,8 +77,10 @@ function [dr,info]=AIM_first_order_solver(jacobia,M,dr,qz_criterium) info(2) = 1.0e+8; return end - [A,B] =transition_matrix(dr); + A = kalman_transition_matrix(dr,M.nstatic+(1:M.nspred), 1:M.nspred,... + M.exo_nbr); dr.eigval = eig(A); + disp(dr.eigval) nd = size(dr.kstate,1); nba = nd-sum( abs(dr.eigval) < qz_criterium ); diff --git a/matlab/kalman_transition_matrix.m b/matlab/kalman_transition_matrix.m index 3c3397208dbc2a32ee629c7dfd428f2b312293c3..9252a9fe61c353845f4d4fd45a55c099d0550ef4 100644 --- a/matlab/kalman_transition_matrix.m +++ b/matlab/kalman_transition_matrix.m @@ -36,11 +36,9 @@ n_iv = length(iv); A = zeros(n_iv,n_iv); -i_n_iv = 1:n_iv; -A(i_n_iv,ic) = dr.ghx(iv,:); +A(:,ic) = dr.ghx(iv,:); if nargout>1 - B = zeros(n_iv,exo_nbr); - B(i_n_iv,:) = dr.ghu(iv,:); + B = dr.ghu(iv,:); end diff --git a/matlab/stochastic_solvers.m b/matlab/stochastic_solvers.m index 8e4504905bd8ebf770bc5e34d4efa50f9330b16b..1c3971b0e31a50df15d9d2c7ec0441c60f87a95b 100644 --- a/matlab/stochastic_solvers.m +++ b/matlab/stochastic_solvers.m @@ -210,7 +210,7 @@ if M_.maximum_endo_lead == 0 if M_.exo_nbr dr.ghu = -b\jacobia_(:,nz+1:end); end - dr.eigval = eig(transition_matrix(dr)); + dr.eigval = eig(kalman_transition_matrix(dr,nstatic+(1:nspred),1:nspred,M_.exo_nbr)); dr.full_rank = 1; if any(abs(dr.eigval) > options_.qz_criterium) temp = sort(abs(dr.eigval)); diff --git a/matlab/transition_matrix.m b/matlab/transition_matrix.m deleted file mode 100644 index f43364172544bc5845d465fcad019d3505efec29..0000000000000000000000000000000000000000 --- a/matlab/transition_matrix.m +++ /dev/null @@ -1,63 +0,0 @@ -function [A,B] = transition_matrix(dr, varargin) -% function [A,B] = transition_matrix(dr, varargin) -% Makes transition matrices out of ghx and ghu -% -% INPUTS -% dr: structure of decision rules for stochastic simulations -% varargin: {1}: M_ -% -% OUTPUTS -% A: matrix of effects of predetermined variables in linear solution (ghx) -% B: matrix of effects of shocks in linear solution (ghu) -% -% SPECIAL REQUIREMENTS -% none - -% Copyright (C) 2003-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/>. - -if(length(varargin)<=0) - global M_ -else - M_=varargin{1}; -end; - -exo_nbr = M_.exo_nbr; -ykmin_ = M_.maximum_endo_lag; - -nx = size(dr.ghx,2); -kstate = dr.kstate; -ikx = [M_.nstatic+1:M_.nstatic+M_.nspred]; - -A = zeros(nx,nx); -k0 = kstate(find(kstate(:,2) <= ykmin_+1),:); -i0 = find(k0(:,2) == ykmin_+1); -A(i0,:) = dr.ghx(ikx,:); -B = zeros(nx,exo_nbr); -if(isfield(dr,'ghu')) - B(i0,:) = dr.ghu(ikx,:); -end; -for i=ykmin_:-1:2 - i1 = find(k0(:,2) == i); - n1 = size(i1,1); - j = zeros(n1,1); - for j1 = 1:n1 - j(j1) = find(k0(i0,1)==k0(i1(j1),1)); - end - A(i1,i0(j))=eye(n1); - i0 = i1; -end