I have derived a continuous version of the Kronecker Delta function(an IF function) for the monetary policy rule, so it gives Rzlb(R)=R for R>0 and Rzlb(R)=0 for R<0.
The function I used is:
Rzlb = k*log(1-exp(-1/k)+exp(r/k));
Which perfectly approximates the "If" function for when k tends to zero.
So I have set k=1/1000 #so some very small value ( a plot can be seen here: http://www.wolframalpha.com/input/?i=%281%2F1000%29*log%281-exp%28-1%2F%281%2F1000%29%29%2Bexp%28x%2F%281%2F1000%29%29%29 )
Also the taylor series approximation follows the "If" function, although it is dependant from which value the approximation is made whether it will give zero everywhere or Rzlb=R everywhere.
I figured for small deviations in R this shouldn't be a problem, only when crossing between negative and positive values.
however, after I ran some models, and saved the output using the dynasave command, I found when comparing the Rzlb output with its R input, the Rzlb function still gave negative values.
I am using the Stoch simulate command, and the function within the log shouldnt be zero.
Any ideas why it doesn't work?
- Code: Select all
y = y(+1) - 1/sigmaC*(r-pi(+1)) + s_b;
pi = beta*pi(+1) + ((1-theta)*(1-beta*theta)/theta)*(sigmaC+sigmaL)*y + s_p;
% Monetary Policy Rule
% R input where rz is the unbounded r, and r is the interest rate constrained to be positive
rz = rho*r(-1) + (1-rho)*( phi_pi*pi + phi_y*y ) + phi_dy*(y-y(-1)) + s_r ;
r = k*log(1-exp(-1/k)+exp(rz/k));