dynare/matlab/AIM_first_order_solver.m

32 lines
738 B
Matlab
Raw Normal View History

2011-12-18 17:33:08 +01:00
function [dr,info]=AIM_first_order_solver(jacobia,M,dr,qz_criterium,nd)
info = 0;
[dr,aimcode]=dynAIMsolver1(jacobia,M,dr);
2011-12-18 17:33:08 +01:00
if aimcode ~=1
info(1) = aimcode;
info(2) = 1.0e+8;
return
end
[A,B] =transition_matrix(dr);
dr.eigval = eig(A);
nd = size(dr.kstate,1);
nba = nd-sum( abs(dr.eigval) < qz_criterium );
2011-12-18 17:33:08 +01:00
nyf = dr.nfwrd+dr.nboth;
2011-12-18 17:33:08 +01:00
if nba ~= nyf
temp = sort(abs(dr.eigval));
if nba > nyf
temp = temp(nd-nba+1:nd-nyf)-1-qz_criterium;
info(1) = 3;
elseif nba < nyf;
temp = temp(nd-nyf+1:nd-nba)-1-qz_criterium;
info(1) = 4;
end
2011-12-18 17:33:08 +01:00
info(2) = temp'*temp;
return
end
2011-12-18 17:33:08 +01:00