Hi,
I’m trying to produce a deterministic path using the forecast command together with the histval block.

When I compute the forecast (iteration on the state-space model) directly I get different results for many variables than those produced by “forecast”.

To be sure I use the same iteration to produce IRFs and the results are identical to the IRFs produced by Dynare. I take from that that the representation of the state space (ie A) is correct.

Absent shocks, is it correct that Dynare generates a forecast starting from the initial condition Y_0 by simply iterating the following?

Y(1)=Y_0;
for cnt=2:horizon
Y(cnt)=A*Y(cnt-1);
end;

where A is the transition matrix that can generate the correct IRFs mentioned above.

Note that if the variable that is “perturbed” in vector Y_0 is exogenous, the path of that variable is correct, but not that of the other variables.

Note also that if I have all innovations set to zero (ie M_.Sigma_e=zero matrix) and have that

histval;
TFP(0)=0; % steady state value of TFP is zero
TFP(-1)=0;
end;

Then the forecast produces a path for endogenous variables but a zero for TFP. I run steady_ before stoch_simul and forecast.

If I omit the histval block, then no path is produced (flat lines).

Yes, Dynare iterates forward on the state space representation. How did you set the initial condition? Every state not initialized will be set to 0. An example is

var y, c, k, a, h, b;
varexo e, u;
parameters beta, rho, alpha, delta, theta, psi, tau;
alpha = 0.36;
rho = 0.95;
tau = 0.025;
beta = 0.99;
delta = 0.025;
psi = 0;
theta = 2.95;
phi = 0.1;
model;
c*theta*h^(1+psi)=(1-alpha)*y;
k = beta*(((exp(b)*c)/(exp(b(+1))*c(+1)))
*(exp(b(+1))*alpha*y(+1)+(1-delta)*k));
y = exp(a)*(k(-1)^alpha)*(h^(1-alpha));
k = exp(b)*(y-c)+(1-delta)*k(-1);
a = rho*a(-1)+tau*b(-1) + e;
b = tau*a(-1)+rho*b(-1) + u;
end;
initval;
y = 1.08068253095672;
c = 0.80359242014163;
h = 0.29175631001732;
k = 11.08360443260358;
a = 0;
b = 0;
e = 0;
u = 0;
end;
steady;
shocks;
var e; stderr 0.009;
var u; stderr 0.009;
var e, u = phi*0.009*0.009;
end;
stoch_simul(order=1);
histval;
a(0)=1;
k(0) = 11.08360443260358;
end;
forecast;

Indeed. Alternatively, forget about the histval-block and directly fill the contents of M_.endo_histval, starting from the last steady state in stoch_simul: