dynare_simul_: remove instances of mexErrMsgTxt
parent
982b4d0491
commit
92cb073f3a
|
@ -21,6 +21,7 @@
|
|||
// output:
|
||||
// res simulated results
|
||||
|
||||
#include "dynmex.h"
|
||||
#include "mex.h"
|
||||
|
||||
#include "decision_rule.h"
|
||||
|
@ -28,19 +29,15 @@
|
|||
#include "SylvException.h"
|
||||
|
||||
extern "C" {
|
||||
void mexFunction(int nhls, mxArray* plhs[],
|
||||
void mexFunction(int nlhs, mxArray* plhs[],
|
||||
int nhrs, const mxArray* prhs[])
|
||||
{
|
||||
if (nhrs < 12)
|
||||
mexErrMsgTxt("Must have at least 12 input parameters.\n");
|
||||
if (nhls != 1)
|
||||
mexErrMsgTxt("Must have exactly 1 output parameter.\n");
|
||||
if (nhrs < 12 || nlhs != 2)
|
||||
DYN_MEX_FUNC_ERR_MSG_TXT("dynare_simul_ must have at least 12 input parameters and exactly 2 output arguments.\n");
|
||||
|
||||
int order = (int)mxGetScalar(prhs[0]);
|
||||
if (nhrs != 12 + order) {
|
||||
mexErrMsgTxt("Must have exactly 11+order input parameters.\n");
|
||||
return;
|
||||
}
|
||||
if (nhrs != 12 + order)
|
||||
DYN_MEX_FUNC_ERR_MSG_TXT("dynare_simul_ must have exactly 11+order input parameters.\n");
|
||||
|
||||
int nstat = (int)mxGetScalar(prhs[1]);
|
||||
int npred = (int)mxGetScalar(prhs[2]);
|
||||
|
@ -60,20 +57,20 @@ extern "C" {
|
|||
|
||||
int ny = nstat + npred + nboth + nforw;
|
||||
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])
|
||||
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];
|
||||
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])
|
||||
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])
|
||||
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])
|
||||
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])
|
||||
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);
|
||||
|
||||
|
@ -91,13 +88,13 @@ extern "C" {
|
|||
char buf[1000];
|
||||
sprintf(buf, "Wrong number of columns for folded tensor: got %d but I want %d\n",
|
||||
gk_dim[1], ft.ncols());
|
||||
mexErrMsgTxt(buf);
|
||||
DYN_MEX_FUNC_ERR_MSG_TXT(buf);
|
||||
}
|
||||
if (ft.nrows() != gk_dim[0]) {
|
||||
char buf[1000];
|
||||
sprintf(buf, "Wrong number of rows for folded tensor: got %d but I want %d\n",
|
||||
gk_dim[0], ft.nrows());
|
||||
mexErrMsgTxt(buf);
|
||||
DYN_MEX_FUNC_ERR_MSG_TXT(buf);
|
||||
}
|
||||
ft.zeros();
|
||||
ConstTwoDMatrix gk_mat(ft.nrows(), ft.ncols(), mxGetPr(gk));
|
||||
|
@ -121,13 +118,14 @@ extern "C" {
|
|||
TwoDMatrix res_tmp_mat(ny, nper, mxGetPr(res));
|
||||
res_tmp_mat = (const TwoDMatrix&)(*res_mat);
|
||||
delete res_mat;
|
||||
plhs[0] = res;
|
||||
plhs[1] = res;
|
||||
} catch (const KordException& e) {
|
||||
mexErrMsgTxt("Caugth Kord exception.");
|
||||
DYN_MEX_FUNC_ERR_MSG_TXT("Caugth Kord exception.");
|
||||
} catch (const TLException& e) {
|
||||
mexErrMsgTxt("Caugth TL exception.");
|
||||
DYN_MEX_FUNC_ERR_MSG_TXT("Caugth TL exception.");
|
||||
} 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
|
||||
%
|
||||
% r = dynare_simul(name, shocks)
|
||||
% r = dynare_simul(name, prefix, shocks)
|
||||
% r = dynare_simul(name, shocks, start)
|
||||
% r = dynare_simul(name, prefix, shocks, start)
|
||||
% [err, r] = dynare_simul(name, shocks)
|
||||
% [err, r] = dynare_simul(name, prefix, shocks)
|
||||
% [err, r] = dynare_simul(name, shocks, start)
|
||||
% [err, r] = dynare_simul(name, prefix, shocks, start)
|
||||
%
|
||||
% name name of MAT-file produced by dynare++
|
||||
% prefix prefix of variables in the MAT-file
|
||||
|
@ -43,26 +43,30 @@
|
|||
%
|
||||
% shocks = zeros(4,100); % 4 exogenous variables in the model
|
||||
% 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
|
||||
%
|
||||
% 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
|
||||
%
|
||||
% shocks = zeros(4,100)./0; % put NaNs everywhere
|
||||
% ystart = dyn_ss; % get copy of DR fix point
|
||||
% 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
|
||||
%
|
||||
% "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
|
||||
fname = varargin{1};
|
||||
|
@ -158,3 +162,4 @@ seed = ceil(10000*rand(1,1));
|
|||
command = ['r=dynare_simul_(' num2str(order-1) ',nstat,npred,nboth,nforw,' ...
|
||||
'nexog,ystart,shocks,vcov_exo,seed,ss' derstr ');'];
|
||||
eval(command);
|
||||
err = 0;
|
||||
|
|
|
@ -45,20 +45,21 @@ if options_.k_order_solver% Call dynare++ routines.
|
|||
ex_ = [zeros(1,M_.exo_nbr); ex_];
|
||||
switch options_.order
|
||||
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),...
|
||||
zeros(M_.endo_nbr,1),dr.g_1);
|
||||
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, ...
|
||||
dr.g_1,dr.g_2);
|
||||
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, ...
|
||||
dr.g_1,dr.g_2,dr.g_3);
|
||||
otherwise
|
||||
error(['order = ' int2str(order) ' isn''t supported'])
|
||||
end
|
||||
mexErrCheck('dynare_simul_', err);
|
||||
y_(dr.order_var,:) = y_;
|
||||
else
|
||||
k2 = dr.kstate(find(dr.kstate(:,2) <= M_.maximum_lag+1),[1 2]);
|
||||
|
|
Loading…
Reference in New Issue