dynare/matlab/model_info.m

88 lines
3.8 KiB
Matlab
Raw Normal View History

function model_info;
global M_;
fprintf(' Informations about %s\n',M_.fname);
fprintf(strcat(' ===================',char(ones(1,length(M_.fname))*'='),'\n\n'));
if(isfield(M_,'block_structure'))
nb_blocks=length(M_.block_structure.block);
fprintf('The model has %d equations and is decomposed in %d blocks as follow:\n',M_.endo_nbr,nb_blocks);
fprintf('==============================================================================================================\n');
fprintf('| %10s | %10s | %30s | %14s | %30s |\n','Block n<>','Size','Block Type','Equation','Dependent variable');
fprintf('|============|============|================================|================|================================|\n');
for i=1:nb_blocks
size_block=length(M_.block_structure.block(i).equation);
if(i>1)
fprintf('|------------|------------|--------------------------------|----------------|--------------------------------|\n');
end;
for j=1:size_block
if(j==1)
fprintf('| %3d (%4d) | %10d | %30s | %14d | %30s |\n',i,M_.block_structure.block(i).num,size_block,Sym_type(M_.block_structure.block(i).Simulation_Type),M_.block_structure.block(i).equation(j),M_.endo_names(M_.block_structure.block(i).variable(j),:));
else
fprintf('| %10s | %10s | %30s | %14d | %30s |\n','','','',M_.block_structure.block(i).equation(j),M_.endo_names(M_.block_structure.block(i).variable(j),:));
end;
end;
end;
fprintf('==============================================================================================================\n');
fprintf('\n');
for k=1:M_.maximum_endo_lag+M_.maximum_endo_lead+1
if(k==M_.maximum_endo_lag+1)
fprintf('%-30s %s','the variable','is used in equations contemporously');
elseif(k<M_.maximum_endo_lag+1)
fprintf('%-30s %s %d','the variable','is used in equations with lag ',M_.maximum_endo_lag+1-k);
else
fprintf('%-30s %s %d','the variable','is used in equations with lead ',k-(M_.maximum_endo_lag+1));
end;
if(size(M_.block_structure.incidence(k).sparse_IM,1)>0)
IM=sortrows(M_.block_structure.incidence(k).sparse_IM,2);
else
IM=[];
end;
size_IM=size(IM,1);
last=0;
for i=1:size_IM
if(last~=IM(i,2))
fprintf('\n%-30s',M_.endo_names(IM(i,2),:));
end;
fprintf(' %5d',IM(i,1));
last=IM(i,2);
end;
fprintf('\n\n');
end;
else
fprintf('There is no block decomposition of the model.\nUse ''sparse'' or ''sparse_dll'' model''s option.\n');
end;
function ret=Sym_type(type);
EVALUATE_FOREWARD=0;
EVALUATE_BACKWARD=1;
SOLVE_FOREWARD_SIMPLE=2;
SOLVE_BACKWARD_SIMPLE=3;
SOLVE_TWO_BOUNDARIES_SIMPLE=4;
SOLVE_FOREWARD_COMPLETE=5;
SOLVE_BACKWARD_COMPLETE=6;
SOLVE_TWO_BOUNDARIES_COMPLETE=7;
EVALUATE_FOREWARD_R=8;
EVALUATE_BACKWARD_R=9;
switch (type)
case {EVALUATE_FOREWARD,EVALUATE_FOREWARD_R},
ret='EVALUATE FOREWARD ';
case {EVALUATE_BACKWARD,EVALUATE_BACKWARD_R},
ret='EVALUATE BACKWARD ';
case SOLVE_FOREWARD_SIMPLE,
ret='SOLVE FOREWARD SIMPLE ';
case SOLVE_BACKWARD_SIMPLE,
ret='SOLVE BACKWARD SIMPLE ';
case SOLVE_TWO_BOUNDARIES_SIMPLE,
ret='SOLVE TWO BOUNDARIES SIMPLE ';
case SOLVE_FOREWARD_COMPLETE,
ret='SOLVE FOREWARD COMPLETE ';
case SOLVE_BACKWARD_COMPLETE,
ret='SOLVE BACKWARD COMPLETE ';
case SOLVE_TWO_BOUNDARIES_COMPLETE,
ret='SOLVE TWO BOUNDARIES COMPLETE';
end;