Note that it’s perfectly normal that `--no-centralize`

and `--centralize`

generate the same results. This is the expected behaviour, see the Dynare++ tutorial. There are still tiny numerical differences between the two, due to numerical approximation errors. Also note that if you pass `--no-centralize`

to Dynare++, you will get *exactly* the same policy function as in Dynare.

Regarding the rather large numerical differences between the IRFs, you are perfectly right, and it took me some time to figure out why.

This comes from the fact that the exogenous shocks in the model are correlated, and Dynare and Dynare++ do not treat this situation in the same way.

Dynare takes into account the correlation between the shocks: when it simulates an IRF for EPS, it simultaneously “adds” a shock on NU, because the two are correlated. Technically, Dynare identifies structural (independent) shocks underlying EPS and NU by performing a Cholesky decomposition of the variance-covariance matrix; the result of this process is dependent on the declaration order of the shocks. Only the first declared shock (EPS) is considered as structural, and NU is considered to be a linear combination of EPS and of an (unnamed) structural shock (which is thus independent from EPS). The IRFs with respect to NU actually corresponds to the response of the model to this unnamed structural shock.

On the other hand, Dynare++ ignores the correlation when computing the IRFs. It acts as if the shocks were independent, and thus adds no shock on NU when simulating an IRF for EPS.

I think the behaviour of Dynare is preferable, because it takes into account the declared correlation, and we can probably consider this to be a bug in Dynare++. But this is still a matter of interpretation. One could conversely consider that when one asks for the IRF of a shock, the implicit assumption is that this shock is independent from the others.

The best remains to avoid correlated shocks, and to only declare structural shocks.