dynare/scilab/disp_dr.sci

201 lines
4.0 KiB
Scilab

function []=disp_dr(dr,order,var_list)
// Copyright (C) 2001 Michel Juillard
//
nx = size(dr('ghx'),2);
nu = size(dr('ghu'),2);
k1 = dr('order_var');
kstate = dr('kstate');
k = find(kstate(:,2) <= ykmin_+1);
klag = kstate(k,[1 2]);
nvar = size(var_list,1);
if nvar == 0 then
nvar = endo_nbr;
ivar = [1:nvar];
else
ivar=zeros(nvar,1);
for i=1:nvar
i_tmp = grep_exact(lgy_(k1,:),var_list(i,:));
if isempty(i_tmp) then
dyn_disp(var_list(i,:));
error (['One of the variable specified does not exist']) ;
else
ivar(i) = i_tmp;
end
end
end
dyn_disp('POLICY AND TRANSITION FUNCTIONS');
// variable names
str = ' ';
for i = 1:nvar
str = str+msprintf('%16s',lgy_(k1(ivar(i))));
end
mprintf('%s\n',str);
mfprintf(fh_log,'%s\n',str);
//
// constant
//
str = 'Constant ';
flag = 0;
for i = 1:nvar
x = dr.ys(k1(ivar(i)));
if order == 2 then
x= x+dr.ghs2(ivar(i))/2;
end
if abs(x) > .000001 then
flag = 1;
str = str+msprintf('%16.6f',x);
else
str = str+' 0';
end
end
if flag then
mprintf('%s\n',str);
mfprintf(fh_log,'%s\n',str);
end
if order == 2 then
str = '(Correction) ';
flag = 0;
for i = 1:nvar
x = dr.ghs2(ivar(i))/2;
if abs(x) > 1e-6 then
flag = 1;
str = str+msprintf('%16.6f',x)
else
str = str+' 0';
end
end
if flag then
mprintf('%s\n',str);
mfprintf(fh_log,'%s\n',str);
end
end
//
// ghx
//
for k = 1:nx
flag = 0;
str1 = msprintf('%s(%d)',lgy_(k1(klag(k,1))),klag(k,2)-ykmin_-2);
str = msprintf('%-20s',str1);
for i = 1:nvar
x = dr.ghx(ivar(i),k);
if abs(x)>.000001 then
flag = 1;
str = str+msprintf('%16.6f',x);
else
str = str+' 0';
end
end
if flag then
mprintf('%s\n',str);
mfprintf(fh_log,'%s\n',str);
end
end
//
// ghu
//
for k = 1:nu
flag = 0;
str = msprintf('%-20s',lgx_(k));
for i = 1:nvar
x = dr('ghu')(ivar(i),k);
if abs(x)>.000001 then
flag = 1;
str = str+msprintf('%16.6f',x);
else
str = str+' 0';
end
end
if flag then
mprintf('%s\n',str);
mfprintf(fh_log,'%s\n',str);
end
end
if order>1 then
// ghxx
for k = 1:nx
for j = 1:k
flag = 0;
str = msprintf('%-20s',lgy_(k1(dr('nstatic')+k),:)+'(-1)'+lgy_(k1(dr('nstatic')+j),:)+'(-1)');
for i = 1:endo_nbr
if k==j then
x = dr.ghxx(i,(k-1)*nx+j)/2;
else
x = dr.ghxx(i,(k-1)*nx+j);
end
if abs(x)>.000001 then
flag = 1;
str = str+msprintf('%16.6f',x);
else
str = str+' 0';
end
end
if flag then
mprintf('%s\n',str);
mfprintf(fh_log,'%s\n',str);
end
end
end
//
// ghuu
//
for k = 1:nu
for j = 1:k
flag = 0;
str = msprintf('%-20s',lgx_(k,:)+' '+lgx_(j,:));
for i = 1:endo_nbr
if k==j then
x = dr.ghuu(i,(k-1)*nu+j)/2;
else
x = dr.ghuu(i,(k-1)*nu+j);
end
if abs(x)>.000001 then
flag = 1;
str = str+msprintf('%16.6f',x);
else
str = str+' 0';
end
end
if flag then
mprintf('%s\n',str);
mfprintf(fh_log,'%s\n',str);
end
end
end
//
// ghxu
//
for k = 1:nx
for j = 1:nu
flag = 0;
str = msprintf('%-20s',lgy_(k1(dr('nstatic')+k),:)+'(-1) '+lgx_(j,:));
for i = 1:endo_nbr
x = dr.ghxu(i,(k-1)*nu+j);
if abs(x)>.000001 then
flag = 1;
str = str+msprintf('%16.6f',x);
else
str = str+' 0';
end
end
if flag then
mprintf('%s\n',str);
mfprintf(fh_log,'%s\n',str);
end
end
end
end
// 01/08/2001 MJ added test for order in printing quadratic terms
// 02/21/2001 MJ pass all variable names through deblank()
// 02/21/2001 MJ changed from f to g format to write numbers
// 02/21/2003 MJ improved display format