dynare_simul_: remove instances of mexErrMsgTxt
parent
982b4d0491
commit
92cb073f3a
|
@ -21,6 +21,7 @@
|
||||||
// output:
|
// output:
|
||||||
// res simulated results
|
// res simulated results
|
||||||
|
|
||||||
|
#include "dynmex.h"
|
||||||
#include "mex.h"
|
#include "mex.h"
|
||||||
|
|
||||||
#include "decision_rule.h"
|
#include "decision_rule.h"
|
||||||
|
@ -28,19 +29,15 @@
|
||||||
#include "SylvException.h"
|
#include "SylvException.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
void mexFunction(int nhls, mxArray* plhs[],
|
void mexFunction(int nlhs, mxArray* plhs[],
|
||||||
int nhrs, const mxArray* prhs[])
|
int nhrs, const mxArray* prhs[])
|
||||||
{
|
{
|
||||||
if (nhrs < 12)
|
if (nhrs < 12 || nlhs != 2)
|
||||||
mexErrMsgTxt("Must have at least 12 input parameters.\n");
|
DYN_MEX_FUNC_ERR_MSG_TXT("dynare_simul_ must have at least 12 input parameters and exactly 2 output arguments.\n");
|
||||||
if (nhls != 1)
|
|
||||||
mexErrMsgTxt("Must have exactly 1 output parameter.\n");
|
|
||||||
|
|
||||||
int order = (int)mxGetScalar(prhs[0]);
|
int order = (int)mxGetScalar(prhs[0]);
|
||||||
if (nhrs != 12 + order) {
|
if (nhrs != 12 + order)
|
||||||
mexErrMsgTxt("Must have exactly 11+order input parameters.\n");
|
DYN_MEX_FUNC_ERR_MSG_TXT("dynare_simul_ must have exactly 11+order input parameters.\n");
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int nstat = (int)mxGetScalar(prhs[1]);
|
int nstat = (int)mxGetScalar(prhs[1]);
|
||||||
int npred = (int)mxGetScalar(prhs[2]);
|
int npred = (int)mxGetScalar(prhs[2]);
|
||||||
|
@ -60,20 +57,20 @@ extern "C" {
|
||||||
|
|
||||||
int ny = nstat + npred + nboth + nforw;
|
int ny = nstat + npred + nboth + nforw;
|
||||||
if (ny != ystart_dim[0])
|
if (ny != ystart_dim[0])
|
||||||
mexErrMsgTxt("ystart has wrong number of rows.\n");
|
DYN_MEX_FUNC_ERR_MSG_TXT("ystart has wrong number of rows.\n");
|
||||||
if (1 != ystart_dim[1])
|
if (1 != ystart_dim[1])
|
||||||
mexErrMsgTxt("ystart has wrong number of cols.\n");
|
DYN_MEX_FUNC_ERR_MSG_TXT("ystart has wrong number of cols.\n");
|
||||||
int nper = shocks_dim[1];
|
int nper = shocks_dim[1];
|
||||||
if (nexog != shocks_dim[0])
|
if (nexog != shocks_dim[0])
|
||||||
mexErrMsgTxt("shocks has a wrong number of rows.\n");
|
DYN_MEX_FUNC_ERR_MSG_TXT("shocks has a wrong number of rows.\n");
|
||||||
if (nexog != vcov_dim[0])
|
if (nexog != vcov_dim[0])
|
||||||
mexErrMsgTxt("vcov has a wrong number of rows.\n");
|
DYN_MEX_FUNC_ERR_MSG_TXT("vcov has a wrong number of rows.\n");
|
||||||
if (nexog != vcov_dim[1])
|
if (nexog != vcov_dim[1])
|
||||||
mexErrMsgTxt("vcov has a wrong number of cols.\n");
|
DYN_MEX_FUNC_ERR_MSG_TXT("vcov has a wrong number of cols.\n");
|
||||||
if (ny != ysteady_dim[0])
|
if (ny != ysteady_dim[0])
|
||||||
mexErrMsgTxt("ysteady has wrong number of rows.\n");
|
DYN_MEX_FUNC_ERR_MSG_TXT("ysteady has wrong number of rows.\n");
|
||||||
if (1 != ysteady_dim[1])
|
if (1 != ysteady_dim[1])
|
||||||
mexErrMsgTxt("ysteady has wrong number of cols.\n");
|
DYN_MEX_FUNC_ERR_MSG_TXT("ysteady has wrong number of cols.\n");
|
||||||
|
|
||||||
mxArray* res = mxCreateDoubleMatrix(ny, nper, mxREAL);
|
mxArray* res = mxCreateDoubleMatrix(ny, nper, mxREAL);
|
||||||
|
|
||||||
|
@ -91,13 +88,13 @@ extern "C" {
|
||||||
char buf[1000];
|
char buf[1000];
|
||||||
sprintf(buf, "Wrong number of columns for folded tensor: got %d but I want %d\n",
|
sprintf(buf, "Wrong number of columns for folded tensor: got %d but I want %d\n",
|
||||||
gk_dim[1], ft.ncols());
|
gk_dim[1], ft.ncols());
|
||||||
mexErrMsgTxt(buf);
|
DYN_MEX_FUNC_ERR_MSG_TXT(buf);
|
||||||
}
|
}
|
||||||
if (ft.nrows() != gk_dim[0]) {
|
if (ft.nrows() != gk_dim[0]) {
|
||||||
char buf[1000];
|
char buf[1000];
|
||||||
sprintf(buf, "Wrong number of rows for folded tensor: got %d but I want %d\n",
|
sprintf(buf, "Wrong number of rows for folded tensor: got %d but I want %d\n",
|
||||||
gk_dim[0], ft.nrows());
|
gk_dim[0], ft.nrows());
|
||||||
mexErrMsgTxt(buf);
|
DYN_MEX_FUNC_ERR_MSG_TXT(buf);
|
||||||
}
|
}
|
||||||
ft.zeros();
|
ft.zeros();
|
||||||
ConstTwoDMatrix gk_mat(ft.nrows(), ft.ncols(), mxGetPr(gk));
|
ConstTwoDMatrix gk_mat(ft.nrows(), ft.ncols(), mxGetPr(gk));
|
||||||
|
@ -121,13 +118,14 @@ extern "C" {
|
||||||
TwoDMatrix res_tmp_mat(ny, nper, mxGetPr(res));
|
TwoDMatrix res_tmp_mat(ny, nper, mxGetPr(res));
|
||||||
res_tmp_mat = (const TwoDMatrix&)(*res_mat);
|
res_tmp_mat = (const TwoDMatrix&)(*res_mat);
|
||||||
delete res_mat;
|
delete res_mat;
|
||||||
plhs[0] = res;
|
plhs[1] = res;
|
||||||
} catch (const KordException& e) {
|
} catch (const KordException& e) {
|
||||||
mexErrMsgTxt("Caugth Kord exception.");
|
DYN_MEX_FUNC_ERR_MSG_TXT("Caugth Kord exception.");
|
||||||
} catch (const TLException& e) {
|
} catch (const TLException& e) {
|
||||||
mexErrMsgTxt("Caugth TL exception.");
|
DYN_MEX_FUNC_ERR_MSG_TXT("Caugth TL exception.");
|
||||||
} catch (SylvException& e) {
|
} catch (SylvException& e) {
|
||||||
mexErrMsgTxt("Caught Sylv exception.");
|
DYN_MEX_FUNC_ERR_MSG_TXT("Caught Sylv exception.");
|
||||||
}
|
}
|
||||||
|
plhs[0] = mxCreateDoubleScalar(0);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
%
|
%
|
||||||
% SYNOPSIS
|
% SYNOPSIS
|
||||||
%
|
%
|
||||||
% r = dynare_simul(name, shocks)
|
% [err, r] = dynare_simul(name, shocks)
|
||||||
% r = dynare_simul(name, prefix, shocks)
|
% [err, r] = dynare_simul(name, prefix, shocks)
|
||||||
% r = dynare_simul(name, shocks, start)
|
% [err, r] = dynare_simul(name, shocks, start)
|
||||||
% r = dynare_simul(name, prefix, shocks, start)
|
% [err, r] = dynare_simul(name, prefix, shocks, start)
|
||||||
%
|
%
|
||||||
% name name of MAT-file produced by dynare++
|
% name name of MAT-file produced by dynare++
|
||||||
% prefix prefix of variables in the MAT-file
|
% prefix prefix of variables in the MAT-file
|
||||||
|
@ -43,26 +43,30 @@
|
||||||
%
|
%
|
||||||
% shocks = zeros(4,100); % 4 exogenous variables in the model
|
% shocks = zeros(4,100); % 4 exogenous variables in the model
|
||||||
% shocks(dyn_i_EPS3,:) = -0.1; % the permanent shock to EPS3
|
% shocks(dyn_i_EPS3,:) = -0.1; % the permanent shock to EPS3
|
||||||
% r = dynare_simul('your_model.mat',shocks);
|
% [err, r] = dynare_simul('your_model.mat',shocks);
|
||||||
%
|
%
|
||||||
% 2. one stochastic simulation for 100 periods
|
% 2. one stochastic simulation for 100 periods
|
||||||
%
|
%
|
||||||
% shocks = zeros(4,100)./0; % put NaNs everywhere
|
% shocks = zeros(4,100)./0; % put NaNs everywhere
|
||||||
% r = dynare_simul('your_model.mat',shocks);
|
% [err, r] = dynare_simul('your_model.mat',shocks);
|
||||||
%
|
%
|
||||||
% 3. one stochastic simulation starting at 75% undercapitalized economy
|
% 3. one stochastic simulation starting at 75% undercapitalized economy
|
||||||
%
|
%
|
||||||
% shocks = zeros(4,100)./0; % put NaNs everywhere
|
% shocks = zeros(4,100)./0; % put NaNs everywhere
|
||||||
% ystart = dyn_ss; % get copy of DR fix point
|
% ystart = dyn_ss; % get copy of DR fix point
|
||||||
% ystart(dyn_i_K) = 0.75*dyn_ss(dyn_i_K); % scale down the capital
|
% ystart(dyn_i_K) = 0.75*dyn_ss(dyn_i_K); % scale down the capital
|
||||||
% r = dynare_simul('your_model.mat',shocks,ystart);
|
% [err, r] = dynare_simul('your_model.mat',shocks,ystart);
|
||||||
%
|
%
|
||||||
%
|
%
|
||||||
% SEE ALSO
|
% SEE ALSO
|
||||||
%
|
%
|
||||||
% "DSGE Models with Dynare++. A Tutorial.", Ondra Kamenik, 2005
|
% "DSGE Models with Dynare++. A Tutorial.", Ondra Kamenik, 2005
|
||||||
|
|
||||||
function r = dynare_simul(varargin)
|
function [err, r] = dynare_simul(varargin)
|
||||||
|
|
||||||
|
if nargout ~= 2 || nargin < 12
|
||||||
|
error('dynare_simul_ must have at least 12 input parameters and exactly 2 output arguments.');
|
||||||
|
end
|
||||||
|
|
||||||
% get the file name and load data
|
% get the file name and load data
|
||||||
fname = varargin{1};
|
fname = varargin{1};
|
||||||
|
@ -158,3 +162,4 @@ seed = ceil(10000*rand(1,1));
|
||||||
command = ['r=dynare_simul_(' num2str(order-1) ',nstat,npred,nboth,nforw,' ...
|
command = ['r=dynare_simul_(' num2str(order-1) ',nstat,npred,nboth,nforw,' ...
|
||||||
'nexog,ystart,shocks,vcov_exo,seed,ss' derstr ');'];
|
'nexog,ystart,shocks,vcov_exo,seed,ss' derstr ');'];
|
||||||
eval(command);
|
eval(command);
|
||||||
|
err = 0;
|
||||||
|
|
|
@ -45,20 +45,21 @@ if options_.k_order_solver% Call dynare++ routines.
|
||||||
ex_ = [zeros(1,M_.exo_nbr); ex_];
|
ex_ = [zeros(1,M_.exo_nbr); ex_];
|
||||||
switch options_.order
|
switch options_.order
|
||||||
case 1
|
case 1
|
||||||
y_ = dynare_simul_(1,dr.nstatic,dr.npred-dr.nboth,dr.nboth,dr.nfwrd,M_.exo_nbr, ...
|
[err, y_] = dynare_simul_(1,dr.nstatic,dr.npred-dr.nboth,dr.nboth,dr.nfwrd,M_.exo_nbr, ...
|
||||||
y_(dr.order_var,1),ex_',M_.Sigma_e,options_.seed,dr.ys(dr.order_var),...
|
y_(dr.order_var,1),ex_',M_.Sigma_e,options_.seed,dr.ys(dr.order_var),...
|
||||||
zeros(M_.endo_nbr,1),dr.g_1);
|
zeros(M_.endo_nbr,1),dr.g_1);
|
||||||
case 2
|
case 2
|
||||||
y_ = dynare_simul_(2,dr.nstatic,dr.npred-dr.nboth,dr.nboth,dr.nfwrd,M_.exo_nbr, ...
|
[err, y_] = dynare_simul_(2,dr.nstatic,dr.npred-dr.nboth,dr.nboth,dr.nfwrd,M_.exo_nbr, ...
|
||||||
y_(dr.order_var,1),ex_',M_.Sigma_e,options_.seed,dr.ys(dr.order_var),dr.g_0, ...
|
y_(dr.order_var,1),ex_',M_.Sigma_e,options_.seed,dr.ys(dr.order_var),dr.g_0, ...
|
||||||
dr.g_1,dr.g_2);
|
dr.g_1,dr.g_2);
|
||||||
case 3
|
case 3
|
||||||
y_ = dynare_simul_(3,dr.nstatic,dr.npred-dr.nboth,dr.nboth,dr.nfwrd,M_.exo_nbr, ...
|
[err, y_] = dynare_simul_(3,dr.nstatic,dr.npred-dr.nboth,dr.nboth,dr.nfwrd,M_.exo_nbr, ...
|
||||||
y_(dr.order_var,1),ex_',M_.Sigma_e,options_.seed,dr.ys(dr.order_var),dr.g_0, ...
|
y_(dr.order_var,1),ex_',M_.Sigma_e,options_.seed,dr.ys(dr.order_var),dr.g_0, ...
|
||||||
dr.g_1,dr.g_2,dr.g_3);
|
dr.g_1,dr.g_2,dr.g_3);
|
||||||
otherwise
|
otherwise
|
||||||
error(['order = ' int2str(order) ' isn''t supported'])
|
error(['order = ' int2str(order) ' isn''t supported'])
|
||||||
end
|
end
|
||||||
|
mexErrCheck('dynare_simul_', err);
|
||||||
y_(dr.order_var,:) = y_;
|
y_(dr.order_var,:) = y_;
|
||||||
else
|
else
|
||||||
k2 = dr.kstate(find(dr.kstate(:,2) <= M_.maximum_lag+1),[1 2]);
|
k2 = dr.kstate(find(dr.kstate(:,2) <= M_.maximum_lag+1),[1 2]);
|
||||||
|
|
Loading…
Reference in New Issue