From 6bbc687a30967e81d025b7a22044710775fdd51c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Argos=29?= <stepan@adjemian.eu> Date: Fri, 13 Sep 2024 12:10:45 +0200 Subject: [PATCH] Add example. --- examples/README.org | 15 +++++ examples/rbc.mod | 137 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 examples/README.org create mode 100644 examples/rbc.mod diff --git a/examples/README.org b/examples/README.org new file mode 100644 index 0000000..c17685b --- /dev/null +++ b/examples/README.org @@ -0,0 +1,15 @@ +To run benchmarks on a single =.mod= file (e.g. =rbc.mod=): +#+BEGIN_SRC bash + ~$ DYNARE=/home/stepan/works/Dynare/dynare/matlab ITERATIONS=100 ../run.sh rbc +#+END_SRC +The output is a =.pdf= file named =rbc-COMPUTERNAME.pdf=. The =DYNARE= +variable is mandatory, it holds the path to the =matlab= subfolder of +Dynare. The variable =ITERATIONS= is optional (default value is 1), it +specifies the number of times the problem has to be solved. If the +value is negative, the generated table will report the total time +instead of the average time. + +It is also possible to run benchmarks on an arbitrary number of models: +#+BEGIN_SRC bash + ~$ DYNARE=/home/stepan/works/Dynare/dynare/matlab ITERATIONS=100 ../run.sh rbc sw +#+END_SRC diff --git a/examples/rbc.mod b/examples/rbc.mod new file mode 100644 index 0000000..2be59d5 --- /dev/null +++ b/examples/rbc.mod @@ -0,0 +1,137 @@ +@#ifndef BLOCKS +@#define BLOCKS=true +@#endif + +@#ifndef BYTECODE +@#define BYTECODE=true +@#endif + +@#ifndef USE_DLL +@#define USE_DLL=false +@#endif + +@#ifndef MFS_VALUE +@#define MFS_VALUE = 0 +@#endif + +@#ifndef CUTOFF_VALUE +@#define CUTOFF_VALUE = 0 +@#endif + +@#ifndef PERIODS +@#define PERIODS = 200 +@#endif + +@#ifndef MARKOWITZ_VALUE +@#define MARKOWITZ_VALUE=0.5 +@#endif + +@#ifndef STACK_SOLVE_ALGO_VALUE +@#define STACK_SOLVE_ALGO_VALUE=5 +@#endif + +@#ifndef STEADY_SOLVE_ALGO_VALUE +@#define STEADY_SOLVE_ALGO_VALUE=0 +@#endif + +var Capital, Output, Labour, Consumption, Efficiency, efficiency, ExpectedTerm; + +varexo EfficiencyInnovation; + +parameters beta, theta, tau, alpha, psi, delta, rho, effstar, sigma2; + +beta = 0.9900; +theta = 0.3570; +tau = 2.0000; +alpha = 0.4500; +psi = -0.1000; +delta = 0.0200; +rho = 0.8000; +effstar = 1.0000; +sigma2 = 0; + +@#if !BLOCKS && !BYTECODE && !USE_DLL +model; +@#elseif BLOCKS && !BYTECODE && !USE_DLL +model(block, cutoff=@{CUTOFF_VALUE}, mfs=@{MFS_VALUE}); +@#elseif !BLOCKS && BYTECODE +model(bytecode); +@#elseif BLOCKS && BYTECODE +model(block, bytecode, cutoff=@{CUTOFF_VALUE}, mfs=@{MFS_VALUE}); +@#elseif !BLOCKS && USE_DLL +model(use_dll); +@#else +model(block, use_dll, cutoff=@{CUTOFF_VALUE}, mfs=@{MFS_VALUE}); +@#endif + + // Eq. n°1: + efficiency = rho*efficiency(-1) + EfficiencyInnovation; + + // Eq. n°2: + Efficiency = effstar*exp(efficiency); + + // Eq. n°3: + Output = Efficiency*(alpha*(Capital(-1)^psi)+(1-alpha)*(Labour^psi))^(1/psi); + + // Eq. n°4: + Capital = Output-Consumption + (1-delta)*Capital(-1); + + // Eq. n°5: + ((1-theta)/theta)*(Consumption/(1-Labour)) - (1-alpha)*(Output/Labour)^(1-psi); + + // Eq. n°6: + (((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption = ExpectedTerm(1); + + // Eq. n°7: + ExpectedTerm = beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption)*(alpha*((Output/Capital(-1))^(1-psi))+(1-delta)); + +end; + +steady_state_model; + + efficiency = EfficiencyInnovation/(1-rho); + + Efficiency = effstar*exp(efficiency); + + Output_per_unit_of_Capital=((1/beta-1+delta)/alpha)^(1/(1-psi)); + + Consumption_per_unit_of_Capital=Output_per_unit_of_Capital-delta; + + Labour_per_unit_of_Capital=(((Output_per_unit_of_Capital/Efficiency)^psi-alpha)/(1-alpha))^(1/psi); + + Output_per_unit_of_Labour=Output_per_unit_of_Capital/Labour_per_unit_of_Capital; + + Consumption_per_unit_of_Labour=Consumption_per_unit_of_Capital/Labour_per_unit_of_Capital; + + % Compute steady state share of capital. + ShareOfCapital=alpha/(alpha+(1-alpha)*Labour_per_unit_of_Capital^psi); + + % Compute steady state of the endogenous variables. + Labour=1/(1+Consumption_per_unit_of_Labour/((1-alpha)*theta/(1-theta)*Output_per_unit_of_Labour^(1-psi))); + + Consumption=Consumption_per_unit_of_Labour*Labour; + + Capital=Labour/Labour_per_unit_of_Capital; + + Output=Output_per_unit_of_Capital*Capital; + + ExpectedTerm=beta*((((Consumption^theta)*((1-Labour)^(1-theta)))^(1-tau))/Consumption)*(alpha*((Output/Capital)^(1-psi))+1-delta); + +end; + +steady; + +ik = varlist_indices('Capital', M_.endo_names); +CapitalSS = oo_.steady_state(ik); + +for i=1:@{ITERATIONS} + +histval; +Capital(0) = CapitalSS/2; +end; + +perfect_foresight_setup(periods=@{PERIODS}); + +perfect_foresight_solver(no_homotopy, markowitz=@{MARKOWITZ_VALUE}, stack_solve_algo = @{STACK_SOLVE_ALGO_VALUE}, solve_algo = @{STEADY_SOLVE_ALGO_VALUE}); + +end; -- GitLab