83 lines
2.0 KiB
Matlab
Executable File
83 lines
2.0 KiB
Matlab
Executable File
function [hm1,h,hl1,j,resid] = get_deriv(M_,ys_)
|
|
|
|
iy_ = M_.lead_lag_incidence;
|
|
it_ = 1;
|
|
|
|
x = zeros(1,M_.exo_nbr);
|
|
|
|
% For most models, there are leads, lags and current values of variables
|
|
if size(iy_,1)==3
|
|
% find non-zero columns of hm1
|
|
lag_cols = find(iy_(1,:)~=0);
|
|
% find non-zero columns of h
|
|
con_cols = find(iy_(2,:));
|
|
% find non-zero columns of hl1
|
|
lea_cols = find(iy_(3,:));
|
|
|
|
% If models either lacks leads or lags, iy_ will have two rows
|
|
% In this case, we guess that the row with more nonzeros is the row with current variables
|
|
elseif size(iy_,1)==2
|
|
% if first row has more nonzero entries than the second, assume model lacks lagged variables
|
|
if length(find(iy_(1,:)))>length(find(iy_(2,:)))
|
|
warning('Model does not have lagged endogenous variables')
|
|
con_cols = find(iy_(1,:));
|
|
lea_cols = find(iy_(2,:));
|
|
lag_cols = [];
|
|
else
|
|
warning('Model does not have expected future endogenous variables')
|
|
lag_cols = find(iy_(1,:));
|
|
con_cols = find(iy_(2,:));
|
|
lea_cols = [];
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
% find number of entries for y vector
|
|
ny = length(find(iy_~=0));
|
|
|
|
% build steady state y
|
|
y = ys_(lag_cols);
|
|
y = [y;ys_(con_cols)];
|
|
y = [y;ys_(lea_cols)];
|
|
|
|
|
|
if ismac
|
|
eval(['[resid,g1]=',M_.fname,'.dynamic(y,x, M_.params, ys_, it_);']);
|
|
% Older versions of DYNARE for Mac did not include ys_ in the call structure
|
|
%eval(['[resid,g1]=',M_.fname,'.dynamic(y,x, M_.params, it_);']);
|
|
else
|
|
eval(['[resid,g1]=',M_.fname,'.dynamic(y,x, M_.params, ys_, it_);']);
|
|
end
|
|
|
|
|
|
hm1=zeros(M_.endo_nbr);
|
|
h = hm1;
|
|
hl1 = hm1;
|
|
j = zeros(M_.endo_nbr,M_.exo_nbr);
|
|
|
|
|
|
% build hm1
|
|
nlag_cols = length(lag_cols);
|
|
for i=1:nlag_cols
|
|
hm1(:,lag_cols(i)) = g1(:,i);
|
|
end
|
|
|
|
% build h
|
|
ncon_cols = length(con_cols);
|
|
for i=1:ncon_cols
|
|
h(:,con_cols(i)) = g1(:,i+nlag_cols);
|
|
end
|
|
|
|
% build hl1
|
|
nlea_cols = length(lea_cols);
|
|
for i=1:nlea_cols
|
|
hl1(:,lea_cols(i)) = g1(:,i+nlag_cols+ncon_cols);
|
|
end
|
|
|
|
|
|
for i = 1:M_.exo_nbr
|
|
j(:,i) =g1(:,i+ny);
|
|
end
|