Home > matlab > disp_dr.m

disp_dr

PURPOSE ^

Display the decision rules

SYNOPSIS ^

function disp_dr(dr,order,var_list)

DESCRIPTION ^

 Display the decision rules

 INPUTS
    dr [struct]:            decision rules
    order [int]:            order of approximation
    var_list [char array]:  list of endogenous variables for which the
                            decision rules should be printed

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function disp_dr(dr,order,var_list)
0002 % Display the decision rules
0003 %
0004 % INPUTS
0005 %    dr [struct]:            decision rules
0006 %    order [int]:            order of approximation
0007 %    var_list [char array]:  list of endogenous variables for which the
0008 %                            decision rules should be printed
0009 
0010 % Copyright (C) 2001-2011 Dynare Team
0011 %
0012 % This file is part of Dynare.
0013 %
0014 % Dynare is free software: you can redistribute it and/or modify
0015 % it under the terms of the GNU General Public License as published by
0016 % the Free Software Foundation, either version 3 of the License, or
0017 % (at your option) any later version.
0018 %
0019 % Dynare is distributed in the hope that it will be useful,
0020 % but WITHOUT ANY WARRANTY; without even the implied warranty of
0021 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0022 % GNU General Public License for more details.
0023 %
0024 % You should have received a copy of the GNU General Public License
0025 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
0026 
0027 global M_ options_
0028 
0029 nx =size(dr.ghx,2);
0030 nu =size(dr.ghu,2);
0031 if options_.block
0032     k = dr.npred + dr.nboth;
0033     k1 = 1:M_.endo_nbr;
0034 else
0035     k = find(dr.kstate(:,2) <= M_.maximum_lag+1);
0036     klag = dr.kstate(k,[1 2]);
0037     k1 = dr.order_var;
0038 end;
0039 
0040 if size(var_list,1) == 0
0041     var_list = M_.endo_names(1:M_.orig_endo_nbr, :);
0042 end
0043 
0044 nvar = size(var_list,1);
0045 
0046 ivar=zeros(nvar,1);
0047 for i=1:nvar
0048     i_tmp = strmatch(var_list(i,:),M_.endo_names(k1,:),'exact');
0049     if isempty(i_tmp)
0050         disp(var_list(i,:));
0051         error (['One of the variable specified does not exist']) ;
0052     else
0053         ivar(i) = i_tmp;
0054     end
0055 end
0056 
0057 disp('POLICY AND TRANSITION FUNCTIONS')
0058 % variable names
0059 str = '                        ';
0060 for i=1:nvar
0061     str = [str sprintf('%16s',M_.endo_names(k1(ivar(i)),:))];
0062 end
0063 disp(str);
0064 %
0065 % constant
0066 %
0067 str = 'Constant            ';
0068 flag = 0;
0069 for i=1:nvar
0070     x = dr.ys(k1(ivar(i)));
0071     if order > 1
0072         x = x + dr.ghs2(ivar(i))/2;
0073     end
0074     if abs(x) > 1e-6
0075         flag = 1;
0076         str = [str sprintf('%16.6f',x)];
0077     else
0078         str = [str '               0'];
0079     end
0080 end
0081 if flag
0082     disp(str)
0083 end
0084 if order > 1
0085     str = '(correction)        ';
0086     flag = 0;
0087     for i=1:nvar
0088         x = dr.ghs2(ivar(i))/2;
0089         if abs(x) > 1e-6
0090             flag = 1;
0091             str = [str sprintf('%16.6f',x)];
0092         else
0093             str = [str '               0'];
0094         end
0095     end
0096     if flag
0097         disp(str)
0098     end
0099 end
0100 %
0101 % ghx
0102 %
0103 for k=1:nx
0104     flag = 0;
0105     if options_.block
0106         str1 = subst_auxvar(dr.state_var(k),-1);
0107     else
0108         str1 = subst_auxvar(k1(klag(k,1)),klag(k,2)-M_.maximum_lag-2);
0109     end;
0110     str = sprintf('%-20s',str1);
0111     for i=1:nvar
0112         x = dr.ghx(ivar(i),k);
0113         if abs(x) > 1e-6
0114             flag = 1;
0115             str = [str sprintf('%16.6f',x)];
0116         else
0117             str = [str '               0'];
0118         end
0119     end
0120     if flag
0121         disp(str)
0122     end
0123 end
0124 %
0125 % ghu
0126 %
0127 for k=1:nu
0128     flag = 0;
0129     str = sprintf('%-20s',M_.exo_names(k,:));
0130     for i=1:nvar
0131         x = dr.ghu(ivar(i),k);
0132         if abs(x) > 1e-6
0133             flag = 1;
0134             str = [str sprintf('%16.6f',x)];
0135         else
0136             str = [str '               0'];
0137         end
0138     end
0139     if flag
0140         disp(str)
0141     end
0142 end
0143 
0144 if order > 1
0145     % ghxx
0146     for k = 1:nx
0147         for j = 1:k
0148             flag = 0;
0149             str1 = sprintf('%s,%s',subst_auxvar(k1(klag(k,1)),klag(k,2)-M_.maximum_lag-2), ...
0150                            subst_auxvar(k1(klag(j,1)),klag(j,2)-M_.maximum_lag-2));
0151             str = sprintf('%-20s',str1);
0152             for i=1:nvar
0153                 if k == j
0154                     x = dr.ghxx(ivar(i),(k-1)*nx+j)/2;
0155                 else
0156                     x = dr.ghxx(ivar(i),(k-1)*nx+j);
0157                 end
0158                 if abs(x) > 1e-6
0159                     flag = 1;
0160                     str = [str sprintf('%16.6f',x)];
0161                 else
0162                     str = [str '               0'];
0163                 end
0164             end
0165             if flag
0166                 disp(str)
0167             end
0168         end
0169     end
0170     %
0171     % ghuu
0172     %
0173     for k = 1:nu
0174         for j = 1:k
0175             flag = 0;
0176             str = sprintf('%-20s',[M_.exo_names(k,:) ',' M_.exo_names(j,:)] );
0177             for i=1:nvar
0178                 if k == j
0179                     x = dr.ghuu(ivar(i),(k-1)*nu+j)/2;
0180                 else
0181                     x = dr.ghuu(ivar(i),(k-1)*nu+j);
0182                 end
0183                 if abs(x) > 1e-6
0184                     flag = 1;
0185                     str = [str sprintf('%16.6f',x)];
0186                 else
0187                     str = [str '               0'];
0188                 end
0189             end
0190             if flag
0191                 disp(str)
0192             end
0193         end
0194     end
0195     %
0196     % ghxu
0197     %
0198     for k = 1:nx
0199         for j = 1:nu
0200             flag = 0;
0201             str1 = sprintf('%s,%s',subst_auxvar(k1(klag(k,1)),klag(k,2)-M_.maximum_lag-2), ...
0202                            M_.exo_names(j,:));
0203             str = sprintf('%-20s',str1);
0204             for i=1:nvar
0205                 x = dr.ghxu(ivar(i),(k-1)*nu+j);
0206                 if abs(x) > 1e-6
0207                     flag = 1;
0208                     str = [str sprintf('%16.6f',x)];
0209                 else
0210                     str = [str '               0'];
0211                 end
0212             end
0213             if flag
0214                 disp(str)
0215             end
0216         end
0217     end
0218 end
0219 end
0220 
0221 % Given the index of an endogenous (possibly an auxiliary var), and a
0222 % lead/lag, creates a string of the form "x(lag)".
0223 % In the case of auxiliary vars for lags, replace by the original variable
0224 % name, and compute the lead/lag accordingly.
0225 function str = subst_auxvar(aux_index, aux_lead_lag)
0226 global M_
0227 
0228 if aux_index <= M_.orig_endo_nbr
0229     str = sprintf('%s(%d)', deblank(M_.endo_names(aux_index,:)), aux_lead_lag);
0230     return
0231 end
0232 for i = 1:length(M_.aux_vars)
0233     if M_.aux_vars(i).endo_index == aux_index
0234         switch M_.aux_vars(i).type
0235           case 1
0236             orig_name = deblank(M_.endo_names(M_.aux_vars(i).orig_index, :));
0237           case 3
0238             orig_name = deblank(M_.exo_names(M_.aux_vars(i).orig_index, :));
0239           case 4
0240             str = sprintf('EXPECTATION(%d)(...)', aux_lead_lag);
0241             return
0242           case 6
0243             str = sprintf('%s(%d)', ...
0244                           deblank(M_.endo_names(M_.aux_vars(i).endo_index, :)),aux_lead_lag);
0245             return
0246           otherwise
0247             error(sprintf('Invalid auxiliary type: %s', M_.endo_names(aux_index, :)))
0248         end
0249         str = sprintf('%s(%d)', orig_name, M_.aux_vars(i).orig_lead_lag+aux_lead_lag);
0250         return
0251     end
0252 end
0253 error(sprintf('Could not find aux var: %s', M_.endo_names(aux_index, :)))
0254 end

Generated on Mon 21-May-2012 02:42:43 by m2html © 2005