dynare_simul_: remove instances of mexErrMsgTxt

time-shift
Houtan Bastani 2010-09-22 15:43:36 +02:00
parent 982b4d0491
commit 92cb073f3a
3 changed files with 37 additions and 33 deletions

View File

@ -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);
} }
}; };

View File

@ -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;

View File

@ -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]);