From f944a43b0c69997654e752e9f5e86a14a41e3020 Mon Sep 17 00:00:00 2001 From: Michel Juillard <michel.juillard@mjui.fr> Date: Wed, 19 Sep 2012 17:02:42 +0200 Subject: [PATCH] added code for computing risky steady state in regular models (not portfolio models) --- matlab/dyn_risky_steadystate_solver.m | 47 ++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/matlab/dyn_risky_steadystate_solver.m b/matlab/dyn_risky_steadystate_solver.m index d739a8b19..7f5437909 100644 --- a/matlab/dyn_risky_steadystate_solver.m +++ b/matlab/dyn_risky_steadystate_solver.m @@ -120,6 +120,8 @@ function [dr,info] = dyn_risky_steadystate_solver(ys0,M, ... % ys0(l_var) = x; [resids,dr1] = risky_residuals_ds(x,pm,M,dr,options,oo); ys1 = dr1.ys; + else + pm = model_structure(M,options); end [ys, info] = solve1(func,ys0,1:endo_nbr,1:endo_nbr,0,1, options.gstep, ... @@ -132,9 +134,15 @@ function [dr,info] = dyn_risky_steadystate_solver(ys0,M, ... dr.ys = ys; [resid,dr] = func(ys,pm,M,dr,options,oo); - + dr.ghs2 = zeros(M.endo_nbr,1); + for i=1:M.endo_nbr - disp(sprintf('%16s %12.6f %12.6f',M.endo_names(i,:),ys1(i), ys(i))) + if isfield(options,'portfolio') && options.portfolio == 1 + disp(sprintf('%16s %12.6f %12.6f',M.endo_names(i,:),ys1(i), ... + ys(i))) + else + disp(sprintf('%16s %12.6f %12.6f',M.endo_names(i,:),ys(i))) + end end end @@ -171,8 +179,14 @@ function [resid,dr] = risky_residuals(ys,pm,M,dr,options,oo) dr = first_step_ds(x,pm,M,dr,options,oo); dr.ys = ys; else - d1a = d1; - d2a = d2; + pm = model_structure(M,options); + [dr,info] = dyn_first_order_solver(d1,M,dr,options,0); + if info + print_info(); + end + dr = dyn_second_order_solver(d1,d2,dr,M,... + options.threads.kronecker.A_times_B_kronecker_C,... + options.threads.kronecker.sparse_hessian_times_B_kronecker_C); end gu1 = dr.ghu(pm.i_fwrd_g,:); @@ -414,6 +428,31 @@ function y=unfold3(x,n) end end +function pm = model_structure(M,options) + + + lead_index = M.maximum_endo_lag+2; + lead_lag_incidence = M.lead_lag_incidence; + dr = struct(); + dr = set_state_space(dr,M,options); + pm.i_fwrd_g = find(lead_lag_incidence(lead_index,dr.order_var)'); + + i_fwrd_f1 = nonzeros(lead_lag_incidence(lead_index,dr.order_var)); + pm.i_fwrd_f1 = i_fwrd_f1; + n = nnz(lead_lag_incidence)+M.exo_nbr; + ih = reshape(1:n*n,n,n); + i_fwrd_f2 = ih(i_fwrd_f1,i_fwrd_f1); + pm.i_fwrd_f2 = i_fwrd_f2(:); + i_fwrd1_f2 = ih(i_fwrd_f1,:); + pm.i_fwrd1_f2 = i_fwrd1_f2(:); + + ih = reshape(1:n*n*n,n,n,n); + i_fwrd_f3 = ih(i_fwrd_f1,i_fwrd_f1,i_fwrd_f1); + pm.i_fwrd_f3 = i_fwrd_f3(:); + i_fwrd1_f3 = ih(i_fwrd_f1,i_fwrd_f1,:); + pm.i_fwrd1_f3 = i_fwrd1_f3(:); +end + function pm = portfolio_model_structure(M,options) i_d3_np = []; -- GitLab