dynare/matlab/AIM
Stéphane Adjemian (Ryûk) 735bd66d4d
Remove unused output arguments.
2023-12-18 07:48:27 +01:00
..
README.txt AIM solver: 2009-10-20 15:44:56 +00:00
SPAimerr.m Fixed indentation of matlab files. 2017-05-16 15:10:20 +02:00
SPAmalg.m Fixed indentation of matlab files. 2017-05-16 15:10:20 +02:00
SPBuild_a.m Fixed indentation of matlab files. 2017-05-16 15:10:20 +02:00
SPCopy_w.m Fixed indentation of matlab files. 2017-05-16 15:10:20 +02:00
SPEigensystem.m Fixed indentation of matlab files. 2017-05-16 15:10:20 +02:00
SPExact_shift.m Fixed indentation of matlab files. 2017-05-16 15:10:20 +02:00
SPNumeric_shift.m Fixed indentation of matlab files. 2017-05-16 15:10:20 +02:00
SPObstruct.m Fixed indentation of matlab files. 2017-05-16 15:10:20 +02:00
SPReduced_form.m Fixed indentation of matlab files. 2017-05-16 15:10:20 +02:00
SPShiftright.m Fixed indentation of matlab files. 2017-05-16 15:10:20 +02:00
dynAIMsolver1.m Remove unused output arguments. 2023-12-18 07:48:27 +01:00

README.txt

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

AIM Subsystem cosists of 

A function dynAIMsolver1(jacobia_,M_,dr) which maps Dynare to Gary Anderson AIM package subsystem and derives the solution for gy=dr.hgx and gu=dr.hgu from the AIM outputs (where "1" in the title is for 1st order solver).

A subset of routines from Gary Anderson AIM package starting with SP... needed to compute and solve system passed on and returned by dynAIMsolver1.
( see  http://www.federalreserve.gov/Pubs/oss/oss4/aimindex.html  )

The path to the AIM directory,if exists, is added by dynare_config.m using addpath.

DR1 tries to invoke AIM if options_.aim_solver == 1 is set and, if not check only, and if 1st order only: 
    if (options_.aim_solver == 1) && (task == 0) && (options_.order == 1) 

for start, options_.aim_solver = 0 is set by default in global_initialization.m so that system uses mjdgges by default. 

If AIM is to be used, options_.aim_solver = 1 needs to be set either in the model <>.mod file, before invoking, estimate and/or stoch_simul, or by issuing appropriate command for estimate and/or stoch_simul. 

NOTE: in the current implementation, as of July 2008, handling of exceptions is rather fundamental and, in particular, when Blanchard and Kahn conditions are not met, only a large penalty value 1.0e+8 is being set.

Hence, system may not coverge ot resluts may not be accurate if there were many messages like 
Error in AIM: aimcode=4 : Aim: too few big roots
or
Error in AIM: aimcode=3 : Aim: too many big roots
especially close to the point of convergence.

However, if other exceptions occur and aimcode (see codes below) is higher than 5, the system resets options_.aim_solver = 0 and tries to use mjdgges instead.


APPENDIX

% AIM System is given as a sum: 
% i.e. for i=-$...+&   SUM(Hi*xt+i)= £*zt, t = 0, . . . ,?
% and its input as single array of matrices: [H-$...  Hi ... H+&]
% and its solution as xt=SUM( Bi*xt+i) + @*£*zt for i=-$...-1 
% with the output in form bb=[B-$...  Bi ... B-1] and @=inv(Ho+H1*B-1) 
% Dynare jacobian = [fy'-$...  fy'i ... fy'+&  fu'] 
% where [fy'-$...  fy'i ... fy'+&]=[H-$...  Hi ... H+&] and fu'= £


%function [dr,aimcode]=dynAIMsolver1(jacobia_,M_,dr)
% INPUTS
%   jacobia_   [matrix]           1st order derivative of the model 
%   dr         [matlab structure] Decision rules for stochastic simulations.
%   M_         [matlab structure] Definition of the model.           
%    
% OUTPUTS
%   dr         [matlab structure] Decision rules for stochastic simulations.
%   aimcode    [integer]          1: the model defines variables uniquely
%   aimcode is resolved in AIMerr as
%      (c==1)  e='Aim: unique solution.';
%      (c==2)  e='Aim: roots not correctly computed by real_schur.';
%      (c==3)  e='Aim: too many big roots.';
%      (c==35) e='Aim: too many big roots, and q(:,right) is singular.';
%      (c==4)  e='Aim: too few big roots.';
%      (c==45) e='Aim: too few big roots, and q(:,right) is singular.';
%      (c==5)  e='Aim: q(:,right) is singular.';
%      (c==61) e='Aim: too many exact shiftrights.';
%      (c==62) e='Aim: too many numeric shiftrights.';
%      else    e='Aimerr: return code not properly specified';
%    
% SPECIAL REQUIREMENTS
% Dynare use: 
%       1) the lognormal block in DR1 is being invoked for some models and changing
%       values of ghx and ghy. We need to return the AIM output
%       values before that block and run the block with the current returned values
%       of gy (i.e. dr.ghx) and gu (dr.ghu) if it is needed even when the AIM is used  
%       (it does not depend on mjdgges output).
%       
%       2) for forward looking models, passing into dynAIMsolver 
%		aa={Q'|1}*jacobia_ can produce ~ one order closer  
%       results to the Dynare solutiion then when if plain jacobia_ is passed, 
%       i.e. diff < e-14 for aa and diff < *e-13 for jacobia_ if Q' is used.  
%
% GP July 2008  
% part of DYNARE, copyright Dynare Team (1996-2008)
% Gnu Public License.