Because at some point throwing exceptions from MEX files (with mexErrMsgTxt())
was not working under Windows 64-bit, we had designed a workaround to avoid
using exceptions.
Most MEX files were returning an error code as their first (or sometimes last)
argument, and that code would have to be checked from the MATLAB code.
Since this workaround is no longer needed, this commit removes it. As a
consequence, the interface of many MEX files is modified.
For some background, see https://www.dynare.org/pipermail/dev/2010-September/000895.html
The k_order_solver does not solve purely backwards models (as is the case in stochastic_solvers.m). But in contrast to stochastic_solvers, there is no check and no warning. Entering the mex-file then results in a crash of Matlab
Previously, with pruning set to 1 and the option k_order_solver, the
fields like dr.ghu were not set in k_order_pert, even at order=1. But
stoch_simul tries to use them to display the decision rules. Similarly
for order 2. The respective setting of the decision rule fields is now
moved to the respective cases and always conducted at order 1 and
conducted at order 2. This avoids crashes if decision rules of
theoretical moments are requested.
With a previously set loglinear option, both k_order_pert and
stochastic_solvers at order>1 transformed the first order solution, but
kept the higher order terms untransformed. Now, both functions output an
error.
Currently, all stochastic solvers put the error code to info(1) and use
print_info to output the error. The only exception was k_order_pert,
which immediately created an error. Thus, the use of k_order_pert did
not allow for continuing after encountering errors, because only
print_info obeys the noprint-option. Replacing mexErrCheck by setting
info should deliver the correct behavior.
Implements and documents the Andreasen et al. 2013 pruning at order=3
and sets it as the default at this order. Michel's pruning based on the
approximation of the forecast function has been assigned the option
pruning_forecast_approximation. The preprocessor-interface still needs
to be added for this option. Moreover, more documentation/a reference
what this option does is needed. At a later point, we might change the
default to Michel's approach.
Replace them by equivalents in M_ (and an extra one: M_.dynamic).
IMPORTANT POINT: oo_.dr.npred used to count both purely backward and mixed/both
variables. This was the cause of lots of confusion. The new M_.npred only
counts purely backward variables.
We now have the following indentities:
M_.npred + M_.nboth + M_.nfwrd + M_.nstatic = M_.endo_nbr
M_.nspred = M_.npred + M_.nboth
M_.nsfwrd = M_.nfwrd + M_.nboth
M_.ndynamic = M_.npred + M_.nboth + M_.nfwrd