Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Dóra Kocsis
dynare
Commits
92cb073f
Commit
92cb073f
authored
Sep 22, 2010
by
Houtan Bastani
Browse files
dynare_simul_: remove instances of mexErrMsgTxt
parent
982b4d04
Changes
3
Hide whitespace changes
Inline
Side-by-side
dynare++/extern/matlab/dynare_simul.cpp
View file @
92cb073f
...
...
@@ -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
n
h
ls
,
mxArray
*
plhs
[],
void
mexFunction
(
int
nl
h
s
,
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
);
}
};
dynare++/extern/matlab/dynare_simul.m
View file @
92cb073f
%
% 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
;
matlab/simult_.m
View file @
92cb073f
...
...
@@ -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
]);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment