2019-11-26 17:05:14 +01:00
function [ys,params,check] = NK_baseline_steadystate ( ys,exo,M_,options_)
% function [ys,params,check] = NK_baseline_steadystate(ys,exo,M_,options_)
2013-12-03 11:24:01 +01:00
% computes the steady state for the NK_baseline.mod and uses a numerical
% solver to do so
% Inputs:
% - ys [vector] vector of initial values for the steady state of
% the endogenous variables
% - exo [vector] vector of values for the exogenous variables
2019-11-26 17:05:14 +01:00
% - M_ [structure] Dynare model structure
% - options [structure] Dynare options structure
2013-12-03 11:24:01 +01:00
%
% Output:
2019-08-10 09:02:27 +02:00
% - ys [vector] vector of steady state values for the the endogenous variables
2019-11-26 17:05:14 +01:00
% - params [vector] vector of parameter values
2013-12-03 11:24:01 +01:00
% - check [scalar] set to 0 if steady state computation worked and to
2019-08-10 09:02:27 +02:00
% 1 of not (allows to impose restrictions on parameters)
2013-12-03 11:24:01 +01:00
% read out parameters to access them with their name
2013-04-27 21:12:50 +02:00
NumberOfParameters = M_ . param_nbr ;
2013-12-03 11:24:01 +01:00
for ii = 1 : NumberOfParameters
2017-10-10 10:05:59 +02:00
paramname = M_ . param_names { ii } ;
2013-12-03 11:24:01 +01:00
eval ( [ paramname ' = M_.params(' int2str ( ii ) ' );' ] ) ;
2013-04-27 21:12:50 +02:00
end
2013-12-03 11:24:01 +01:00
% initialize indicator
2013-04-27 21:12:50 +02:00
check = 0 ;
%% Enter model equations here
options = optimset ( ) ; % set options for numerical solver
2019-08-10 09:02:27 +02:00
% the steady state computation follows FVRR (2006), section 4.1
2013-04-27 21:12:50 +02:00
PI = PIbar ;
u = 1 ;
q = 1 ;
d = 1 ;
phi = 1 ;
m = 0 ;
zeta = 1 ;
2017-05-26 10:17:01 +02:00
LambdaYd = ( LambdaA + alppha * Lambdamu ) / ( 1 - alppha ) ;
2013-04-27 21:12:50 +02:00
mu_z = exp ( LambdaYd ) ;
mu_I = exp ( Lambdamu ) ;
mu_A = exp ( LambdaA ) ;
%set the parameter Lambdax
Lambdax = mu_z ;
%set the parameter gammma1
gammma1 = mu_z * mu_I / betta - ( 1 - delta ) ;
2013-12-03 11:24:01 +01:00
if gammma1 < 0 % parameter violates restriction; Preventing this cannot be implemented via prior restriction as it is a composite of different parameters and the valid prior region has unknown form
check = 1 ; %set failure indicator
return ; %return without updating steady states
end
2013-04-27 21:12:50 +02:00
r = 1 * gammma1 ;
R = 1 + ( PI * mu_z / betta - 1 ) ;
%set Rbar
Rbar = R ;
PIstar = ( ( 1 - thetap * PI ^( - ( 1 - epsilon ) * ( 1 - chi ) ) ) / ( 1 - thetap ) ) ^( 1 / ( 1 - epsilon ) ) ;
PIstarw = ( ( 1 - thetaw * PI ^( - ( 1 - chiw ) * ( 1 - eta ) ) * mu_z ^( - ( 1 - eta ) ) ) / ( 1 - thetaw ) ) ^( 1 / ( 1 - eta ) ) ;
mc = ( epsilon - 1 ) / epsilon * ( 1 - betta * thetap * PI ^( ( 1 - chi ) * epsilon ) ) / ( 1 - betta * thetap * PI ^( - ( 1 - epsilon ) * ( 1 - chi ) ) ) * PIstar ;
w = ( 1 - alppha ) * ( mc * ( alppha / r ) ^alppha ) ^( 1 / ( 1 - alppha ) ) ;
wstar = w * PIstarw ;
vp = ( 1 - thetap ) / ( 1 - thetap * PI ^( ( 1 - chi ) * epsilon ) ) * PIstar ^( - epsilon ) ;
vw = ( 1 - thetaw ) / ( 1 - thetaw * PI ^( ( 1 - chiw ) * eta ) * mu_z ^eta ) * PIstarw ^( - eta ) ;
tempvaromega = alppha / ( 1 - alppha ) * w / r * mu_z * mu_I ;
2015-10-17 08:52:57 +02:00
[ ld , fval , exitflag ] = fzero ( @ ( ld ) ( 1 - betta * thetaw * mu_z ^( eta - 1 ) * PI ^( - ( 1 - chiw ) * ( 1 - eta ) ) ) / ( 1 - betta * thetaw * mu_z ^( eta * ( 1 + gammma ) ) * PI ^( eta * ( 1 - chiw ) * ( 1 + gammma ) ) ) ...
2013-04-27 21:12:50 +02:00
- ( eta - 1 ) / eta * wstar / ( varpsi * PIstarw ^( - eta * gammma ) * ld ^gammma ) * ( ( 1 - h * mu_z ^( - 1 ) ) ^( - 1 ) - betta * h * ( mu_z - h ) ^( - 1 ) ) * ...
( ( mu_A * mu_z ^( - 1 ) * vp ^( - 1 ) * tempvaromega ^alppha - tempvaromega * ( 1 - ( 1 - delta ) * ( mu_z * mu_I ) ^( - 1 ) ) ) * ld - vp ^( - 1 ) * Phi ) ^( - 1 ) , 0.25 , options ) ;
2013-12-03 11:24:01 +01:00
if exitflag < 1
%indicate the SS computation was not sucessful; this would also be detected by Dynare
%setting the indicator here shows how to use this functionality to
%filter out parameter draws
check = 1 ; %set failure indicator
return ; %return without updating steady states
end
2013-04-27 21:12:50 +02:00
l = vw * ld ;
k = tempvaromega * ld ;
x = ( 1 - ( 1 - delta ) * ( mu_z * mu_I ) ^( - 1 ) ) * k ;
yd = ( mu_A / mu_z * k ^alppha * ld ^( 1 - alppha ) - Phi ) / vp ;
c = ( mu_A * mu_z ^( - 1 ) * vp ^( - 1 ) * tempvaromega ^alppha - tempvaromega * ( 1 - ( 1 - delta ) * ( mu_z * mu_I ) ^( - 1 ) ) ) * ld - vp ^( - 1 ) * Phi ;
lambda = ( 1 - h * betta * mu_z ^( - 1 ) ) * ( 1 - h / mu_z ) ^( - 1 ) / c ;
F = yd - 1 / ( 1 - alppha ) * w * ld ;
f = ( eta - 1 ) / eta * wstar * PIstarw ^( - eta ) * lambda * ld / ( 1 - betta * thetaw * mu_z ^( eta - 1 ) * PI ^( - ( 1 - chiw ) * ( 1 - eta ) ) ) ;
f2 = varpsi * d * phi * PIstarw ^( - eta * ( 1 + gammma ) ) * ld ^( 1 + gammma ) / ( 1 - betta * thetaw * ( PI ^chiw / PI ) ^( - eta * ( 1 + gammma ) ) * ( wstar / wstar * mu_z ) ^( eta * ( 1 + gammma ) ) ) ;
g1 = lambda * mc * yd / ( 1 - betta * thetap * PI ^( ( 1 - chi ) * epsilon ) ) ;
g2 = epsilon / ( epsilon - 1 ) * g1 ;
%% end own model equations
2019-11-26 17:05:14 +01:00
params = NaN ( NumberOfParameters , 1 ) ;
2013-12-03 11:24:01 +01:00
for iter = 1 : length ( M_ . params ) %update parameters set in the file
2019-11-26 17:05:14 +01:00
eval ( [ ' params(' num2str ( iter ) ' ) = ' M_ . param_names { iter } ' ;' ] )
2013-04-27 21:12:50 +02:00
end
2013-12-03 11:24:01 +01:00
NumberOfEndogenousVariables = M_ . orig_endo_nbr ; %auxiliary variables are set automatically
for ii = 1 : NumberOfEndogenousVariables
2017-10-10 10:05:59 +02:00
varname = M_ . endo_names { ii } ;
2013-12-03 11:24:01 +01:00
eval ( [ ' ys(' int2str ( ii ) ' ) = ' varname ' ;' ] ) ;
2013-04-27 21:12:50 +02:00
end