My idea was implementing a warning like the one for NaN parameters that is displayed after the preprocessor runs. Expressions are something like a shortcut for a parameter not explicitly defined. Hence, it would be helpful to say:
Warning: Some of the expressions defined (psi) evaluated to NaN. Dynare may not be able to solve the model...
Currently it is very hard to debug the expressions defined by the pound operator, because they are substituted out and you cannot see to what they evaluated. Due to them being substituted out, complex expressions also do not necessarily get translated to NaN. In the specific example ppp.mod from the forum the expressions get written to the ppp_static.m file in the following way:
SIGMABAR__ = 1/(1-params(2)*params(6)); psi__ = (params(2)*(1-params(2))*params(6)^2/(params(2)*(params(2)*params(6)*SIGMABAR__)^2-(1-SIGMABAR__)^2))^0.5;
Hence, Matlab take the root of a negative number and evaluates psi__ to a complex number. Again the problem is that the preprocessor does not check whether expressions like SIGMABAR__ or psi__ evaluate to anything sensible at the start but rather substitutes them into Matlab code without evaluating them.
-----Ursprüngliche Nachricht----- Von: dev-bounces@dynare.org [mailto:dev-bounces@dynare.org] Im Auftrag von Sébastien Villemot Gesendet: Freitag, 6. Juli 2012 10:14 An: List for Dynare developers Betreff: Re: [DynareDev] # operator
"Johannes Pfeifer " jpfeifer@gmx.de writes:
as shown by the mod-file in http://www.dynare.org/phpBB3/viewtopic.php?f=1&t=3870, we don’t check whether expressions defined with the pound operator are complex or not. This may lead to cryptic error messages.
What do you think about adding such a check to the preprocessor. In this regard, checking for NaN might also be a good idea.
Actually complex expressions gets translated to NaN (since the preprocessor only knows real numbers). But we want to allow for NaN in some contexts. So it is not obvious how to deal with that.
-- Sébastien Villemot Researcher in Economics & Debian Maintainer http://www.dynare.org/sebastien Phone: +33-1-40-77-84-04 - GPG Key: 4096R/381A7594