Merge branch 'master' into ecb-master
commit
650c78f99d
|
@ -52,7 +52,7 @@ testsuite_matlab:
|
|||
dependencies:
|
||||
- build_binaries
|
||||
|
||||
.testsuite_octave_template: &testsuite_octave_definition
|
||||
.testsuite_octave_template:
|
||||
stage: test
|
||||
variables:
|
||||
OPENBLAS_NUM_THREADS: 1
|
||||
|
@ -74,13 +74,13 @@ testsuite_matlab:
|
|||
- build_binaries
|
||||
|
||||
testsuite_octave_auto:
|
||||
<<: *testsuite_octave_definition
|
||||
extends: .testsuite_octave_template
|
||||
only:
|
||||
- tags
|
||||
- schedules
|
||||
|
||||
testsuite_octave_manual:
|
||||
<<: *testsuite_octave_definition
|
||||
extends: .testsuite_octave_template
|
||||
except:
|
||||
- tags
|
||||
- schedules
|
||||
|
|
|
@ -27,8 +27,6 @@ EXTRA_DIST = \
|
|||
COPYING \
|
||||
CONTRIBUTING.md \
|
||||
windows/dynare.nsi \
|
||||
windows/mexopts-win32.bat \
|
||||
windows/mexopts-win64.bat \
|
||||
windows/README.txt \
|
||||
osx \
|
||||
examples \
|
||||
|
|
4
NEWS
4
NEWS
|
@ -11,7 +11,7 @@ The Windows packages are already available for download at:
|
|||
|
||||
The Mac and GNU/Linux packages (for Debian and Ubuntu LTS) should follow soon.
|
||||
|
||||
This release is compatible with MATLAB versions 7.5 (R2007b) to 9.3 (R2018a)
|
||||
This release is compatible with MATLAB versions 7.5 (R2007b) to 9.4 (R2018a)
|
||||
and with GNU Octave versions 4.4.
|
||||
|
||||
Here is a list of the problems identified in version 4.5.5 and that have been
|
||||
|
@ -57,7 +57,7 @@ The Windows packages are already available for download at:
|
|||
|
||||
The Mac and GNU/Linux packages (for Debian and Ubuntu LTS) should follow soon.
|
||||
|
||||
This release is compatible with MATLAB versions 7.5 (R2007b) to 9.3 (R2018a)
|
||||
This release is compatible with MATLAB versions 7.5 (R2007b) to 9.4 (R2018a)
|
||||
and with GNU Octave versions 4.2.
|
||||
|
||||
Here is a list of the problems identified in version 4.5.4 and that have been
|
||||
|
|
170
README.md
170
README.md
|
@ -7,8 +7,6 @@
|
|||
|
||||
# Dynare
|
||||
|
||||
[![Join the chat at https://gitter.im/DynareTeam](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/DynareTeam?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
|
||||
Described on the homepage: <http://www.dynare.org/>
|
||||
|
||||
Most users should use the precompiled package available for your OS, also
|
||||
|
@ -40,19 +38,19 @@ Note that if you obtain the source code via git, you will need to install more t
|
|||
|
||||
The first section of this page gives general instructions, which apply to all platforms. Then some specific platforms are discussed.
|
||||
|
||||
**NB**: Here, when we refer to 32-bit or 64-bit, we refer to the type of MATLAB installation, not the type of Windows installation. It is perfectly possible to run a 32-bit MATLAB on a 64-bit Windows: in that case, instructions for Windows 32-bit should be followed. To determine the type of your MATLAB installation, type:
|
||||
**Note:** Here, when we refer to 32-bit or 64-bit, we refer to the type of MATLAB installation, not the type of Windows installation. It is perfectly possible to run a 32-bit MATLAB on a 64-bit Windows: in that case, instructions for Windows 32-bit should be followed. To determine the type of your MATLAB installation, type:
|
||||
```matlab
|
||||
>> computer
|
||||
```
|
||||
at the MATLAB prompt: if it returns `PCWIN`, then you have a 32-bit MATLAB; if it returns `PCWIN64`, then you have a 64-bit MATLAB.
|
||||
at the MATLAB prompt: if it returns `PCWIN64`, `GLNX64` or `MACI64`, then you
|
||||
have a 64-bit MATLAB; if it returns `PCWIN`, `MACI` or `GLNX`, then you have a
|
||||
32-bit MATLAB.
|
||||
|
||||
**Contents**
|
||||
|
||||
1. [**General Instructions**](#general-instructions)
|
||||
1. [**Debian or Ubuntu**](#debian-or-ubuntu)
|
||||
1. [**Fedora**](#fedora)
|
||||
1. [**Windows**](#windows)
|
||||
1. [**Windows Subsystem for Linux**](#windows-subsystem-for-linux)
|
||||
1. [**macOS**](#macos)
|
||||
|
||||
## General Instructions
|
||||
|
@ -63,14 +61,16 @@ A number of tools and libraries are needed in order to recompile everything. You
|
|||
|
||||
- A POSIX compliant shell and an implementation of Make (mandatory)
|
||||
- The [GNU Compiler Collection](http://gcc.gnu.org/), with gcc, g++ and gfortran (mandatory)
|
||||
- MATLAB (if you want to compile MEX for MATLAB)
|
||||
- [GNU Octave](http://www.octave.org), with the development headers (if you want to compile MEX for Octave)
|
||||
- MATLAB (if you want to compile the MEX for MATLAB)
|
||||
- [GNU Octave](http://www.octave.org), with the development headers (if you
|
||||
want to compile the MEX for Octave)
|
||||
- [Boost libraries](http://www.boost.org), version 1.36 or later (with the filesystem library compiled)
|
||||
- [Bison](http://www.gnu.org/software/bison/), version 2.5 or later (only if you get the source through Git)
|
||||
- [Bison](http://www.gnu.org/software/bison/), version 3.0 or later (only if you get the source through Git)
|
||||
- [Flex](http://flex.sourceforge.net/), version 2.5.4 or later (only if you get the source through Git)
|
||||
- [Autoconf](http://www.gnu.org/software/autoconf/), version 2.62 or later (only if you get the source through Git) (see [Installing an updated version of Autoconf in your own directory, in GNU/Linux](http://www.dynare.org/DynareWiki/AutoMake))
|
||||
- [Automake](http://www.gnu.org/software/automake/), version 1.11.2 or later (only if you get the source through Git) (see [Installing an updated version of AutoMake in your own directory, in GNU/Linux](http://www.dynare.org/DynareWiki/AutoMake))
|
||||
- [CWEB](http://www-cs-faculty.stanford.edu/%7Eknuth/cweb.html), with its tools `ctangle` and `cweave` (only if you want to build Dynare++ and get the source through Git)
|
||||
- [CWEB](http://www-cs-faculty.stanford.edu/%7Eknuth/cweb.html), with its tools
|
||||
`ctangle` and `cweave` (only if you want to build the k-order DLL or Dynare++, and get the source through Git)
|
||||
- An implementation of BLAS and LAPACK: either [ATLAS](http://math-atlas.sourceforge.net/), [OpenBLAS](http://xianyi.github.com/OpenBLAS/), Netlib ([BLAS](http://www.netlib.org/blas/), [LAPACK](http://www.netlib.org/lapack/)) or [MKL](http://software.intel.com/en-us/intel-mkl/) (only if you want to build Dynare++)
|
||||
- An implementation of [POSIX Threads](http://en.wikipedia.org/wiki/POSIX_Threads) (optional, for taking advantage of multi-core)
|
||||
- [MAT File I/O library](http://sourceforge.net/projects/matio/) (if you want to compile Markov-Switching code, the estimation DLL, k-order DLL and Dynare++)
|
||||
|
@ -109,8 +109,6 @@ If you have MATLAB, you need to indicate both the MATLAB location and version. F
|
|||
```
|
||||
Note that the MATLAB version can also be specified via the MATLAB family product release (R2009a, R2008b, ...).
|
||||
|
||||
**NB**: For MATLAB versions strictly older than 7.1, you need to explicitly give the MEX extension, via `MEXEXT` variable of the configure script (for example, `MEXEXT=dll` for Windows with MATLAB \< 7.1).
|
||||
|
||||
Alternatively, you can disable the compilation of MEX files for MATLAB with the `--disable-matlab` flag, and MEX files for Octave with `--disable-octave`.
|
||||
|
||||
You may need to specify additional options to the configure script, see the platform specific instructions below.
|
||||
|
@ -119,14 +117,14 @@ Note that if you don't want to compile the C/C++ programs with debugging informa
|
|||
```
|
||||
./configure CFLAGS="-O3" CXXFLAGS="-O3"
|
||||
```
|
||||
To remove debugging information for Matlab mex functions, the analagous call would be:
|
||||
To remove debugging information for MATLAB MEX functions, the analagous call would be:
|
||||
```
|
||||
./configure MATLAB_MEX_CFLAGS="-O3" MATLAB_MEX_CXXFLAGS="-O3"
|
||||
```
|
||||
|
||||
If you want to give a try to the parallelized versions of some mex files (`A_times_B_kronecker_C` and `sparse_hessian_times_B_kronecker_C` used to get the reduced form of the second order approximation of the model) you can add the `--enable-openmp` flag, for instance:
|
||||
```
|
||||
./configure --with-matlab=/usr/local/matlab78 MATLAB_VERSION=7.8 --enable-openmp
|
||||
./configure --with-matlab=/usr/local/MATLAB/R2013a MATLAB_VERSION=8.1 --enable-openmp
|
||||
```
|
||||
If the configuration goes well, the script will tell you which components are correctly configured and will be built.
|
||||
|
||||
|
@ -151,12 +149,12 @@ Note that running the testsuite with Octave requires the additional packages
|
|||
|
||||
### Check
|
||||
|
||||
The Git source comes with unit tests (in the matlab functions) and integration tests (under the `tests` subfolder). All the tests can be run with:
|
||||
The Git source comes with unit tests (in the MATLAB functions) and integration tests (under the `tests` subfolder). All the tests can be run with:
|
||||
```
|
||||
make check
|
||||
```
|
||||
In the `tests` subfolder. If Dynare has been compiled against Matlab and Octave, the tests will be run with Matlab and Octave. Depending on
|
||||
your PC, this can take several hours. It is possible to run the tests only with Matlab:
|
||||
In the `tests` subfolder. If Dynare has been compiled against MATLAB and Octave, the tests will be run with MATLAB and Octave. Depending on
|
||||
your PC, this can take several hours. It is possible to run the tests only with MATLAB:
|
||||
```
|
||||
make check-matlab
|
||||
```
|
||||
|
@ -170,7 +168,7 @@ subset of the integration tests, with:
|
|||
```
|
||||
make deterministic_simulations
|
||||
```
|
||||
This will run all the integration tests in `tests/deterministic_simulations` with Matlab and Octave. Again, it is possible to do this only with Matlab:
|
||||
This will run all the integration tests in `tests/deterministic_simulations` with MATLAB and Octave. Again, it is possible to do this only with MATLAB:
|
||||
```
|
||||
make m/deterministic_simulations
|
||||
```
|
||||
|
@ -178,7 +176,7 @@ or with Octave:
|
|||
```
|
||||
make o/deterministic_simulations
|
||||
```
|
||||
Finally if you want to run a single integration test, e.g. `deterministic_simulations/lbj/rbc.mod` with Matlab:
|
||||
Finally if you want to run a single integration test, e.g. `deterministic_simulations/lbj/rbc.mod` with MATLAB:
|
||||
```
|
||||
make deterministic_simulations/lbj/rbc.m.trs
|
||||
```
|
||||
|
@ -202,26 +200,13 @@ in the `tests` folder to delete files that were created by the run of the testsu
|
|||
|
||||
## Debian or Ubuntu
|
||||
|
||||
All the prerequisites are packaged.
|
||||
|
||||
The easiest way to install the pre-requisites in Debian is to use Debian's dynare package and do
|
||||
(requires that you have added the `deb-src` repositories to your `sources.list`):
|
||||
```
|
||||
apt-get build-dep dynare
|
||||
```
|
||||
followed by (only for building the master branch):
|
||||
```
|
||||
apt-get install texlive-fonts-extra
|
||||
```
|
||||
which is missing in Debian's list of pre-requisites.
|
||||
|
||||
Alternatively, if you want to build everything, manually install the following packages:
|
||||
All the prerequisites are packaged:
|
||||
|
||||
- `build-essential` (for gcc, g++ and make)
|
||||
- `gfortran`
|
||||
- `liboctave-dev` (or `octave3.2-headers` on older systems)
|
||||
- `liboctave-dev`
|
||||
- `libboost-graph-dev` and `libboost-filesystem-dev`
|
||||
- `libgsl-dev` (or `libgsl0-dev` on older systems)
|
||||
- `libgsl-dev`
|
||||
- `libmatio-dev`
|
||||
- `libslicot-dev` and `libslicot-pic`
|
||||
- `libsuitesparse-dev`
|
||||
|
@ -235,65 +220,92 @@ Alternatively, if you want to build everything, manually install the following p
|
|||
- `texlive-formats-extra` (for Eplain)
|
||||
- `texlive-latex-extra` (for fullpage.sty)
|
||||
- `texlive-fonts-extra` (for ccicons)
|
||||
- `texlive-latex-recommended` (or `latex-beamer` on older systems)
|
||||
- `texlive-science` (or `texlive-math-extra` on older systems) (for amstex)
|
||||
- `texlive-latex-recommended`
|
||||
- `texlive-science` (for amstex)
|
||||
- `texinfo`
|
||||
- `lmodern` (for macroprocessor PDF)
|
||||
- `latex2html`
|
||||
- `doxygen`
|
||||
|
||||
You can load all necessary packages at once with
|
||||
You can install them all at once with:
|
||||
```
|
||||
sudo apt install build-essential gfortran liboctave-dev libboost-graph-dev libboost-filesystem-dev libgsl-dev libmatio-dev libslicot-dev libslicot-pic libsuitesparse-dev flex bison autoconf automake texlive texlive-publishers texlive-extra-utils texlive-formats-extra texlive-latex-extra texlive-fonts-extra texlive-latex-recommended texlive-science texinfo lmodern latex2html doxygen
|
||||
|
||||
apt install build-essential gfortran liboctave-dev libboost-graph-dev libboost-filesystem-dev libgsl-dev libmatio-dev libslicot-dev libslicot-pic libsuitesparse-dev flex bison autoconf automake texlive texlive-publishers texlive-extra-utils texlive-formats-extra texlive-latex-extra texlive-fonts-extra texlive-latex-recommended texlive-science texinfo lmodern latex2html doxygen
|
||||
```
|
||||
|
||||
## Fedora
|
||||
|
||||
**NB**: Documentation still in progress…
|
||||
- `octave-devel`
|
||||
- `boost-devel`
|
||||
- `gsl-devel`
|
||||
- `matio-devel`
|
||||
- `flex`
|
||||
- `bison`
|
||||
- `autoconf`
|
||||
- `automake`
|
||||
- `texlive`
|
||||
- `texinfo`
|
||||
- `latex2html`
|
||||
- `doxygen`
|
||||
|
||||
## Windows
|
||||
|
||||
We no longer support compilation on Windows. To use the unstable version of Dynare on a Windows system, please download it from the [Dynare website](http://www.dynare.org/download/dynare-unstable).
|
||||
|
||||
## Windows Subsystem for Linux
|
||||
|
||||
Dynare can also be compiled from source for the Windows Subsystem for Linux (WSL). The WSL offers Windows 10 Anniversary Update users easy access to a Linux environment. To install the WSL, see https://msdn.microsoft.com/en-us/commandline/wsl/install_guide
|
||||
To install most of the build dependencies, make sure that the local `rootfs/etc/apt/sources.list` contains
|
||||
- Install [MSYS2](http://www.msys2.org) (pick the 64-bit version)
|
||||
- Run a MSYS MinGW 64-bit shell
|
||||
- Update the system:
|
||||
```
|
||||
deb-src http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
|
||||
deb-src http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse
|
||||
deb-src http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
|
||||
pacman -Syu
|
||||
```
|
||||
You may be asked to close the window at the end of the
|
||||
first upgrade batch, in which case you should rerun the upgrade in a new
|
||||
window to complete the upgrade.
|
||||
- Install all needed dependencies:
|
||||
```
|
||||
pacman -S git autoconf automake-wrapper bison flex make tar texinfo mingw-w64-x86_64-gcc mingw-w64-x86_64-gcc-fortran mingw-w64-x86_64-boost mingw-w64-x86_64-gsl mingw-w64-x86_64-matio mingw-w64-x86_64-openblas
|
||||
```
|
||||
- **(Optional)** compile and install `ctangle`, needed for the k-order MEX file and for
|
||||
Dynare++ (*i.e.* if you want to solve models at order ≥ 3)
|
||||
```
|
||||
wget ftp://ftp.cs.stanford.edu/pub/cweb/cweb.tar.gz
|
||||
mkdir cweb
|
||||
cd cweb
|
||||
tar xf ../cweb.tar.gz
|
||||
make ctangle
|
||||
mkdir -p /usr/local/bin
|
||||
cp ctangle.exe /usr/local/bin/
|
||||
cd ..
|
||||
```
|
||||
- **(Optional)** compile and install SLICOT, needed for the `kalman_steady_state`
|
||||
MEX file
|
||||
```
|
||||
wget https://deb.debian.org/debian/pool/main/s/slicot/slicot_5.0+20101122.orig.tar.gz
|
||||
tar xf slicot_5.0+20101122.orig.tar.gz
|
||||
cd slicot-5.0+20101122
|
||||
make FORTRAN=gfortran OPTS="-O2 -fno-underscoring -fdefault-integer-8" LOADER=gfortran slicot.a
|
||||
mkdir -p /usr/local/lib
|
||||
cp slicot.a /usr/local/lib/libslicot64_pic.a
|
||||
cd ..
|
||||
```
|
||||
- Clone and prepare the Dynare sources:
|
||||
```
|
||||
git clone --recursive https://git.dynare.org/Dynare/dynare.git
|
||||
cd dynare
|
||||
autoreconf -si
|
||||
```
|
||||
- Configure Dynare:
|
||||
```
|
||||
./configure --with-boost-system=boost_system-mt --with-boost-filesystem=boost_filesystem-mt --with-slicot=/usr/local --with-matlab=<…> MATLAB_VERSION=<…> --disable-octave
|
||||
```
|
||||
where the path and version of MATLAB are specified. Note that you should use
|
||||
the MSYS2 notation and not put spaces in the MATLAB path, so you probably want
|
||||
to use something like `/c/Progra~1/MATLAB/…`.
|
||||
- Compile:
|
||||
```
|
||||
make
|
||||
```
|
||||
- Run the testsuite:
|
||||
```
|
||||
make -C tests check-matlab
|
||||
```
|
||||
in addition to the regular ```deb``` entries.
|
||||
NB: you cannot edit this file from Windows as this will make the file unreadable for the WSL (rendering WSL unable to detect any package). Therefore, use any Linux editor of your choice.
|
||||
|
||||
After that, run
|
||||
```
|
||||
apt update
|
||||
apt-get build-dep dynare
|
||||
```
|
||||
If you are building the unstable version, you might also need to install other packages required, e.g
|
||||
```apt-get install texlive-fonts-extra```
|
||||
NB: it might be necessary to preface your calls by ```sudo``` in case you do not have root access with the current user
|
||||
**Note:** The above assumes that you have a 64-bit version of MATLAB. It can be
|
||||
adapted to a 32-bit MATLAB with the following modifications:
|
||||
|
||||
- run the MSYS MinGW 32-bit shell
|
||||
- replace `x86_64` by `i686` in packages names on the `pacman` command-line
|
||||
- for SLICOT, remove the `-fdefault-integer-8` option, and instead copy the
|
||||
library into `/usr/local/lib/libslicot_pic.a`
|
||||
|
||||
**Note:** Compiling the MEX files for Octave and the documentation under MSYS2 is
|
||||
currently not supported.
|
||||
|
||||
After this, prepare the source and configure the build tree as described for Linux above.
|
||||
|
||||
## macOS
|
||||
|
||||
To simply use a snapshot of Dynare, you have two choices. On Matlab, you can
|
||||
To simply use a snapshot of Dynare, you have two choices. On MATLAB, you can
|
||||
use the [snapshot build](http://www.dynare.org/snapshot/macosx/) provided by
|
||||
Dynare. On Octave, you can simply install [Homebrew](https://brew.sh/) and run
|
||||
```brew install dynare --HEAD``` (See the Install Dynare (unstable) section of
|
||||
|
@ -330,7 +342,7 @@ folder where you want Dynare installed.
|
|||
- `cd dynare`
|
||||
- `PATH="/usr/local/opt/bison/bin:/usr/local/opt/flex/bin:$PATH"`
|
||||
- `autoreconf -si`
|
||||
- `./configure --disable-octave --with-matlab=/Applications/MATLAB_R2017b.app MATLAB_VERSION=R2017b`, adjusting the Matlab path and version to accord with your local installation. If you don't have Matlab, simply type `./configure --disable-octave`
|
||||
- `./configure --disable-octave --with-matlab=/Applications/MATLAB_R2017b.app MATLAB_VERSION=R2017b`, adjusting the MATLAB path and version to accord with your local installation. If you don't have MATLAB, simply type `./configure --disable-octave`
|
||||
- `make -j`
|
||||
- **(Optional)** To then build mex files for Octave, run
|
||||
- `cd mex/build/octave`
|
||||
|
|
27
configure.ac
27
configure.ac
|
@ -30,9 +30,9 @@ AC_PROG_CXX
|
|||
AC_CANONICAL_HOST
|
||||
case ${host_os} in
|
||||
*mingw32*)
|
||||
# On mingw32, we don't want dynamic libgcc
|
||||
# Note that static-libstdc++ is only supported since GCC 4.5 (but generates no error on older versions)
|
||||
LDFLAGS="$LDFLAGS -static-libgcc -static-libstdc++ -static-libgfortran"
|
||||
# On Windows, we want Dynare++ to be statically linked
|
||||
AM_LDFLAGS="-static"
|
||||
AC_SUBST([AM_LDFLAGS])
|
||||
have_windows="yes"
|
||||
;;
|
||||
*cygwin*)
|
||||
|
@ -51,7 +51,8 @@ esac
|
|||
# Use C++ for testing headers
|
||||
AC_LANG([C++])
|
||||
|
||||
CXXFLAGS="$CXXFLAGS -Wall -Wno-parentheses"
|
||||
AM_CXXFLAGS="-Wall -Wno-parentheses"
|
||||
AC_SUBST([AM_CXXFLAGS])
|
||||
|
||||
# If default 'ar' is not available, try to find one with a host prefix (see ticket #145)
|
||||
AC_CHECK_PROGS([AR], [ar ${host_alias}-ar])
|
||||
|
@ -125,11 +126,6 @@ AM_CONDITIONAL([HAVE_CWEAVE], [test "x$CWEAVE" != "x"])
|
|||
AC_PROG_F77
|
||||
AC_F77_LIBRARY_LDFLAGS
|
||||
case ${host_os} in
|
||||
*mingw32*)
|
||||
# Hack to get static linking of libgfortran on MinGW
|
||||
# (-static-libgfortran doesn't act on gcc/g++)
|
||||
FLIBS=`echo $FLIBS | sed 's/-lgfortran/-Wl,-Bstatic -lgfortran -Wl,-Bdynamic/'`
|
||||
;;
|
||||
*darwin*)
|
||||
# * OS X doesn't need to link against the Fortran libraries because
|
||||
# everything is contained within the vecLib framework.
|
||||
|
@ -144,12 +140,6 @@ fi
|
|||
AM_CONDITIONAL([HAVE_BLAS], [test x"$ax_blas_ok" = "xyes"])
|
||||
AM_CONDITIONAL([HAVE_LAPACK], [test x"$ax_lapack_ok" = "xyes"])
|
||||
|
||||
case ${host_os} in
|
||||
*mingw32*)
|
||||
# Ensure that -lpthread is statically linked under MinGW
|
||||
PTHREAD_LIBS="-Wl,-Bstatic -lpthread -Wl,-Bdynamic"
|
||||
;;
|
||||
esac
|
||||
AX_PTHREAD
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
|
@ -185,6 +175,13 @@ AC_ARG_ENABLE([matlab], AS_HELP_STRING([--disable-matlab], [disable compilation
|
|||
if test "x$enable_matlab" = "xyes"; then
|
||||
AC_CONFIG_SUBDIRS([mex/build/matlab])
|
||||
AX_MATLAB
|
||||
AX_MATLAB_ARCH
|
||||
if test "${MATLAB_ARCH}" = win32 -o "${MATLAB_ARCH}" = win64; then
|
||||
MATLAB_BATCH_OPTIONS='-nosplash -automation -wait -sd "$(CURDIR)"'
|
||||
else
|
||||
MATLAB_BATCH_OPTIONS='-nosplash -nodisplay'
|
||||
fi
|
||||
AC_SUBST([MATLAB_BATCH_OPTIONS])
|
||||
fi
|
||||
AM_CONDITIONAL([ENABLE_MATLAB], [test "x$enable_matlab" = "xyes"])
|
||||
AM_CONDITIONAL([HAVE_CMD_LINE_MATLAB], [test "x$ax_enable_matlab" = "xyes" -a "x$have_windows" = "x"])
|
||||
|
|
|
@ -472,7 +472,7 @@ In order to run Dynare, you need one of the following:
|
|||
@itemize
|
||||
|
||||
@item
|
||||
MATLAB version 7.5 (R2007b) or above (MATLAB R2009b 64-bit for macOS);
|
||||
MATLAB version 7.9 (R2009b) or above;
|
||||
|
||||
@item
|
||||
GNU Octave version 4.2.1 or above.
|
||||
|
@ -599,36 +599,29 @@ Octave comes with built-in functionality for compiling mex-files.
|
|||
@node Prerequisites on Windows
|
||||
@subsection Prerequisites on Windows
|
||||
|
||||
If you are using MATLAB under Windows, install a C++ compiler on your machine and configure it with
|
||||
MATLAB. There are at least two free compilers you can use. First, there is Microsoft's Visual Studio
|
||||
Community (@uref{https://www.visualstudio.com/}), which has the largest history of MATLAB support, but
|
||||
requires much space on the hard-disk. Second, since MATLAB R2015b, MATLAB supports the MinGW-w64 C/C++
|
||||
Compiler from TDM-GCC. To install this compiler, use the Add-Ons menu of MATLAB. Search for MinGW or
|
||||
select it from Features.
|
||||
|
||||
For older version of MATLAB, in particular before R2014a, it may sometimes make sense to use the gcc compiler
|
||||
provided by Cygwin. However, integrating it in MATLAB can be quite cumbersome and should be considered as a
|
||||
legacy option. For details, see
|
||||
@uref{http://www.dynare.org/DynareWiki/ConfigureMatlabWindowsForMexCompilation,instructions
|
||||
on the Dynare wiki}.
|
||||
There is no prerequisite on Windows. Dynare now ships a compilation environment
|
||||
that can be used with the @code{use_dll} option.
|
||||
|
||||
@node Prerequisites on Debian GNU/Linux and Ubuntu
|
||||
@subsection Prerequisites on Debian GNU/Linux and Ubuntu
|
||||
|
||||
Users of MATLAB under Linux need to have a working compilation environment installed. If not already present,
|
||||
it can be installed via @code{apt-get install build-essential}.
|
||||
Users of MATLAB under GNU/Linux need a working compilation environment
|
||||
installed. If not already present, it can be installed via @code{apt install
|
||||
build-essential}.
|
||||
|
||||
Users of Octave under Linux should install the package for MEX file compilation
|
||||
Users of Octave under GNU/Linux should install the package for MEX file compilation
|
||||
(under Debian or Ubuntu, it is called @file{liboctave-dev}).
|
||||
|
||||
@node Prerequisites on macOS
|
||||
@subsection Prerequisites on macOS
|
||||
|
||||
[TO BE UPDATED]
|
||||
|
||||
If you are using MATLAB under macOS, you should install the latest
|
||||
version of XCode: see
|
||||
@uref{http://www.dynare.org/DynareWiki/InstallOnMacOSX,instructions on
|
||||
the Dynare wiki}.
|
||||
|
||||
|
||||
@node Configuration
|
||||
@section Configuration
|
||||
|
||||
|
@ -848,6 +841,13 @@ line numbering directives.
|
|||
Passing this option removes all empty from the macro expanded mod file created
|
||||
when the @code{savemacro} option is used.
|
||||
|
||||
@item onlymodel
|
||||
Instructs the preprocessor to print only information about the model in the
|
||||
driver file; no Dynare commands (other than the shocks statement and parameter
|
||||
initializations) are printed and hence no computational tasks performed. NB:
|
||||
the same ancillary files are created as would otherwise be created (dynamic,
|
||||
static files, etc.).
|
||||
|
||||
@item nolog
|
||||
Instructs Dynare to no create a logfile of this run in
|
||||
@file{@var{FILENAME}.log}. The default is to create the logfile.
|
||||
|
@ -923,22 +923,14 @@ command).
|
|||
Prevent Dynare from printing the output of the steps leading up to the
|
||||
preprocessor as well as the preprocessor output itself.
|
||||
|
||||
@item mingw
|
||||
Tells Dynare that your MATLAB is configured for compiling MEX files with the
|
||||
MinGW-compiler from TDM-GCC (@pxref{Compiler installation}). This option is
|
||||
only available under Windows, and is used in conjunction with
|
||||
@code{use_dll}.
|
||||
@item mexext=mex|mexw32|mexw64|mexmaci64|mexa64
|
||||
The mex extension associated with your platform to be used when compiling
|
||||
output associated with @code{use_dll}. NB: Dynare is able to set this
|
||||
automatically, so you should not need to set it yourself.
|
||||
|
||||
@item msvc
|
||||
Tells Dynare that your MATLAB is configured for compiling MEX files with
|
||||
Microsoft Visual C++ (@pxref{Compiler installation}). This option is
|
||||
only available under Windows, and is used in conjunction with
|
||||
@code{use_dll}.
|
||||
|
||||
@item cygwin
|
||||
Tells Dynare that your MATLAB is configured for compiling MEX files with
|
||||
Cygwin (@pxref{Compiler installation}). This option is only available
|
||||
under Windows, and is used in conjunction with @code{use_dll}.
|
||||
@item matlabroot=@var{<<path>>}
|
||||
The path to the Matlab installation for use with @code{use_dll}. NB: Dynare is
|
||||
able to set this automatically, so you should not need to set it yourself.
|
||||
|
||||
@item parallel[=@var{CLUSTER_NAME}]
|
||||
Tells Dynare to perform computations in parallel. If @var{CLUSTER_NAME}
|
||||
|
@ -15074,7 +15066,7 @@ Cycles: The Cycle is the Trend,'' @i{NBER Working Paper}, 10734
|
|||
Amisano, Gianni and Tristani, Oreste (2010): ``Euro area inflation persistence in an estimated nonlinear DSGE model'', @i{Journal of Economic Dynamics and Control}, 34(10), 1837--1858
|
||||
|
||||
@item
|
||||
Andreasen, Martin M., Jesús Fernández-Villaverde, and Juan Rubio-Ramírez (2013): ``The Pruned State-Space System for Non-Linear DSGE Models: Theory and Empirical Applications,'' @i{NBER Working Paper}, 18983
|
||||
Andreasen, Martin M., Jesús Fernández-Villaverde, and Juan Rubio-Ramírez (2018): ``The Pruned State-Space System for Non-Linear DSGE Models: Theory and Empirical Applications,'' @i{Review of Economic Studies}, 85(1), 1--49
|
||||
|
||||
@item
|
||||
Andrews, Donald W.K (1991): ``Heteroskedasticity and autocorrelation consistent covariance matrix estimation'',
|
||||
|
@ -15098,10 +15090,10 @@ and Control}, 19, 711--734
|
|||
@item
|
||||
Brooks, Stephen P., and Andrew Gelman (1998): ``General methods for
|
||||
monitoring convergence of iterative simulations,'' @i{Journal of
|
||||
computational and graphical statistics}, 7, pp. 434--455
|
||||
Computational and Graphical Statistics}, 7, pp. 434--455
|
||||
|
||||
@item
|
||||
Cardoso, Margarida F., R. L. Salcedo and S. Feyo de Azevedo (1996): ``The simplex simulated annealing approach to continuous non-linear optimization,'' @i{Computers chem. Engng}, 20(9), 1065-1080
|
||||
Cardoso, Margarida F., R. L. Salcedo and S. Feyo de Azevedo (1996): ``The simplex simulated annealing approach to continuous non-linear optimization,'' @i{Computers & Chemical Engineering}, 20(9), 1065-1080
|
||||
|
||||
@item
|
||||
Chib, Siddhartha and Srikanth Ramamurthy (2010):
|
||||
|
|
|
@ -26,7 +26,7 @@ noinst_LIBRARIES = libinteg.a
|
|||
|
||||
libinteg_a_SOURCES = $(CWEBSRC) $(GENERATED_FILES) precalc_quadrature.dat
|
||||
libinteg_a_CPPFLAGS = -I../../sylv/cc -I../../tl/cc -I$(top_srcdir)/mex/sources
|
||||
libinteg_a_CXXFLAGS = $(PTHREAD_CFLAGS)
|
||||
libinteg_a_CXXFLAGS = $(AM_CXXFLAGS) $(PTHREAD_CFLAGS)
|
||||
|
||||
BUILT_SOURCES = $(GENERATED_FILES)
|
||||
|
||||
|
|
|
@ -2,5 +2,5 @@ noinst_PROGRAMS = quadrature-points
|
|||
|
||||
quadrature_points_SOURCES = quadrature-points.cpp
|
||||
quadrature_points_CPPFLAGS = -I../.. -I../../sylv/cc -I../../integ/cc -I../../tl/cc
|
||||
quadrature_points_CXXFLAGS = $(PTHREAD_CFLAGS)
|
||||
quadrature_points_CXXFLAGS = $(AM_CXXFLAGS) $(PTHREAD_CFLAGS)
|
||||
quadrature_points_LDADD = ../cc/libinteg.a ../../tl/cc/libtl.a ../../parser/cc/libparser.a ../../sylv/cc/libsylv.a ../../utils/cc/libutils.a $(LAPACK_LIBS) $(BLAS_LIBS) $(LIBS) $(FLIBS) $(PTHREAD_LIBS)
|
||||
|
|
|
@ -2,8 +2,8 @@ check_PROGRAMS = tests
|
|||
|
||||
tests_SOURCES = tests.cpp
|
||||
tests_CPPFLAGS = -I../cc -I../../tl/cc -I../../sylv/cc -I$(top_srcdir)/mex/sources
|
||||
tests_CXXFLAGS = $(PTHREAD_CFLAGS)
|
||||
tests_LDFLAGS = $(LDFLAGS_MATIO)
|
||||
tests_CXXFLAGS = $(AM_CXXFLAGS) $(PTHREAD_CFLAGS)
|
||||
tests_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MATIO)
|
||||
tests_LDADD = ../../tl/cc/libtl.a ../../sylv/cc/libsylv.a ../cc/libinteg.a $(LAPACK_LIBS) $(BLAS_LIBS) $(LIBS) $(FLIBS) $(PTHREAD_LIBS) $(LIBADD_MATIO)
|
||||
|
||||
check-local:
|
||||
|
|
|
@ -54,7 +54,7 @@ noinst_LIBRARIES = libkord.a
|
|||
|
||||
libkord_a_SOURCES = $(CWEBSRC) $(GENERATED_FILES)
|
||||
libkord_a_CPPFLAGS = -I../sylv/cc -I../tl/cc -I../integ/cc -I$(top_srcdir)/mex/sources $(CPPFLAGS_MATIO)
|
||||
libkord_a_CXXFLAGS = $(PTHREAD_CFLAGS)
|
||||
libkord_a_CXXFLAGS = $(AM_CXXFLAGS) $(PTHREAD_CFLAGS)
|
||||
|
||||
BUILT_SOURCES = $(GENERATED_FILES)
|
||||
|
||||
|
@ -64,8 +64,8 @@ check_PROGRAMS = tests
|
|||
|
||||
tests_SOURCES = tests.cpp
|
||||
tests_CPPFLAGS = -I../sylv/cc -I../tl/cc -I../integ/cc -I$(top_srcdir)/mex/sources
|
||||
tests_CXXFLAGS = $(PTHREAD_CFLAGS)
|
||||
tests_LDFLAGS = $(LDFLAGS_MATIO)
|
||||
tests_CXXFLAGS = $(AM_CXXFLAGS) $(PTHREAD_CFLAGS)
|
||||
tests_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MATIO)
|
||||
tests_LDADD = libkord.a ../tl/cc/libtl.a ../sylv/cc/libsylv.a $(LAPACK_LIBS) $(BLAS_LIBS) $(LIBS) $(FLIBS) $(PTHREAD_LIBS) $(LIBADD_MATIO)
|
||||
|
||||
check-local:
|
||||
|
|
|
@ -22,9 +22,9 @@ dynare___SOURCES = \
|
|||
$(GENERATED_FILES)
|
||||
|
||||
dynare___CPPFLAGS = -I../sylv/cc -I../tl/cc -I../kord -I../integ/cc -I.. -I$(top_srcdir)/mex/sources -DDYNVERSION=\"$(PACKAGE_VERSION)\" $(BOOST_CPPFLAGS) $(CPPFLAGS_MATIO)
|
||||
dynare___LDFLAGS = $(LDFLAGS_MATIO) $(BOOST_LDFLAGS)
|
||||
dynare___LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MATIO) $(BOOST_LDFLAGS)
|
||||
dynare___LDADD = ../kord/libkord.a ../integ/cc/libinteg.a ../tl/cc/libtl.a ../parser/cc/libparser.a ../utils/cc/libutils.a ../sylv/cc/libsylv.a $(LIBADD_MATIO) $(noinst_LIBRARIES) $(LAPACK_LIBS) $(BLAS_LIBS) $(LIBS) $(FLIBS) $(PTHREAD_LIBS)
|
||||
dynare___CXXFLAGS = $(PTHREAD_CFLAGS)
|
||||
dynare___CXXFLAGS = $(AM_CXXFLAGS) $(PTHREAD_CFLAGS)
|
||||
|
||||
BUILT_SOURCES = $(GENERATED_FILES)
|
||||
EXTRA_DIST = dynglob.lex dynglob.y
|
||||
|
|
|
@ -92,7 +92,7 @@ noinst_LIBRARIES = libtl.a
|
|||
|
||||
libtl_a_SOURCES = $(CWEBSRC) $(GENERATED_FILES)
|
||||
libtl_a_CPPFLAGS = -I../../sylv/cc $(CPPFLAGS_MATIO)
|
||||
libtl_a_CXXFLAGS = $(PTHREAD_CFLAGS)
|
||||
libtl_a_CXXFLAGS = $(AM_CXXFLAGS) $(PTHREAD_CFLAGS)
|
||||
|
||||
BUILT_SOURCES = $(GENERATED_FILES)
|
||||
|
||||
|
|
|
@ -2,8 +2,8 @@ check_PROGRAMS = tests
|
|||
|
||||
tests_SOURCES = factory.cpp factory.h monoms.cpp monoms.h tests.cpp
|
||||
tests_CPPFLAGS = -I../cc -I../../sylv/cc
|
||||
tests_CXXFLAGS = $(PTHREAD_CFLAGS)
|
||||
tests_LDFLAGS = $(LDFLAGS_MATIO)
|
||||
tests_CXXFLAGS = $(AM_CXXFLAGS) $(PTHREAD_CFLAGS)
|
||||
tests_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MATIO)
|
||||
tests_LDADD = ../cc/libtl.a ../../sylv/cc/libsylv.a $(LAPACK_LIBS) $(BLAS_LIBS) $(LIBS) $(FLIBS) $(PTHREAD_LIBS) $(LIBADD_MATIO)
|
||||
|
||||
check-local:
|
||||
|
|
|
@ -44,6 +44,8 @@ AC_ARG_WITH(matio, AC_HELP_STRING([--with-matio=DIR], [prefix to MATIO installat
|
|||
dnl If detected, libz and libhdf5 are added to LIBS, used for matio test
|
||||
LIBS=""
|
||||
AC_CHECK_LIB([z], [compress])
|
||||
dnl szip is needed under MSYS2
|
||||
AC_CHECK_LIB([szip], [SZ_Compress])
|
||||
AC_CHECK_LIB([hdf5], [H5Fcreate])
|
||||
|
||||
AC_CHECK_HEADER([matio.h], [], [has_matio=no])
|
||||
|
|
|
@ -41,13 +41,13 @@ else
|
|||
AX_COMPARE_VERSION([$MATLAB_VERSION], [lt], [7.1], [AC_MSG_ERROR([I can't determine the MEX file extension. Please explicitly indicate it to the configure script with the MEXEXT variable.])])
|
||||
case $build_os in
|
||||
*cygwin*)
|
||||
ax_cv_mexext=`$MATLAB/bin/mexext.bat | sed 's/\r//'`
|
||||
ax_cv_mexext=$("$MATLAB"/bin/mexext.bat | sed 's/\r//')
|
||||
;;
|
||||
*mingw*)
|
||||
ax_cv_mexext=`cd $MATLAB/bin && cmd /c mexext.bat | sed 's/\r//'`
|
||||
ax_cv_mexext=$(cd "$MATLAB"/bin && cmd /c mexext.bat | sed 's/\r//')
|
||||
;;
|
||||
*)
|
||||
ax_cv_mexext=`$MATLAB/bin/mexext`
|
||||
ax_cv_mexext=$("$MATLAB"/bin/mexext)
|
||||
;;
|
||||
esac
|
||||
fi])
|
||||
|
|
|
@ -22,7 +22,7 @@ AC_REQUIRE([AX_MATLAB_ARCH])
|
|||
AC_REQUIRE([AX_MATLAB_VERSION])
|
||||
AC_REQUIRE([AC_PROG_SED])
|
||||
|
||||
AX_COMPARE_VERSION([$MATLAB_VERSION], [lt], [7.5], [AC_MSG_ERROR([Your MATLAB is too old, please upgrade to 7.5 (R2007b) at least.])])
|
||||
AX_COMPARE_VERSION([$MATLAB_VERSION], [lt], [7.9], [AC_MSG_ERROR([Your MATLAB is too old, please upgrade to 7.9 (R2009b) at least.])])
|
||||
|
||||
AC_MSG_CHECKING([for options to compile MEX for MATLAB])
|
||||
|
||||
|
|
|
@ -194,7 +194,7 @@ while fpar<B
|
|||
end
|
||||
if MAX_nirfs_dsgevar
|
||||
IRUN = IRUN+1;
|
||||
[fval,info,junk1,junk2,junk3,junk3,junk4,PHI,SIGMAu,iXX] = dsge_var_likelihood(deep',dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,bounds,oo_);
|
||||
[fval,info,~,~,~,~,~,PHI,SIGMAu,iXX] = dsge_var_likelihood(deep',dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,bounds,oo_);
|
||||
dsge_prior_weight = M_.params(strmatch('dsge_prior_weight', M_.param_names));
|
||||
DSGE_PRIOR_WEIGHT = floor(dataset_.nobs*(1+dsge_prior_weight));
|
||||
SIGMA_inv_upper_chol = chol(inv(SIGMAu*dataset_.nobs*(dsge_prior_weight+1)));
|
||||
|
|
|
@ -93,7 +93,7 @@ for j=1:nvar
|
|||
d0={};
|
||||
z1 = squeeze(z(i_var(j),:,:));
|
||||
if screen_shocks
|
||||
[junk, isort] = sort(mean(abs(z1(1:end-2,:)')), 'descend');
|
||||
[~, isort] = sort(mean(abs(z1(1:end-2,:)')), 'descend');
|
||||
labels = char(char(shock_names(isort(1:16))),'Others', 'Initial values');
|
||||
zres = sum(z1(isort(17:end),:),1);
|
||||
z1 = [z1(isort(1:16),:); zres; z1(comp_nbr0:end,:)];
|
||||
|
|
|
@ -33,7 +33,7 @@ if isoctave
|
|||
else
|
||||
% Add win32 specific paths for Dynare Windows package
|
||||
if strcmp(computer, 'PCWIN')
|
||||
tmp = [dynareroot '../mex/matlab/win32-7.5-8.6/'];
|
||||
tmp = [dynareroot '../mex/matlab/win32-7.9-8.6/'];
|
||||
if exist(tmp, 'dir')
|
||||
mexpath = tmp;
|
||||
if modifypath
|
||||
|
@ -43,16 +43,8 @@ else
|
|||
end
|
||||
% Add win64 specific paths for Dynare Windows package
|
||||
if strcmp(computer, 'PCWIN64')
|
||||
if matlab_ver_less_than('7.8')
|
||||
tmp = [dynareroot '../mex/matlab/win64-7.5-7.7/'];
|
||||
if exist(tmp, 'dir')
|
||||
mexpath = tmp;
|
||||
if modifypath
|
||||
addpath(mexpath);
|
||||
end
|
||||
end
|
||||
elseif matlab_ver_less_than('9.4')
|
||||
tmp = [dynareroot '../mex/matlab/win64-7.8-9.3/'];
|
||||
if matlab_ver_less_than('9.4')
|
||||
tmp = [dynareroot '../mex/matlab/win64-7.9-9.3/'];
|
||||
if exist(tmp, 'dir')
|
||||
mexpath = tmp;
|
||||
if modifypath
|
||||
|
@ -60,7 +52,7 @@ else
|
|||
end
|
||||
end
|
||||
else
|
||||
tmp = [dynareroot '../mex/matlab/win64-9.4/'];
|
||||
tmp = [dynareroot '../mex/matlab/win64-9.4-9.5/'];
|
||||
if exist(tmp, 'dir')
|
||||
mexpath = tmp;
|
||||
if modifypath
|
||||
|
|
|
@ -128,7 +128,7 @@ if realtime_==0
|
|||
myopts=options_;
|
||||
myopts.plot_shock_decomp.type='qoq';
|
||||
myopts.plot_shock_decomp.realtime=0;
|
||||
[z, junk] = plot_shock_decomposition(M_,oo_,myopts,[]);
|
||||
[z, ~] = plot_shock_decomposition(M_,oo_,myopts,[]);
|
||||
else
|
||||
z = oo_;
|
||||
end
|
||||
|
@ -287,7 +287,7 @@ if isstruct(aux)
|
|||
yaux=aux.y;
|
||||
end
|
||||
|
||||
[nvar , nterms, junk] = size(z);
|
||||
[nvar, nterms, ~] = size(z);
|
||||
for j=1:nvar
|
||||
for k =1:nterms
|
||||
ztmp = squeeze(z(j,k,min((t0-3):-4:1):end));
|
||||
|
|
|
@ -40,7 +40,7 @@ irf = icc1+(options_.periods-1)*ny ;
|
|||
d1 = zeros(options_.periods*ny,1) ;
|
||||
|
||||
ofs = (((options_.periods-1)*ny+1)-1)*jcf*8 ;
|
||||
junk = fseek(fid,ofs,-1) ;
|
||||
[~] = fseek(fid,ofs,-1) ;
|
||||
c = fread(fid,[jcf,ny],'float64')';
|
||||
|
||||
d1(ir) = c(:,jcf) ;
|
||||
|
@ -52,7 +52,7 @@ while i <= M_.maximum_lead || i <= options_.periods
|
|||
irf1 = selif(irf,irf<=options_.periods*ny) ;
|
||||
|
||||
ofs = (((options_.periods-i)*ny+1)-1)*jcf*8 ;
|
||||
junk = fseek(fid,ofs,-1) ;
|
||||
[~] = fseek(fid,ofs,-1) ;
|
||||
c = fread(fid,[jcf,ny],'float64')' ;
|
||||
|
||||
d1(ir) = c(:,jcf) - c(:,1:size(irf1,1))*d1(irf1) ;
|
||||
|
@ -64,7 +64,7 @@ end
|
|||
while i <= options_.periods
|
||||
|
||||
ofs = (((options_.periods-i)*ny+1)-1)*jcf*8 ;
|
||||
junk = fseek(fid,ofs,-1) ;
|
||||
[~] = fseek(fid,ofs,-1) ;
|
||||
c = fread(fid,[jcf,ny],'float64')' ;
|
||||
|
||||
d1(ir) = c(:,jcf)-c(:,icf)*d1(irf) ;
|
||||
|
|
|
@ -32,7 +32,7 @@ function varlist = check_list_of_variables(options_, M_, varlist)
|
|||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
% Get uniques
|
||||
[junk1, junk2, index_uniques] = varlist_indices(varlist, M_.endo_names);
|
||||
[~, ~, index_uniques] = varlist_indices(varlist, M_.endo_names);
|
||||
varlist = varlist(index_uniques);
|
||||
|
||||
msg = false;
|
||||
|
|
|
@ -387,7 +387,7 @@ if ~strcmp(posterior_sampler_options.posterior_sampling_method,'slice')
|
|||
end
|
||||
|
||||
if options_.load_mh_file && posterior_sampler_options.use_mh_covariance_matrix
|
||||
[junk, invhess] = compute_mh_covariance_matrix;
|
||||
[~, invhess] = compute_mh_covariance_matrix;
|
||||
posterior_sampler_options.invhess = invhess;
|
||||
end
|
||||
|
||||
|
@ -409,7 +409,7 @@ if strcmp(posterior_sampler_options.posterior_sampling_method,'slice')
|
|||
error('check_posterior_sampler_options:: This error should not occur, please contact developers.')
|
||||
end
|
||||
% % % if options_.load_mh_file && options_.use_mh_covariance_matrix,
|
||||
% % % [junk, invhess] = compute_mh_covariance_matrix;
|
||||
% % % [~, invhess] = compute_mh_covariance_matrix;
|
||||
% % % posterior_sampler_options.invhess = invhess;
|
||||
% % % end
|
||||
[V1, D]=eig(invhess);
|
||||
|
|
|
@ -336,7 +336,7 @@ options_.conditional_variance_decomposition = [];
|
|||
|
||||
% Ramsey policy
|
||||
options_.ramsey_policy = 0;
|
||||
options_.instruments = [];
|
||||
options_.instruments = {};
|
||||
options_.timeless = 0;
|
||||
options_.ramsey.maxit = 500;
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ end
|
|||
%call steady_state_file if present to update parameters
|
||||
if options_.steadystate_flag
|
||||
% explicit steady state file
|
||||
[junk,M_.params,info] = evaluate_steady_state_file(oo_.steady_state,[oo_.exo_steady_state; oo_.exo_det_steady_state],M_, ...
|
||||
[~,M_.params,info] = evaluate_steady_state_file(oo_.steady_state,[oo_.exo_steady_state; oo_.exo_det_steady_state],M_, ...
|
||||
options_,0);
|
||||
end
|
||||
[U,Uy,W] = feval([M_.fname,'.objective.static'],zeros(endo_nbr,1),[], M_.params);
|
||||
|
@ -115,7 +115,7 @@ end
|
|||
|
||||
instr_id=nan(instr_nbr,1);
|
||||
for j=1:instr_nbr
|
||||
vj=deblank(Instruments(j,:));
|
||||
vj=deblank(Instruments{j});
|
||||
vj_id=strmatch(vj, endo_names, 'exact');
|
||||
if ~isempty(vj_id)
|
||||
instr_id(j)=vj_id;
|
||||
|
@ -129,7 +129,7 @@ iter=1;
|
|||
for j=1:numel(Indices)
|
||||
eval(['A',Indices{j},'=zeros(eq_nbr,endo_nbr);'])
|
||||
if strcmp(Indices{j},'0')||(strcmp(Indices{j},'lag') && MaxLag)||(strcmp(Indices{j},'lead') && MaxLead)
|
||||
[junk,row,col]=find(lead_lag_incidence(iter,:));
|
||||
[~,row,col]=find(lead_lag_incidence(iter,:));
|
||||
eval(['A',Indices{j},'(:,row)=jacobia_(:,col);'])
|
||||
iter=iter+1;
|
||||
end
|
||||
|
|
|
@ -409,7 +409,7 @@ for i = 1:Size
|
|||
index_c = lead_lag_incidence(2,:); % Index of all endogenous variables present at time=t
|
||||
index_s = lead_lag_incidence(2,1:n_static); % Index of all static endogenous variables present at time=t
|
||||
if n_static > 0
|
||||
[Q, junk] = qr(jacob(:,index_s));
|
||||
[Q, ~] = qr(jacob(:,index_s));
|
||||
aa = Q'*jacob;
|
||||
else
|
||||
aa = jacob;
|
||||
|
@ -476,7 +476,7 @@ for i = 1:Size
|
|||
if isfield(options_,'indeterminacy_continuity')
|
||||
if options_.indeterminacy_msv == 1
|
||||
[ss,tt,w,q] = qz(E',D');
|
||||
[ss,tt,w,junk] = reorder(ss,tt,w,q);
|
||||
[ss,tt,w,~] = reorder(ss,tt,w,q);
|
||||
ss = ss';
|
||||
tt = tt';
|
||||
w = w';
|
||||
|
|
|
@ -111,7 +111,7 @@ switch pshape(indx)
|
|||
end
|
||||
|
||||
if pshape(indx) ~= 5
|
||||
[junk,k1] = max(dens);
|
||||
[~,k1] = max(dens);
|
||||
if k1 == 1 || k1 == length(dens)
|
||||
k = find(dens > 10);
|
||||
dens(k) = NaN;
|
||||
|
|
|
@ -124,7 +124,7 @@ if isempty(reorder_jacobian_columns)
|
|||
nsfwrd)))];
|
||||
index_e2 = npred+nboth+(1:nboth);
|
||||
|
||||
[junk,cols_b] = find(lead_lag_incidence(maximum_lag+1, order_var));
|
||||
[~,cols_b] = find(lead_lag_incidence(maximum_lag+1, order_var));
|
||||
|
||||
reorder_jacobian_columns = [nonzeros(lead_lag_incidence(:,order_var)'); ...
|
||||
nz+(1:exo_nbr)'];
|
||||
|
@ -138,7 +138,7 @@ dr.state_var = state_var;
|
|||
jacobia = jacobia(:,reorder_jacobian_columns);
|
||||
|
||||
if nstatic > 0
|
||||
[Q, junk] = qr(jacobia(:,index_s));
|
||||
[Q, ~] = qr(jacobia(:,index_s));
|
||||
aa = Q'*jacobia;
|
||||
else
|
||||
aa = jacobia;
|
||||
|
|
|
@ -50,7 +50,7 @@ elseif options_.steadystate_flag
|
|||
k_inst = [];
|
||||
inst_nbr = size(options_.instruments,1);
|
||||
for i = 1:inst_nbr
|
||||
k_inst = [k_inst; strmatch(options_.instruments(i,:), M.endo_names, 'exact')];
|
||||
k_inst = [k_inst; strmatch(options_.instruments{i}, M.endo_names, 'exact')];
|
||||
end
|
||||
if inst_nbr == 1
|
||||
%solve for instrument, using univariate solver, starting at initial value for instrument
|
||||
|
@ -75,7 +75,7 @@ elseif options_.steadystate_flag
|
|||
ys_init(k_inst) = inst_val;
|
||||
exo_ss = [oo.exo_steady_state oo.exo_det_steady_state];
|
||||
[xx,params] = evaluate_steady_state_file(ys_init,exo_ss,M,options_,~options_.steadystate.nocheck); %run steady state file again to update parameters
|
||||
[junk,junk,steady_state] = nl_func(inst_val); %compute and return steady state
|
||||
[~,~,steady_state] = nl_func(inst_val); %compute and return steady state
|
||||
else
|
||||
n_var = M.orig_endo_nbr;
|
||||
xx = oo.steady_state(1:n_var);
|
||||
|
@ -85,7 +85,7 @@ else
|
|||
if info1~=0
|
||||
check=81;
|
||||
end
|
||||
[junk,junk,steady_state] = nl_func(xx);
|
||||
[~,~,steady_state] = nl_func(xx);
|
||||
end
|
||||
|
||||
|
||||
|
@ -112,7 +112,7 @@ if options_.steadystate_flag
|
|||
k_inst = [];
|
||||
instruments = options_.instruments;
|
||||
for i = 1:size(instruments,1)
|
||||
k_inst = [k_inst; strmatch(instruments(i,:), endo_names, 'exact')];
|
||||
k_inst = [k_inst; strmatch(instruments{i}, endo_names, 'exact')];
|
||||
end
|
||||
ys_init=zeros(size(oo.steady_state)); %create starting vector for steady state computation as only instrument value is handed over
|
||||
ys_init(k_inst) = x; %set instrument, the only value required for steady state computation, to current value
|
||||
|
@ -194,8 +194,8 @@ end
|
|||
function result = check_static_model(ys,M,options_,oo)
|
||||
result = false;
|
||||
if (options_.bytecode)
|
||||
[chck, res, junk] = bytecode('static',ys,[oo.exo_steady_state oo.exo_det_steady_state], ...
|
||||
M.params, 'evaluate');
|
||||
[chck, res, ~] = bytecode('static',ys,[oo.exo_steady_state oo.exo_det_steady_state], ...
|
||||
M.params, 'evaluate');
|
||||
else
|
||||
res = feval([M.fname '.static'],ys,[oo.exo_steady_state oo.exo_det_steady_state], ...
|
||||
M.params);
|
||||
|
|
|
@ -88,7 +88,7 @@ exo_nbr = M.exo_nbr;
|
|||
|
||||
M.var_order_endo_names = M.endo_names(dr.order_var);
|
||||
|
||||
[junk,dr.i_fwrd_g,i_fwrd_f] = find(lead_lag_incidence(3,order_var));
|
||||
[~,dr.i_fwrd_g,i_fwrd_f] = find(lead_lag_incidence(3,order_var));
|
||||
dr.i_fwrd_f = i_fwrd_f;
|
||||
nd = nnz(lead_lag_incidence) + M.exo_nbr;
|
||||
dr.nd = nd;
|
||||
|
|
|
@ -105,7 +105,7 @@ k1 = find(kstate(:,2) == M_.maximum_endo_lag+2);
|
|||
% Jacobian with respect to the variables with the highest lead
|
||||
fyp = jacobia(:,kstate(k1,3)+nnz(M_.lead_lag_incidence(M_.maximum_endo_lag+1,:)));
|
||||
B(:,nstatic+M_.npred+1:end) = fyp;
|
||||
[junk,k1,k2] = find(M_.lead_lag_incidence(M_.maximum_endo_lag+M_.maximum_endo_lead+1,order_var));
|
||||
[~,k1,k2] = find(M_.lead_lag_incidence(M_.maximum_endo_lag+M_.maximum_endo_lead+1,order_var));
|
||||
A(1:M_.endo_nbr,nstatic+1:nstatic+nspred)=...
|
||||
A(1:M_.endo_nbr,nstatic+[1:nspred])+fyp*gx1(k1,1:nspred);
|
||||
C = Gy;
|
||||
|
@ -162,7 +162,7 @@ kp = sum(kstate(:,2) <= M_.maximum_endo_lag+1);
|
|||
E1 = [eye(nspred); zeros(kp-nspred,nspred)];
|
||||
H = E1;
|
||||
hxx = dr.ghxx(nstatic+[1:nspred],:);
|
||||
[junk,k2a,k2] = find(M_.lead_lag_incidence(M_.maximum_endo_lag+2,order_var));
|
||||
[~,k2a,k2] = find(M_.lead_lag_incidence(M_.maximum_endo_lag+2,order_var));
|
||||
k3 = nnz(M_.lead_lag_incidence(1:M_.maximum_endo_lag+1,:))+(1:M_.nsfwrd)';
|
||||
[B1, err] = sparse_hessian_times_B_kronecker_C(hessian_mat(:,kh(k3,k3)),gu(k2a,:),threads_BC);
|
||||
mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
|
||||
|
|
|
@ -82,14 +82,15 @@ if isoctave
|
|||
'of models approximated at third order, will not be available.'], supported_octave_version())
|
||||
skipline()
|
||||
elseif octave_ver_less_than('4.2') % Should match the test in mex/build/octave/configure.ac
|
||||
% and in m4/ax_mexopts.m4
|
||||
skipline()
|
||||
warning(['This version of Dynare has only been tested on Octave 4.2 and above. Dynare may fail to run or give unexpected result. Consider upgrading your version of Octave.'])
|
||||
skipline()
|
||||
end
|
||||
else
|
||||
if matlab_ver_less_than('7.5') % Should match the test in mex/build/matlab/configure.ac
|
||||
if matlab_ver_less_than('7.9') % Should match the test in mex/build/matlab/configure.ac
|
||||
skipline()
|
||||
warning('This version of Dynare has only been tested on MATLAB 7.5 (R2007b) and above. Since your MATLAB version is older than that, Dynare may fail to run, or give unexpected results. Consider upgrading your MATLAB installation, or switch to Octave.');
|
||||
warning('This version of Dynare has only been tested on MATLAB 7.9 (R2009b) and above. Since your MATLAB version is older than that, Dynare may fail to run, or give unexpected results. Consider upgrading your MATLAB installation, or switch to Octave.');
|
||||
skipline()
|
||||
end
|
||||
end
|
||||
|
@ -191,7 +192,7 @@ end
|
|||
if ispc
|
||||
arch = getenv('PROCESSOR_ARCHITECTURE');
|
||||
else
|
||||
[junk, arch] = system('uname -m');
|
||||
[~, arch] = system('uname -m');
|
||||
end
|
||||
|
||||
if isempty(strfind(arch, '64'))
|
||||
|
@ -226,6 +227,7 @@ if regexp(firstline, '\s*\/\/', 'once') == 1
|
|||
end
|
||||
|
||||
command = ['"' dynareroot 'preprocessor' arch_ext filesep 'dynare_m" ' fname] ;
|
||||
command = [ command ' mexext=' mexext ' "matlabroot=' matlabroot '"'];
|
||||
for i=1:length(varargin)
|
||||
command = [command ' ' varargin{i}];
|
||||
end
|
||||
|
@ -240,6 +242,14 @@ if preprocessoroutput
|
|||
end
|
||||
end
|
||||
|
||||
% Under Windows, make sure the MEX file is unloaded (in the use_dll case),
|
||||
% otherwise the preprocessor can't recompile it
|
||||
if isoctave
|
||||
clear([fname(1:end-4) '.static'], [fname(1:end-4) '.dynamic'])
|
||||
else
|
||||
clear(['+' fname(1:end-4) '/static'], ['+' fname(1:end-4) '/dynamic'])
|
||||
end
|
||||
|
||||
[status, result] = system(command);
|
||||
if status ~= 0 || preprocessoroutput
|
||||
disp(result)
|
||||
|
|
|
@ -128,9 +128,9 @@ if ~isoctave && matlab_ver_less_than('8.1')
|
|||
p{end+1} = '/missing/strsplit';
|
||||
end
|
||||
|
||||
% isrow is missing in Matlab<R2010b
|
||||
% isrow, iscolumn and ismatrix are missing in Matlab<R2010b
|
||||
if ~isoctave && matlab_ver_less_than('7.11')
|
||||
p{end+1} = '/missing/isrow';
|
||||
p{end+1} = '/missing/is-row-column-matrix';
|
||||
end
|
||||
|
||||
P = cellfun(@(c)[dynareroot(1:end-1) c], p, 'uni',false);
|
||||
|
|
|
@ -235,8 +235,8 @@ if ~isequal(options_.mode_compute,0) && ~options_.mh_posterior_mode_estimation
|
|||
if options_.analytic_derivation && strcmp(func2str(objective_function),'dsge_likelihood')
|
||||
ana_deriv_old = options_.analytic_derivation;
|
||||
options_.analytic_derivation = 2;
|
||||
[junk1, junk2,junk3, junk4, hh] = feval(objective_function,xparam1, ...
|
||||
dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,bounds,oo_);
|
||||
[~,~,~,~,hh] = feval(objective_function,xparam1, ...
|
||||
dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,bounds,oo_);
|
||||
options_.analytic_derivation = ana_deriv_old;
|
||||
elseif ~isnumeric(options_.mode_compute) || ~(isequal(options_.mode_compute,5) && newratflag~=1 && strcmp(func2str(objective_function),'dsge_likelihood'))
|
||||
% with flag==0, we force to use the hessian from outer product gradient of optimizer 5
|
||||
|
@ -373,9 +373,8 @@ if any(bayestopt_.pshape > 0) && ~options_.mh_posterior_mode_estimation
|
|||
skipline()
|
||||
end
|
||||
if options_.dsge_var
|
||||
[junk1,junk2,junk3,junk4,junk5,junk6,junk7,oo_.dsge_var.posterior_mode.PHI_tilde,oo_.dsge_var.posterior_mode.SIGMA_u_tilde,oo_.dsge_var.posterior_mode.iXX,oo_.dsge_var.posterior_mode.prior] =...
|
||||
[~,~,~,~,~,~,~,oo_.dsge_var.posterior_mode.PHI_tilde,oo_.dsge_var.posterior_mode.SIGMA_u_tilde,oo_.dsge_var.posterior_mode.iXX,oo_.dsge_var.posterior_mode.prior] =...
|
||||
feval(objective_function,xparam1,dataset_,dataset_info,options_,M_,estim_params_,bayestopt_,bounds,oo_);
|
||||
clear('junk1','junk2','junk3','junk4','junk5','junk6','junk7');
|
||||
end
|
||||
|
||||
elseif ~any(bayestopt_.pshape > 0) && ~options_.mh_posterior_mode_estimation
|
||||
|
@ -519,7 +518,7 @@ if (any(bayestopt_.pshape >0 ) && options_.mh_replic) || ...
|
|||
oo_.posterior.metropolis=oo_load_mh.oo_.posterior.metropolis;
|
||||
end
|
||||
end
|
||||
[error_flag,junk,options_]= metropolis_draw(1,options_,estim_params_,M_);
|
||||
[error_flag,~,options_]= metropolis_draw(1,options_,estim_params_,M_);
|
||||
if options_.bayesian_irf
|
||||
if error_flag
|
||||
error('Estimation::mcmc: I cannot compute the posterior IRFs!')
|
||||
|
|
|
@ -454,38 +454,38 @@ if options_.block == 1
|
|||
% Set restrict_state to postion of observed + state variables in expanded state vector.
|
||||
oo_.dr.restrict_var_list = [k1(i_posA) M_.state_var(sort(i_posB))];
|
||||
% set mf0 to positions of state variables in restricted state vector for likelihood computation.
|
||||
[junk,bayestopt_.mf0] = ismember(M_.state_var',oo_.dr.restrict_var_list);
|
||||
[~,bayestopt_.mf0] = ismember(M_.state_var',oo_.dr.restrict_var_list);
|
||||
% Set mf1 to positions of observed variables in restricted state vector for likelihood computation.
|
||||
[junk,bayestopt_.mf1] = ismember(k1,oo_.dr.restrict_var_list);
|
||||
[~,bayestopt_.mf1] = ismember(k1,oo_.dr.restrict_var_list);
|
||||
% Set mf2 to positions of observed variables in expanded state vector for filtering and smoothing.
|
||||
bayestopt_.mf2 = var_obs_index_dr;
|
||||
bayestopt_.mfys = k1;
|
||||
oo_.dr.restrict_columns = [size(i_posA,1)+(1:size(M_.state_var,2))];
|
||||
[k2, i_posA, i_posB] = union(k3p, M_.state_var', 'rows');
|
||||
bayestopt_.smoother_var_list = [k3p(i_posA); M_.state_var(sort(i_posB))'];
|
||||
[junk,junk,bayestopt_.smoother_saved_var_list] = intersect(k3p,bayestopt_.smoother_var_list(:));
|
||||
[junk,ic] = intersect(bayestopt_.smoother_var_list,M_.state_var);
|
||||
[~,~,bayestopt_.smoother_saved_var_list] = intersect(k3p,bayestopt_.smoother_var_list(:));
|
||||
[~,ic] = intersect(bayestopt_.smoother_var_list,M_.state_var);
|
||||
bayestopt_.smoother_restrict_columns = ic;
|
||||
[junk,bayestopt_.smoother_mf] = ismember(k1, bayestopt_.smoother_var_list);
|
||||
[~,bayestopt_.smoother_mf] = ismember(k1, bayestopt_.smoother_var_list);
|
||||
else
|
||||
% Define union of observed and state variables
|
||||
k2 = union(var_obs_index_dr,[M_.nstatic+1:M_.nstatic+M_.nspred]', 'rows');
|
||||
% Set restrict_state to postion of observed + state variables in expanded state vector.
|
||||
oo_.dr.restrict_var_list = k2;
|
||||
% set mf0 to positions of state variables in restricted state vector for likelihood computation.
|
||||
[junk,bayestopt_.mf0] = ismember([M_.nstatic+1:M_.nstatic+M_.nspred]',k2);
|
||||
[~,bayestopt_.mf0] = ismember([M_.nstatic+1:M_.nstatic+M_.nspred]',k2);
|
||||
% Set mf1 to positions of observed variables in restricted state vector for likelihood computation.
|
||||
[junk,bayestopt_.mf1] = ismember(var_obs_index_dr,k2);
|
||||
[~,bayestopt_.mf1] = ismember(var_obs_index_dr,k2);
|
||||
% Set mf2 to positions of observed variables in expanded state vector for filtering and smoothing.
|
||||
bayestopt_.mf2 = var_obs_index_dr;
|
||||
bayestopt_.mfys = k1;
|
||||
[junk,ic] = intersect(k2,nstatic+(1:npred)');
|
||||
[~,ic] = intersect(k2,nstatic+(1:npred)');
|
||||
oo_.dr.restrict_columns = [ic; length(k2)+(1:nspred-npred)'];
|
||||
bayestopt_.smoother_var_list = union(k2,k3);
|
||||
[junk,junk,bayestopt_.smoother_saved_var_list] = intersect(k3,bayestopt_.smoother_var_list(:));
|
||||
[junk,ic] = intersect(bayestopt_.smoother_var_list,nstatic+(1:npred)');
|
||||
[~,~,bayestopt_.smoother_saved_var_list] = intersect(k3,bayestopt_.smoother_var_list(:));
|
||||
[~,ic] = intersect(bayestopt_.smoother_var_list,nstatic+(1:npred)');
|
||||
bayestopt_.smoother_restrict_columns = ic;
|
||||
[junk,bayestopt_.smoother_mf] = ismember(var_obs_index_dr, bayestopt_.smoother_var_list);
|
||||
[~,bayestopt_.smoother_mf] = ismember(var_obs_index_dr, bayestopt_.smoother_var_list);
|
||||
end
|
||||
|
||||
if options_.analytic_derivation
|
||||
|
|
|
@ -52,11 +52,11 @@ for i=1:m
|
|||
else
|
||||
h = H(:,i);
|
||||
end
|
||||
[Fh,junk1,junk2,flag] = feval(fcn, x+transpose(h), varargin{:});
|
||||
[Fh,~,~,flag] = feval(fcn, x+transpose(h), varargin{:});
|
||||
if flag
|
||||
G(:,i) = (Fh-F)/epsilon;
|
||||
else
|
||||
[Fh,junk1,junk2,flag] = feval(fcn, x-transpose(h), varargin{:});
|
||||
[Fh,~,~,flag] = feval(fcn, x-transpose(h), varargin{:});
|
||||
if flag
|
||||
G(:,i) = (F-Fh)/epsilon;
|
||||
else
|
||||
|
|
|
@ -48,7 +48,7 @@ exo_ss = [oo.exo_steady_state; oo.exo_det_steady_state];
|
|||
|
||||
if length(M.aux_vars) > 0 && ~steadystate_flag && M.set_auxiliary_variables
|
||||
h_set_auxiliary_variables = str2func([M.fname '.set_auxiliary_variables']);
|
||||
ys_init = h_set_auxiliary_variables(ys_init,exo_ss,M.params);
|
||||
ys_init = h_set_auxiliary_variables(ys_init,exo_ss,params);
|
||||
end
|
||||
|
||||
if options.ramsey_policy
|
||||
|
@ -66,7 +66,7 @@ if options.ramsey_policy
|
|||
fprintf('\nevaluate_steady_state: The steady state file computation for the Ramsey problem resulted in NaNs.\n')
|
||||
fprintf('evaluate_steady_state: The steady state was computed conditional on the following initial instrument values: \n')
|
||||
for ii = 1:size(options.instruments,1)
|
||||
fprintf('\t %s \t %f \n',options.instruments(ii,:),ys_init(strmatch(options.instruments(ii,:),M.endo_names,'exact')))
|
||||
fprintf('\t %s \t %f \n',options.instruments{ii},ys_init(strmatch(options.instruments{ii},M.endo_names,'exact')))
|
||||
end
|
||||
fprintf('evaluate_steady_state: The problem occured in the following equations: \n')
|
||||
fprintf('\t Equation(s): ')
|
||||
|
@ -87,7 +87,7 @@ if options.ramsey_policy
|
|||
fprintf('\nevaluate_steady_state: The steady state file computation for the Ramsey problem resulted in complex numbers.\n')
|
||||
fprintf('evaluate_steady_state: The steady state was computed conditional on the following initial instrument values: \n')
|
||||
for ii = 1:size(options.instruments,1)
|
||||
fprintf('\t %s \t %f \n',options.instruments(ii,:),ys_init(strmatch(options.instruments(ii,:),M.endo_names,'exact')))
|
||||
fprintf('\t %s \t %f \n',options.instruments{ii},ys_init(strmatch(options.instruments{ii},M.endo_names,'exact')))
|
||||
end
|
||||
fprintf('evaluate_steady_state: If those initial values are not admissable, change them using an initval-block.\n')
|
||||
skipline(2)
|
||||
|
@ -102,7 +102,7 @@ if options.ramsey_policy
|
|||
fprintf('\nevaluate_steady_state: The steady state file does not solve the steady state for the Ramsey problem.\n')
|
||||
fprintf('evaluate_steady_state: Conditional on the following instrument values: \n')
|
||||
for ii = 1:size(options.instruments,1)
|
||||
fprintf('\t %s \t %f \n',options.instruments(ii,:),ys_init(strmatch(options.instruments(ii,:),M.endo_names,'exact')))
|
||||
fprintf('\t %s \t %f \n',options.instruments{ii},ys_init(strmatch(options.instruments{ii},M.endo_names,'exact')))
|
||||
end
|
||||
fprintf('evaluate_steady_state: the following equations have non-zero residuals: \n')
|
||||
for ii=n_multipliers+1:M.endo_nbr
|
||||
|
@ -150,7 +150,7 @@ if options.ramsey_policy
|
|||
fprintf('\nevaluate_steady_state: The steady state computation for the Ramsey problem resulted in NaNs.\n')
|
||||
fprintf('evaluate_steady_state: The steady state computation resulted in the following instrument values: \n')
|
||||
for i = 1:size(options.instruments,1)
|
||||
fprintf('\t %s \t %f \n',options.instruments(i,:),ys(strmatch(options.instruments(i,:),M.endo_names,'exact')))
|
||||
fprintf('\t %s \t %f \n',options.instruments{i},ys(strmatch(options.instruments{i},M.endo_names,'exact')))
|
||||
end
|
||||
fprintf('evaluate_steady_state: The problem occured in the following equations: \n')
|
||||
fprintf('\t Equation(s): ')
|
||||
|
@ -168,7 +168,7 @@ if options.ramsey_policy
|
|||
fprintf('\nevaluate_steady_state: The steady state computation for the Ramsey problem resulted in NaNs in the auxiliary equations.\n')
|
||||
fprintf('evaluate_steady_state: The steady state computation resulted in the following instrument values: \n')
|
||||
for i = 1:size(options.instruments,1)
|
||||
fprintf('\t %s \t %f \n',options.instruments(i,:),ys(strmatch(options.instruments(i,:),M.endo_names,'exact')))
|
||||
fprintf('\t %s \t %f \n',options.instruments{i},ys(strmatch(options.instruments{i},M.endo_names,'exact')))
|
||||
end
|
||||
fprintf('evaluate_steady_state: The problem occured in the following equations: \n')
|
||||
fprintf('\t Auxiliary equation(s): ')
|
||||
|
@ -186,7 +186,7 @@ if options.ramsey_policy
|
|||
fprintf('\nevaluate_steady_state: The steady state for the Ramsey problem could not be computed.\n')
|
||||
fprintf('evaluate_steady_state: The steady state computation stopped with the following instrument values:: \n')
|
||||
for i = 1:size(options.instruments,1)
|
||||
fprintf('\t %s \t %f \n',options.instruments(i,:),ys(strmatch(options.instruments(i,:),M.endo_names,'exact')))
|
||||
fprintf('\t %s \t %f \n',options.instruments{i},ys(strmatch(options.instruments{i},M.endo_names,'exact')))
|
||||
end
|
||||
fprintf('evaluate_steady_state: The following equations have non-zero residuals: \n')
|
||||
for ii=1:n_multipliers
|
||||
|
@ -289,7 +289,7 @@ if check
|
|||
%make sure ys contains auxiliary variables in case of problem with dynare_solve
|
||||
if length(M.aux_vars) > 0 && ~steadystate_flag
|
||||
if M.set_auxiliary_variables
|
||||
ys = h_set_auxiliary_variables(ys,exo_ss,M.params);
|
||||
ys = h_set_auxiliary_variables(ys,exo_ss,params);
|
||||
end
|
||||
end
|
||||
resid = evaluate_static_model(ys,exo_ss,params,M,options);
|
||||
|
@ -307,15 +307,15 @@ if M.static_and_dynamic_models_differ
|
|||
z = repmat(ys,1,M.maximum_lead + M.maximum_lag + 1);
|
||||
zx = repmat([exo_ss'], M.maximum_lead + M.maximum_lag + 1, 1);
|
||||
if options.bytecode
|
||||
[chck, r, junk]= bytecode('dynamic','evaluate', z, zx, M.params, ys, 1);
|
||||
[chck, r, ~]= bytecode('dynamic','evaluate', z, zx, params, ys, 1);
|
||||
mexErrCheck('bytecode', chck);
|
||||
elseif options.block
|
||||
[r, oo.dr] = feval([M.fname '.dynamic'], z', zx, M.params, ys, M.maximum_lag+1, oo.dr);
|
||||
[r, oo.dr] = feval([M.fname '.dynamic'], z', zx, params, ys, M.maximum_lag+1, oo.dr);
|
||||
else
|
||||
iyv = M.lead_lag_incidence';
|
||||
iyr0 = find(iyv(:));
|
||||
xys = z(iyr0);
|
||||
r = feval([M.fname '.dynamic'], z(iyr0), zx, M.params, ys, M.maximum_lag + 1);
|
||||
r = feval([M.fname '.dynamic'], z(iyr0), zx, params, ys, M.maximum_lag + 1);
|
||||
end
|
||||
% Fail if residual greater than tolerance
|
||||
if max(abs(r)) > options.solve_tolf
|
||||
|
|
|
@ -36,8 +36,6 @@ function [ys,params,info] = evaluate_steady_state_file(ys_init,exo_ss,M,options,
|
|||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
debug = false;
|
||||
|
||||
ys = [];
|
||||
params = M.params;
|
||||
info = 0;
|
||||
|
@ -102,49 +100,11 @@ end
|
|||
|
||||
% adding values for auxiliary variables
|
||||
if length(M.aux_vars) > 0 && ~options.ramsey_policy
|
||||
if debug
|
||||
ys0 = ys;
|
||||
end
|
||||
if M.set_auxiliary_variables
|
||||
ys = h_set_auxiliary_variables(ys,exo_ss,params);
|
||||
end
|
||||
if debug
|
||||
ys1 = ys;
|
||||
end
|
||||
if M.set_auxiliary_variables
|
||||
ys = h_set_auxiliary_variables(ys,exo_ss,params);
|
||||
end
|
||||
if debug
|
||||
ys2 = ys;
|
||||
end
|
||||
if debug
|
||||
if M.set_auxiliary_variables
|
||||
ys = h_set_auxiliary_variables(ys,exo_ss,params);
|
||||
end
|
||||
ys3 = ys;
|
||||
idx = find(abs(ys0-ys1)>0);
|
||||
if ~isempty(idx)
|
||||
M.endo_names{idx}
|
||||
else
|
||||
disp('1-invariant')
|
||||
end
|
||||
idx = find(abs(ys2-ys1)>0);
|
||||
if ~isempty(idx)
|
||||
M.endo_names{idx}
|
||||
else
|
||||
disp('2-invariant')
|
||||
end
|
||||
idx = find(abs(ys3-ys3)>0);
|
||||
if ~isempty(idx)
|
||||
M.endo_names{idx}
|
||||
else
|
||||
disp('3-invariant')
|
||||
end
|
||||
pause
|
||||
end
|
||||
end
|
||||
|
||||
check1 = 0;
|
||||
if steady_state_checkflag
|
||||
% Check whether the steady state obtained from the _steadystate file is a steady state.
|
||||
[residuals, check] = evaluate_static_model(ys, exo_ss, params, M, options);
|
||||
|
|
|
@ -55,7 +55,7 @@ if strcmpi(type,'posterior')
|
|||
CutSample(M_, options_, estim_params_);
|
||||
%% initialize metropolis draws
|
||||
options_.sub_draws=n_draws; %set draws for sampling; changed value is not returned to base workspace
|
||||
[error_flag,junk,options_]= metropolis_draw(1,options_,estim_params_,M_);
|
||||
[error_flag,~,options_]= metropolis_draw(1,options_,estim_params_,M_);
|
||||
if error_flag
|
||||
error('EXECUTE_POSTERIOR_FUNCTION: The draws could not be initialized')
|
||||
end
|
||||
|
|
|
@ -319,8 +319,8 @@ if nargout > 5
|
|||
end
|
||||
end
|
||||
|
||||
[junk,cols_b,cols_j] = find(M_.lead_lag_incidence(M_.maximum_endo_lag+1, ...
|
||||
oo_.dr.order_var));
|
||||
[~,cols_b,cols_j] = find(M_.lead_lag_incidence(M_.maximum_endo_lag+1, ...
|
||||
oo_.dr.order_var));
|
||||
GAM0 = zeros(M_.endo_nbr,M_.endo_nbr);
|
||||
Dg0 = zeros(M_.endo_nbr,M_.endo_nbr,param_nbr);
|
||||
GAM0(:,cols_b) = g1(:,cols_j);
|
||||
|
@ -651,7 +651,6 @@ is=is(find(gpp(is,2)==j));
|
|||
|
||||
if ~isempty(is)
|
||||
g22(sub2ind([n,n],gpp(is,3),gpp(is,4)))=gpp(is,5)';
|
||||
g22(sub2ind([n,n],gpp(is,4),gpp(is,3)))=gpp(is,5)';
|
||||
end
|
||||
return
|
||||
|
||||
|
@ -675,10 +674,8 @@ for is=1:length(gpp)
|
|||
% indx = find(ic==find(d));
|
||||
if fsparse
|
||||
g22(sub2ind([m,n],gpp(is,1),gpp(is,2)),sub2ind([npar,npar],gpp(is,3),gpp(is,4)))=gpp(is,5);
|
||||
g22(sub2ind([m,n],gpp(is,1),gpp(is,2)),sub2ind([npar,npar],gpp(is,4),gpp(is,3)))=gpp(is,5);
|
||||
else
|
||||
g22(gpp(is,1),gpp(is,2),gpp(is,3),gpp(is,4))=gpp(is,5);
|
||||
g22(gpp(is,1),gpp(is,2),gpp(is,4),gpp(is,3))=gpp(is,5);
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -696,7 +693,6 @@ for is=1:length(rpp)
|
|||
% d(rpp(is,2),rpp(is,3))=1;
|
||||
% indx = find(ic==find(d));
|
||||
r22(rpp(is,1),rpp(is,2),rpp(is,3))=rpp(is,4);
|
||||
r22(rpp(is,1),rpp(is,3),rpp(is,2))=rpp(is,4);
|
||||
end
|
||||
|
||||
return
|
||||
|
@ -707,7 +703,6 @@ h2=zeros(r,m,m,npar);
|
|||
|
||||
for is=1:length(hp)
|
||||
h2(hp(is,1),hp(is,2),hp(is,3),hp(is,4))=hp(is,5);
|
||||
h2(hp(is,1),hp(is,3),hp(is,2),hp(is,4))=hp(is,5);
|
||||
end
|
||||
|
||||
return
|
||||
|
@ -722,10 +717,4 @@ if ~isempty(is)
|
|||
h2(sub2ind([m,npar],hp(is,3),hp(is,4)))=hp(is,5)';
|
||||
end
|
||||
|
||||
is=is1(find(hp(is1,3)==j));
|
||||
|
||||
if ~isempty(is)
|
||||
h2(sub2ind([m,npar],hp(is,2),hp(is,4)))=hp(is,5)';
|
||||
end
|
||||
|
||||
return
|
|
@ -23,7 +23,7 @@ function [state_u,state_n] = get_dynare_random_generator_state()
|
|||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
matlab_random_streams = ~(isoctave || matlab_ver_less_than('7.7'));
|
||||
matlab_random_streams = ~isoctave;
|
||||
|
||||
if matlab_random_streams% Use new matlab interface.
|
||||
if matlab_ver_less_than('7.12')
|
||||
|
|
|
@ -43,7 +43,7 @@ bk_number = record.Nblck ;
|
|||
predicted_mhname = [ BaseName '_mh' int2str(mh_number) '_blck' int2str(bk_number) '.mat' ] ;
|
||||
|
||||
all_mh_files = dir([BaseName '_mh*_blck*' ]);
|
||||
[junk,idx] = sort([all_mh_files.datenum]);
|
||||
[~,idx] = sort([all_mh_files.datenum]);
|
||||
mhname = all_mh_files(idx(end)).name;
|
||||
|
||||
if ~strcmpi(mhname,predicted_mhname)
|
||||
|
|
|
@ -130,8 +130,8 @@ set_dynare_seed('default');
|
|||
|
||||
|
||||
% Create directories
|
||||
[junk,junk]=mkdir(M_.fname);
|
||||
[junk,junk]=mkdir([M_.fname filesep 'Output']);
|
||||
[~,~]=mkdir(M_.fname);
|
||||
[~,~]=mkdir([M_.fname filesep 'Output']);
|
||||
|
||||
% Load user configuration file.
|
||||
if isfield(options_, 'global_init_file')
|
||||
|
|
|
@ -108,7 +108,7 @@ comp_nbr0=comp_nbr;
|
|||
for j=1:nvar
|
||||
z1 = squeeze(z(i_var(j),:,:));
|
||||
if screen_shocks
|
||||
[junk, isort] = sort(mean(abs(z1(1:end-2,:)')), 'descend');
|
||||
[~, isort] = sort(mean(abs(z1(1:end-2,:)')), 'descend');
|
||||
labels = char(char(shock_names(isort(1:16))),'Others', 'Initial values');
|
||||
zres = sum(z1(isort(17:end),:),1);
|
||||
z1 = [z1(isort(1:16),:); zres; z1(comp_nbr0:end,:)];
|
||||
|
|
|
@ -135,7 +135,7 @@ comp_nbr0=comp_nbr;
|
|||
for j=1:nvar
|
||||
z1 = squeeze(z(i_var(j),:,:));
|
||||
if screen_shocks,
|
||||
[junk, isort] = sort(mean(abs(z1(1:end-2,:)')), 'descend');
|
||||
[~, isort] = sort(mean(abs(z1(1:end-2,:)')), 'descend');
|
||||
labels = char(char(shock_names(isort(1:16))),'Others', 'Initial values');
|
||||
zres = sum(z1(isort(17:end),:),1);
|
||||
z1 = [z1(isort(1:16),:); zres; z1(comp_nbr0:end,:)];
|
||||
|
|
|
@ -42,7 +42,6 @@ end
|
|||
pvalue_ks = DynareOptions.opt_gsa.pvalue_ks;
|
||||
indx_irf = [];
|
||||
indx_moment = [];
|
||||
DynareOptions.nodisplay = 1;
|
||||
init = ~DynareOptions.opt_gsa.load_stab;
|
||||
|
||||
options_mcf.pvalue_ks = DynareOptions.opt_gsa.pvalue_ks;
|
||||
|
|
|
@ -34,6 +34,8 @@ if DynareOptions.TeX
|
|||
else
|
||||
param_names_tex = options_mcf.param_names_tex;
|
||||
end
|
||||
else
|
||||
param_names_tex = strrep(options_mcf.param_names,'_','\_');
|
||||
end
|
||||
amcf_name = options_mcf.amcf_name;
|
||||
amcf_title = options_mcf.amcf_title;
|
||||
|
@ -78,7 +80,7 @@ if ~isempty(indmcf) && ~DynareOptions.nograph
|
|||
skipline()
|
||||
xx=[];
|
||||
if ~ isempty(xparam1), xx=xparam1(indmcf); end
|
||||
scatter_mcf(lpmat(ibeha,indmcf),lpmat(inobeha,indmcf), param_names(indmcf), ...
|
||||
scatter_mcf(lpmat(ibeha,indmcf),lpmat(inobeha,indmcf), param_names_tex(indmcf), ...
|
||||
'.', [fname_,'_',amcf_name], OutputDirectoryName, amcf_title,xx, DynareOptions, ...
|
||||
beha_title, nobeha_title)
|
||||
end
|
||||
|
|
|
@ -49,7 +49,7 @@ if init
|
|||
pdraw = zeros(npar,1);
|
||||
lbcum = zeros(npar,1);
|
||||
ubcum = ones(npar,1);
|
||||
[junk1,junk2,junk3,lb,ub,junk4] = set_prior(estim_params_,M_,options_); %Prepare bounds
|
||||
[~,~,~,lb,ub,~] = set_prior(estim_params_,M_,options_); %Prepare bounds
|
||||
if ~isempty(bayestopt_) && any(bayestopt_.pshape > 0)
|
||||
% Set prior bounds
|
||||
bounds = prior_bounds(bayestopt_, options_.prior_trunc);
|
||||
|
|
|
@ -143,7 +143,7 @@ for i = 1:p
|
|||
end
|
||||
if i==1
|
||||
if nflag == 1
|
||||
ylabel(vnames(j,:),'Rotation',45,'interpreter','none', ...
|
||||
ylabel(vnames(j,:),'Rotation',45, ...
|
||||
'HorizontalAlignment','right','VerticalAlignment','middle');
|
||||
else
|
||||
ylabel([num2str(j),' '],'Rotation',90)
|
||||
|
@ -151,7 +151,7 @@ for i = 1:p
|
|||
end
|
||||
if j==1
|
||||
if nflag == 1
|
||||
title(vnames(i,:),'interpreter','none','Rotation',45, ...
|
||||
title(vnames(i,:),'Rotation',45, ...
|
||||
'HorizontalAlignment','left','VerticalAlignment','bottom')
|
||||
else
|
||||
title(num2str(i))
|
||||
|
|
|
@ -92,7 +92,7 @@ p2 = bayestopt_.p2(nshock+1:end);
|
|||
p3 = bayestopt_.p3(nshock+1:end);
|
||||
p4 = bayestopt_.p4(nshock+1:end);
|
||||
|
||||
[junk1,junk2,junk3,lb,ub,junk4] = set_prior(estim_params_,M_,options_); %Prepare bounds
|
||||
[~,~,~,lb,ub,~] = set_prior(estim_params_,M_,options_); %Prepare bounds
|
||||
if ~isempty(bayestopt_) && any(bayestopt_.pshape > 0)
|
||||
% Set prior bounds
|
||||
bounds = prior_bounds(bayestopt_, options_.prior_trunc);
|
||||
|
|
|
@ -123,24 +123,27 @@ if info(1)==0
|
|||
ide_strength_J=NaN(1,nparam);
|
||||
ide_strength_J_prior=NaN(1,nparam);
|
||||
if init
|
||||
normaliz = NaN(1,nparam);
|
||||
ide_uncert_unnormaliz = NaN(1,nparam);
|
||||
if prior_exist
|
||||
offset_prior=0;
|
||||
if ~isempty(estim_params_.var_exo)
|
||||
normaliz1 = estim_params_.var_exo(:,7)'; % normalize with prior standard deviation
|
||||
normaliz_prior_std = bayestopt_.p2(1:estim_params_.nvx)'; % normalize with prior standard deviation
|
||||
offset_prior=offset_prior+estim_params_.nvx+estim_params_.nvn;
|
||||
else
|
||||
normaliz1=[];
|
||||
normaliz_prior_std=[];
|
||||
end
|
||||
if ~isempty(estim_params_.corrx)
|
||||
normaliz1 = [normaliz1 estim_params_.corrx(:,8)']; % normalize with prior standard deviation
|
||||
normaliz_prior_std = [normaliz_prior_std bayestopt_.p2(offset_prior+1:offset_prior+estim_params_.ncx)']; % normalize with prior standard deviation
|
||||
offset_prior=offset_prior+estim_params_.ncx+estim_params_.ncn;
|
||||
end
|
||||
if ~isempty(estim_params_.param_vals)
|
||||
normaliz1 = [normaliz1 estim_params_.param_vals(:,7)']; % normalize with prior standard deviation
|
||||
normaliz_prior_std = [normaliz_prior_std bayestopt_.p2(offset_prior+1:offset_prior+estim_params_.np)']; % normalize with prior standard deviation
|
||||
end
|
||||
% normaliz = max([normaliz; normaliz1]);
|
||||
normaliz1(isinf(normaliz1)) = 1;
|
||||
% normaliz1(isinf(normaliz1)) = 1;
|
||||
|
||||
else
|
||||
normaliz1 = NaN(1,nparam);
|
||||
normaliz_prior_std = NaN(1,nparam);
|
||||
end
|
||||
try
|
||||
options_.irf = 0;
|
||||
|
@ -176,7 +179,7 @@ if info(1)==0
|
|||
end
|
||||
indok = find(max(ide_hess.indno,[],1)==0);
|
||||
cparam(indok,indok) = inv(AHess(indok,indok));
|
||||
normaliz(indok) = sqrt(diag(cparam(indok,indok)))';
|
||||
ide_uncert_unnormaliz(indok) = sqrt(diag(cparam(indok,indok)))';
|
||||
cmm = NaN(size(siJ,1),size(siJ,1));
|
||||
ind1=find(ide_hess.ind0);
|
||||
cmm = siJ(:,ind1)*((AHess(ind1,ind1))\siJ(:,ind1)');
|
||||
|
@ -198,7 +201,7 @@ if info(1)==0
|
|||
if isoctave || matlab_ver_less_than('8.3')
|
||||
[V,D]=eig(cc);
|
||||
%fix for older Matlab versions that do not support computing left eigenvalues, see http://mathworks.com/help/releases/R2012b/matlab/ref/eig.html
|
||||
[W,junk] = eig(cc.');
|
||||
[W,~] = eig(cc.');
|
||||
W = conj(W);
|
||||
else
|
||||
[V,D,W]=eig(cc);
|
||||
|
@ -242,22 +245,23 @@ if info(1)==0
|
|||
clre = siLRE(:,ind1-offset)*((MIM(ind1,ind1))\siLRE(:,ind1-offset)');
|
||||
if ~isempty(indok)
|
||||
rhoM(indok)=sqrt(1./diag(inv(tildaM(indok,indok))));
|
||||
normaliz(indok) = (sqrt(diag(inv(tildaM(indok,indok))))./deltaM(indok))'; %sqrt(diag(inv(MIM(indok,indok))))';
|
||||
ide_uncert_unnormaliz(indok) = (sqrt(diag(inv(tildaM(indok,indok))))./deltaM(indok))'; %sqrt(diag(inv(MIM(indok,indok))))';
|
||||
end
|
||||
% deltaM = deltaM.*abs(params')
|
||||
flag_score=0;
|
||||
end
|
||||
ide_strength_J(indok) = (1./(normaliz(indok)'./abs(params(indok)')));
|
||||
ide_strength_J_prior(indok) = (1./(normaliz(indok)'./normaliz1(indok)'));
|
||||
ide_strength_J(params==0)=1./normaliz(params==0)';
|
||||
deltaM_prior = deltaM.*abs(normaliz1');
|
||||
end
|
||||
ide_strength_J(indok) = (1./(ide_uncert_unnormaliz(indok)'./abs(params(indok)')));
|
||||
ide_strength_J_prior(indok) = (1./(ide_uncert_unnormaliz(indok)'./normaliz_prior_std(indok)'));
|
||||
%ide_strength_J(params==0)=1./ide_uncert_unnormaliz(params==0)';
|
||||
sensitivity_zero_pos=find(isinf(deltaM));
|
||||
deltaM_prior = deltaM.*abs(normaliz_prior_std');
|
||||
deltaM = deltaM.*abs(params');
|
||||
deltaM(params==0)=deltaM_prior(params==0);
|
||||
%deltaM(params==0)=deltaM_prior(params==0);
|
||||
quant = siJ./repmat(sqrt(diag(cmm)),1,nparam);
|
||||
if size(quant,1)==1
|
||||
siJnorm = abs(quant).*normaliz1;
|
||||
siJnorm = abs(quant).*normaliz_prior_std;
|
||||
else
|
||||
siJnorm = vnorm(quant).*normaliz1;
|
||||
siJnorm = vnorm(quant).*normaliz_prior_std;
|
||||
end
|
||||
% siJnorm = vnorm(siJ(inok,:)).*normaliz;
|
||||
quant=[];
|
||||
|
@ -272,9 +276,9 @@ if info(1)==0
|
|||
if ~isempty(iy)
|
||||
quant = siH./repmat(sqrt(diag_chh(iy)),1,nparam);
|
||||
if size(quant,1)==1
|
||||
siHnorm = abs(quant).*normaliz1;
|
||||
siHnorm = abs(quant).*normaliz_prior_std;
|
||||
else
|
||||
siHnorm = vnorm(quant).*normaliz1;
|
||||
siHnorm = vnorm(quant).*normaliz_prior_std;
|
||||
end
|
||||
else
|
||||
siHnorm = [];
|
||||
|
@ -292,9 +296,9 @@ if info(1)==0
|
|||
if ~isempty(iy)
|
||||
quant = siLRE./repmat(sqrt(diag_clre(iy)),1,np);
|
||||
if size(quant,1)==1
|
||||
siLREnorm = abs(quant).*normaliz1(offset+1:end);
|
||||
siLREnorm = abs(quant).*normaliz_prior_std(offset+1:end);
|
||||
else
|
||||
siLREnorm = vnorm(quant).*normaliz1(offset+1:end);
|
||||
siLREnorm = vnorm(quant).*normaliz_prior_std(offset+1:end);
|
||||
end
|
||||
else
|
||||
siLREnorm=[];
|
||||
|
@ -304,6 +308,8 @@ if info(1)==0
|
|||
ide_hess.ide_strength_J_prior=ide_strength_J_prior;
|
||||
ide_hess.deltaM=deltaM;
|
||||
ide_hess.deltaM_prior=deltaM_prior;
|
||||
ide_hess.sensitivity_zero_pos=sensitivity_zero_pos;
|
||||
ide_hess.identified_parameter_indices=indok;
|
||||
ide_moments.siJnorm=siJnorm;
|
||||
ide_model.siHnorm=siHnorm;
|
||||
ide_lre.siLREnorm=siLREnorm;
|
||||
|
|
|
@ -74,7 +74,7 @@ end
|
|||
if ~isfield(oo_,'initval_decomposition')
|
||||
options_.selected_variables_only = 0; %make sure all variables are stored
|
||||
options_.plot_priors=0;
|
||||
[oo,M,junk1,junk2,Smoothed_Variables_deviation_from_mean] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_);
|
||||
[oo,M,~,~,Smoothed_Variables_deviation_from_mean] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_);
|
||||
|
||||
% reduced form
|
||||
dr = oo.dr;
|
||||
|
|
|
@ -66,7 +66,7 @@ if isfield(EstimatedParameters,'param_vals') && ~isempty(EstimatedParameters.par
|
|||
%check whether steady state file changes estimated parameters
|
||||
Model_par_varied=Model; %store Model structure
|
||||
Model_par_varied.params(EstimatedParameters.param_vals(:,1))=Model_par_varied.params(EstimatedParameters.param_vals(:,1))*1.01; %vary parameters
|
||||
[junk, new_steady_params_2] = evaluate_steady_state(DynareResults.steady_state,Model_par_varied,DynareOptions,DynareResults,DynareOptions.diffuse_filter==0);
|
||||
[~, new_steady_params_2] = evaluate_steady_state(DynareResults.steady_state,Model_par_varied,DynareOptions,DynareResults,DynareOptions.diffuse_filter==0);
|
||||
|
||||
changed_par_indices=find((old_steady_params(EstimatedParameters.param_vals(:,1))-new_steady_params(EstimatedParameters.param_vals(:,1))) ...
|
||||
| (Model_par_varied.params(EstimatedParameters.param_vals(:,1))-new_steady_params_2(EstimatedParameters.param_vals(:,1))));
|
||||
|
@ -105,8 +105,8 @@ end
|
|||
% display warning if some parameters are still NaN
|
||||
test_for_deep_parameters_calibration(Model);
|
||||
|
||||
[lnprior, junk1,junk2,info]= priordens(xparam1,BayesInfo.pshape,BayesInfo.p6,BayesInfo.p7,BayesInfo.p3,BayesInfo.p4);
|
||||
if info
|
||||
[lnprior,~,~,info]= priordens(xparam1,BayesInfo.pshape,BayesInfo.p6,BayesInfo.p7,BayesInfo.p3,BayesInfo.p4);
|
||||
if any(info)
|
||||
fprintf('The prior density evaluated at the initial values is Inf for the following parameters: %s\n',BayesInfo.name{info,1})
|
||||
error('The initial value of the prior is -Inf')
|
||||
end
|
||||
|
|
|
@ -114,9 +114,9 @@ while t <= last
|
|||
tmp = (a+K*v);
|
||||
if analytic_derivation
|
||||
if analytic_derivation==2
|
||||
[Da,junk,DLIKt,D2a,junk2, Hesst] = computeDLIK(k,tmp,Z,Zflag,v,T,K,[],iF,Da,DYss,DT,[],[],[],notsteady,D2a,D2Yss,D2T,[],[]);
|
||||
[Da,~,DLIKt,D2a,~, Hesst] = computeDLIK(k,tmp,Z,Zflag,v,T,K,[],iF,Da,DYss,DT,[],[],[],notsteady,D2a,D2Yss,D2T,[],[]);
|
||||
else
|
||||
[Da,junk,DLIKt,Hesst] = computeDLIK(k,tmp,Z,Zflag,v,T,K,[],iF,Da,DYss,DT,[],[],[],notsteady);
|
||||
[Da,~,DLIKt,Hesst] = computeDLIK(k,tmp,Z,Zflag,v,T,K,[],iF,Da,DYss,DT,[],[],[],notsteady);
|
||||
end
|
||||
DLIK = DLIK + DLIKt;
|
||||
if analytic_derivation==2 || asy_hess
|
||||
|
|
|
@ -153,7 +153,7 @@ while t<=last
|
|||
end
|
||||
if analytic_derivation
|
||||
if analytic_derivation==2
|
||||
[Da,junk,D2a] = univariate_computeDstate(k,a,P,T,Da,DP,DT,[],0,D2a,D2P,D2T);
|
||||
[Da,~,D2a] = univariate_computeDstate(k,a,P,T,Da,DP,DT,[],0,D2a,D2P,D2T);
|
||||
else
|
||||
Da = univariate_computeDstate(k,a,P,T,Da,DP,DT,[],0);
|
||||
end
|
||||
|
|
|
@ -392,7 +392,7 @@ while (k < kmax) && (Psix > eps2)
|
|||
Fx = Fxnew;
|
||||
Phix = Phixnew;
|
||||
Psix = Psixnew;
|
||||
[junk,DFx] = feval(FUN,x,varargin{:});
|
||||
[~,DFx] = feval(FUN,x,varargin{:});
|
||||
DPhix = DPhi(x,Fx,DFx,lb,ub,lambda1,lambda2,n,Indexset);
|
||||
DPsix = DPhix'*Phix;
|
||||
normDPsix = norm(DPsix);
|
||||
|
|
|
@ -18,7 +18,7 @@ function o2WysrOISH = load_m_file_data_legacy(datafile, U7ORsJ0vy3) % --*-- Uni
|
|||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
cXDHdrXnqo5KwwVpTRuc6OprAW = datafile(1:end-2);
|
||||
[pathtocXDHdrXnqo5KwwVpTRuc6OprAW,cXDHdrXnqo5KwwVpTRuc6OprAW,junk] = fileparts(cXDHdrXnqo5KwwVpTRuc6OprAW);
|
||||
[pathtocXDHdrXnqo5KwwVpTRuc6OprAW,cXDHdrXnqo5KwwVpTRuc6OprAW,~] = fileparts(cXDHdrXnqo5KwwVpTRuc6OprAW);
|
||||
|
||||
if ~isempty(pathtocXDHdrXnqo5KwwVpTRuc6OprAW)
|
||||
% We need to change directory, first we keep the current directory in memory...
|
||||
|
@ -38,7 +38,7 @@ if ~isempty(pathtocXDHdrXnqo5KwwVpTRuc6OprAW)
|
|||
end
|
||||
|
||||
% Clear all the variables except the ones defined in the script.
|
||||
clear('pathtocXDHdrXnqo5KwwVpTRuc6OprAW', 'cXDHdrXnqo5KwwVpTRuc6OprAW', 'junk');
|
||||
clear('pathtocXDHdrXnqo5KwwVpTRuc6OprAW', 'cXDHdrXnqo5KwwVpTRuc6OprAW');
|
||||
|
||||
% Get the list of variables in the script.
|
||||
mj6F4eU1BN = whos();
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
function r = iscolumn(V)
|
||||
% Copyright (C) 2018 Dynare Team
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
sz = size(V);
|
||||
r = (length(sz) == 2) && (sz(2) == 1);
|
|
@ -0,0 +1,19 @@
|
|||
function r = ismatrix(V)
|
||||
% Copyright (C) 2018 Dynare Team
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
r = (ndims(V) == 2);
|
|
@ -16,5 +16,5 @@ function r = isrow(V)
|
|||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
[m, n] = size(V);
|
||||
r = (m == 1);
|
||||
sz = size(V);
|
||||
r = (length(sz) == 2) && (sz(1) == 1);
|
|
@ -204,22 +204,22 @@ z = repmat(dr.ys,1,klen);
|
|||
if ~options.block
|
||||
if options.order == 1
|
||||
if (options.bytecode)
|
||||
[chck, junk, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
|
||||
M.params, dr.ys, 1);
|
||||
[chck, ~, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
|
||||
M.params, dr.ys, 1);
|
||||
jacobia_ = [loc_dr.g1 loc_dr.g1_x loc_dr.g1_xd];
|
||||
else
|
||||
[junk,jacobia_] = feval([M.fname '.dynamic'],z(iyr0),exo_simul, ...
|
||||
M.params, dr.ys, it_);
|
||||
[~,jacobia_] = feval([M.fname '.dynamic'],z(iyr0),exo_simul, ...
|
||||
M.params, dr.ys, it_);
|
||||
end
|
||||
elseif options.order >= 2
|
||||
if (options.bytecode)
|
||||
[chck, junk, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
|
||||
M.params, dr.ys, 1);
|
||||
[chck, ~, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
|
||||
M.params, dr.ys, 1);
|
||||
jacobia_ = [loc_dr.g1 loc_dr.g1_x];
|
||||
else
|
||||
[junk,jacobia_,hessian1] = feval([M.fname '.dynamic'],z(iyr0),...
|
||||
exo_simul, ...
|
||||
M.params, dr.ys, it_);
|
||||
[~,jacobia_,hessian1] = feval([M.fname '.dynamic'],z(iyr0),...
|
||||
exo_simul, ...
|
||||
M.params, dr.ys, it_);
|
||||
end
|
||||
if options.use_dll
|
||||
% In USE_DLL mode, the hessian is in the 3-column sparse representation
|
||||
|
|
|
@ -6,19 +6,19 @@ coef_y = zeros(endo_nbr,3*endo_nbr);
|
|||
coef_u = zeros(endo_nbr,M.exo_nbr);
|
||||
|
||||
if M.maximum_lag > 0
|
||||
[junk,c1,c2] = find(ll(1,:));
|
||||
[~,c1,c2] = find(ll(1,:));
|
||||
coef_y(:,c1) = jacobian(:,c2);
|
||||
[junk,c1,c2] = find(ll(2,:));
|
||||
[~,c1,c2] = find(ll(2,:));
|
||||
coef_y(:,c1+endo_nbr) = jacobian(:,c2);
|
||||
if M.maximum_lead > 0
|
||||
[junk,c1,c2] = find(ll(3,:));
|
||||
[~,c1,c2] = find(ll(3,:));
|
||||
coef_y(:,c1+2*endo_nbr) = jacobian(:,c2);
|
||||
end
|
||||
else
|
||||
[junk,c1,c2] = find(ll(1,:));
|
||||
[~,c1,c2] = find(ll(1,:));
|
||||
coef_y(:,c1+endo_nbr) = jacobian(:,c2);
|
||||
if M.maximum_lead > 0
|
||||
[junk,c1,c2] = find(ll(2,:));
|
||||
[~,c1,c2] = find(ll(2,:));
|
||||
coef_y(:,c1+2*endo_nbr) = jacobian(:,c2);
|
||||
end
|
||||
end
|
||||
|
|
|
@ -142,7 +142,7 @@ while ~done
|
|||
elseif ischar(grad)
|
||||
[g1, badg1] = grad(x1,varargin{:});
|
||||
else
|
||||
[junk1,cost_flag,g1] = penalty_objective_function(x1,fcn,penalty,varargin{:});
|
||||
[~,cost_flag,g1] = penalty_objective_function(x1,fcn,penalty,varargin{:});
|
||||
badg1 = ~cost_flag;
|
||||
end
|
||||
wall1=badg1;
|
||||
|
@ -169,7 +169,7 @@ while ~done
|
|||
elseif ischar(grad)
|
||||
[g2, badg2] = grad(x2,varargin{:});
|
||||
else
|
||||
[junk2,cost_flag,g2] = penalty_objective_function(x1,fcn,penalty,varargin{:});
|
||||
[~,cost_flag,g2] = penalty_objective_function(x1,fcn,penalty,varargin{:});
|
||||
badg2 = ~cost_flag;
|
||||
end
|
||||
wall2=badg2;
|
||||
|
@ -201,7 +201,7 @@ while ~done
|
|||
elseif ischar(grad)
|
||||
[g3, badg3] = grad(x3,varargin{:});
|
||||
else
|
||||
[junk3,cost_flag,g3] = penalty_objective_function(x1,fcn,penalty,varargin{:});
|
||||
[~,cost_flag,g3] = penalty_objective_function(x1,fcn,penalty,varargin{:});
|
||||
badg3 = ~cost_flag;
|
||||
end
|
||||
wall3=badg3;
|
||||
|
@ -261,7 +261,7 @@ while ~done
|
|||
elseif ischar(grad)
|
||||
[gh, badgh] = grad(xh,varargin{:});
|
||||
else
|
||||
[junkh,cost_flag,gh] = penalty_objective_function(x1,fcn,penalty,varargin{:});
|
||||
[~,cost_flag,gh] = penalty_objective_function(x1,fcn,penalty,varargin{:});
|
||||
badgh = ~cost_flag;
|
||||
end
|
||||
end
|
||||
|
|
|
@ -46,12 +46,12 @@ for i=1:n
|
|||
xiold = x(i);
|
||||
h = step_length_correction(xiold,scale,i)*delta;
|
||||
x(i) = xiold + h;
|
||||
[f1,junk1,cost_flag1] = penalty_objective_function(x, fcn, penalty, varargin{:});
|
||||
[f1,~,cost_flag1] = penalty_objective_function(x, fcn, penalty, varargin{:});
|
||||
if ~cost_flag1
|
||||
fprintf('Gradient w.r.t. parameter number %3d (x=%16.8f,+h=%16.8f,f0=%16.8f,f1=%16.8f,f2=%16.8f,g0=%16.8f): penalty on the right!\n',i,xiold,h,f0,f1,f2,(f1 - f2) / (2*h))
|
||||
end
|
||||
x(i) = xiold - h;
|
||||
[f2,junk2,cost_flag2] = penalty_objective_function(x, fcn, penalty, varargin{:});
|
||||
[f2,~,cost_flag2] = penalty_objective_function(x, fcn, penalty, varargin{:});
|
||||
if ~cost_flag2
|
||||
fprintf('Gradient w.r.t. parameter number %3d (x=%16.8f,+h=%16.8f,f0=%16.8f,f1=%16.8f,f2=%16.8f,g0=%16.8f): penalty on the left!\n',i,xiold,h,f0,f1,f2,(f1 - f2) / (2*h))
|
||||
end
|
||||
|
|
|
@ -48,13 +48,13 @@ for i=1:n
|
|||
xiold = x(i);
|
||||
h = step_length_correction(xiold,scale,i)*delta;
|
||||
x(i) = xiold+h;
|
||||
[f1,junk1,cost_flag1,] = penalty_objective_function(x, fcn, penalty, varargin{:});
|
||||
[f1,~,cost_flag1,] = penalty_objective_function(x, fcn, penalty, varargin{:});
|
||||
x(i) = xiold-h;
|
||||
[f2,junk1,cost_flag2] = penalty_objective_function(x, fcn, penalty, varargin{:});
|
||||
[f2,~,cost_flag2] = penalty_objective_function(x, fcn, penalty, varargin{:});
|
||||
x(i) = xiold+2*h;
|
||||
[f3,junk1,cost_flag3] = penalty_objective_function(x, fcn, penalty, varargin{:});
|
||||
[f3,~,cost_flag3] = penalty_objective_function(x, fcn, penalty, varargin{:});
|
||||
x(i) = xiold-2*h;
|
||||
[f4,junk1,cost_flag4] = penalty_objective_function(x, fcn, penalty, varargin{:});
|
||||
[f4,~,cost_flag4] = penalty_objective_function(x, fcn, penalty, varargin{:});
|
||||
if f0<f1 && f1<f3 && f0<f2 && f2<f4
|
||||
g0 = 0;
|
||||
else
|
||||
|
|
|
@ -190,7 +190,7 @@ if verbose
|
|||
disp('Simplex initialization...')
|
||||
end
|
||||
initial_point = x;
|
||||
[initial_score,junk1,nopenalty] = feval(objective_function,x,varargin{:});
|
||||
[initial_score,~,nopenalty] = feval(objective_function,x,varargin{:});
|
||||
if ~nopenalty
|
||||
disp('Cannot initialize the simplex with the provided initial guess.')
|
||||
skipline()
|
||||
|
@ -528,7 +528,7 @@ for j = 1:n
|
|||
end
|
||||
v(:,j+1) = y;
|
||||
x = y;
|
||||
[fv(j+1),junk1,nopenalty_flag] = feval(objective_function,x,varargin{:});
|
||||
[fv(j+1),~,nopenalty_flag] = feval(objective_function,x,varargin{:});
|
||||
if check_delta
|
||||
while ~nopenalty_flag
|
||||
if y(j)~=0
|
||||
|
@ -544,7 +544,7 @@ for j = 1:n
|
|||
end
|
||||
v(:,j+1) = y;
|
||||
x = y;
|
||||
[fv(j+1),junk1,nopenalty_flag] = feval(objective_function,x,varargin{:});
|
||||
[fv(j+1),~,nopenalty_flag] = feval(objective_function,x,varargin{:});
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -91,7 +91,7 @@ if options_.ramsey_policy && options_.ACES_solver == 0
|
|||
opt.jacobian_flag = 0;
|
||||
oo_.steady_state = dynare_solve('ramsey_static',oo_.steady_state,opt,M_,options_,oo_,it_);
|
||||
options_.solve_algo = old_solve_algo;
|
||||
[junk,junk,multbar] = ramsey_static(oo_.steady_state,M_,options_,oo_,it_);
|
||||
[~,~,multbar] = ramsey_static(oo_.steady_state,M_,options_,oo_,it_);
|
||||
[jacobia_,M_] = ramsey_dynamic(oo_.steady_state,multbar,M_,options_,oo_,it_);
|
||||
klen = M_.maximum_lag + M_.maximum_lead + 1;
|
||||
dr.ys = [oo_.steady_state;zeros(M_.exo_nbr,1);multbar];
|
||||
|
@ -123,14 +123,14 @@ else
|
|||
lq_instruments.sim_ruleids=sim_ruleids;
|
||||
lq_instruments.tct_ruleids=tct_ruleids;
|
||||
%if isfield(lq_instruments,'xsopt_SS') %% changed by BY
|
||||
[junk, lq_instruments.xsopt_SS,lq_instruments.lmopt_SS,s2,check] = opt_steady_get;%% changed by BY
|
||||
[~, lq_instruments.xsopt_SS,lq_instruments.lmopt_SS,s2,check] = opt_steady_get;%% changed by BY
|
||||
[qc, DYN_Q] = QPsolve(lq_instruments, s2, check); %% added by BY
|
||||
z = repmat(lq_instruments.xsopt_SS,1,klen);
|
||||
else
|
||||
z = repmat(dr.ys,1,klen);
|
||||
end
|
||||
z = z(iyr0) ;
|
||||
[junk,jacobia_] = feval([M_.fname '.dynamic'],z,[oo_.exo_simul ...
|
||||
[~,jacobia_] = feval([M_.fname '.dynamic'],z,[oo_.exo_simul ...
|
||||
oo_.exo_det_simul], M_.params, dr.ys, it_);
|
||||
|
||||
if options_.ACES_solver==1 && (length(sim_ruleids)>0 || length(tct_ruleids)>0 )
|
||||
|
|
|
@ -368,7 +368,7 @@ end
|
|||
save_options_initval_file = options_.initval_file;
|
||||
options_.initval_file = '__';
|
||||
|
||||
[pos_constrained_pf, junk] = find(constrained_perfect_foresight);
|
||||
[pos_constrained_pf, ~] = find(constrained_perfect_foresight);
|
||||
indx_endo_solve_pf = constrained_vars(pos_constrained_pf);
|
||||
if isempty(indx_endo_solve_pf)
|
||||
pf = 0;
|
||||
|
@ -572,7 +572,7 @@ else
|
|||
for t = 1:constrained_periods
|
||||
|
||||
if direct_mode && ~isempty(is_constraint)
|
||||
[pos_constrained_pf, junk] = find(constrained_perfect_foresight .* is_constraint(t, :)');
|
||||
[pos_constrained_pf, ~] = find(constrained_perfect_foresight .* is_constraint(t, :)');
|
||||
indx_endo_solve_pf = constrained_vars(pos_constrained_pf);
|
||||
if isempty(indx_endo_solve_pf)
|
||||
pf = 0;
|
||||
|
@ -580,7 +580,7 @@ else
|
|||
pf = length(indx_endo_solve_pf);
|
||||
end
|
||||
|
||||
[pos_constrained_surprise, junk] = find((1-constrained_perfect_foresight) .* is_constraint(t, :)');
|
||||
[pos_constrained_surprise, ~] = find((1-constrained_perfect_foresight) .* is_constraint(t, :)');
|
||||
indx_endo_solve_surprise = constrained_vars(pos_constrained_surprise);
|
||||
|
||||
if isempty(indx_endo_solve_surprise)
|
||||
|
@ -591,7 +591,7 @@ else
|
|||
end
|
||||
|
||||
if direct_mode && ~isempty(is_shock)
|
||||
[pos_shock_pf, junk] = find(shock_perfect_foresight .* is_shock(t, :)');
|
||||
[pos_shock_pf, ~] = find(shock_perfect_foresight .* is_shock(t, :)');
|
||||
indx_endo_solve_pf = shock_vars(pos_shock_pf);
|
||||
if isempty(indx_endo_solve_pf)
|
||||
b_pf = 0;
|
||||
|
@ -599,7 +599,7 @@ else
|
|||
b_pf = length(indx_endo_solve_pf);
|
||||
end
|
||||
|
||||
[pos_shock_surprise, junk] = find((1-shock_perfect_foresight) .* is_shock(t, :)');
|
||||
[pos_shock_surprise, ~] = find((1-shock_perfect_foresight) .* is_shock(t, :)');
|
||||
indx_endo_solve_surprise = shock_vars(pos_shock_surprise);
|
||||
|
||||
if isempty(indx_endo_solve_surprise)
|
||||
|
|
|
@ -179,9 +179,9 @@ if ~isreal(oo_.endo_simul(:)) %can only happen without bytecode
|
|||
yT = real(oo_.endo_simul(:,options_.periods+2));
|
||||
yy = real(oo_.endo_simul(:,2:options_.periods+1));
|
||||
illi = M_.lead_lag_incidence';
|
||||
[i_cols,junk,i_cols_j] = find(illi(:));
|
||||
[i_cols,~,i_cols_j] = find(illi(:));
|
||||
illi = illi(:,2:3);
|
||||
[i_cols_J1,junk,i_cols_1] = find(illi(:));
|
||||
[i_cols_J1,~,i_cols_1] = find(illi(:));
|
||||
i_cols_T = nonzeros(M_.lead_lag_incidence(1:2,:)');
|
||||
residuals = perfect_foresight_problem(yy(:),str2func([M_.fname '.dynamic']), y0, yT, ...
|
||||
oo_.exo_simul,M_.params,oo_.steady_state, ...
|
||||
|
|
|
@ -123,16 +123,16 @@ if nargout>1
|
|||
yy = oo_.endo_simul(:,2:options_.periods+1);
|
||||
if ~exist('illi')
|
||||
illi = M_.lead_lag_incidence';
|
||||
[i_cols,junk,i_cols_j] = find(illi(:));
|
||||
[i_cols,~,i_cols_j] = find(illi(:));
|
||||
illi = illi(:,2:3);
|
||||
[i_cols_J1,junk,i_cols_1] = find(illi(:));
|
||||
[i_cols_J1,~,i_cols_1] = find(illi(:));
|
||||
i_cols_T = nonzeros(M_.lead_lag_incidence(1:2,:)');
|
||||
end
|
||||
if options_.block && ~options_.bytecode
|
||||
maxerror = oo_.deterministic_simulation.error;
|
||||
else
|
||||
if options_.bytecode
|
||||
[chck, residuals, junk]= bytecode('dynamic','evaluate', oo_.endo_simul, oo_.exo_simul, M_.params, oo_.steady_state, 1);
|
||||
[chck, residuals, ~]= bytecode('dynamic','evaluate', oo_.endo_simul, oo_.exo_simul, M_.params, oo_.steady_state, 1);
|
||||
else
|
||||
residuals = perfect_foresight_problem(yy(:),str2func([M_.fname '.dynamic']), y0, yT, ...
|
||||
oo_.exo_simul,M_.params,oo_.steady_state, ...
|
||||
|
|
|
@ -71,8 +71,8 @@ y0 = endogenousvariables(:,M.maximum_lag);
|
|||
yT = endogenousvariables(:,M.maximum_lag+periods+1);
|
||||
z = endogenousvariables(:,M.maximum_lag+(1:periods));
|
||||
illi = M.lead_lag_incidence';
|
||||
[i_cols, junk,i_cols_j] = find(illi(:));
|
||||
[i_cols,~,i_cols_j] = find(illi(:));
|
||||
illi = illi(:,2:3);
|
||||
[i_cols_J1, junk,i_cols_1] = find(illi(:));
|
||||
[i_cols_J1,~,i_cols_1] = find(illi(:));
|
||||
i_cols_T = nonzeros(M.lead_lag_incidence(1:2,:)');
|
||||
dynamicmodel = str2func([M.fname,'.dynamic']);
|
|
@ -99,16 +99,16 @@ if nargout>1
|
|||
yy = oo_.endo_simul(:,2:options_.periods+1);
|
||||
if ~exist('illi')
|
||||
illi = M_.lead_lag_incidence';
|
||||
[i_cols,junk,i_cols_j] = find(illi(:));
|
||||
[i_cols,~,i_cols_j] = find(illi(:));
|
||||
illi = illi(:,2:3);
|
||||
[i_cols_J1,junk,i_cols_1] = find(illi(:));
|
||||
[i_cols_J1,~,i_cols_1] = find(illi(:));
|
||||
i_cols_T = nonzeros(M_.lead_lag_incidence(1:2,:)');
|
||||
end
|
||||
if options_.block && ~options_.bytecode
|
||||
maxerror = oo_.deterministic_simulation.error;
|
||||
else
|
||||
if options_.bytecode
|
||||
[chck, residuals, junk]= bytecode('dynamic','evaluate', oo_.endo_simul, oo_.exo_simul, M_.params, oo_.steady_state, 1);
|
||||
[chck, residuals, ~]= bytecode('dynamic','evaluate', oo_.endo_simul, oo_.exo_simul, M_.params, oo_.steady_state, 1);
|
||||
else
|
||||
residuals = perfect_foresight_problem(yy(:),str2func([M_.fname '.dynamic']), y0, yT, ...
|
||||
oo_.exo_simul,M_.params,oo_.steady_state, ...
|
||||
|
|
|
@ -69,6 +69,19 @@ if SampleSize == 1
|
|||
else
|
||||
bar(log([idehess.ide_strength_J(:,is)' ]))
|
||||
end
|
||||
hold on
|
||||
plot((1:length(idehess.ide_strength_J(:,is)))-0.15,log([idehess.ide_strength_J(:,is)']),'o','MarkerSize',7,'MarkerFaceColor',[0 0 0],'MarkerEdgeColor','none')
|
||||
plot((1:length(idehess.ide_strength_J_prior(:,is)))+0.15,log([idehess.ide_strength_J_prior(:,is)']),'o','MarkerSize',7,'MarkerFaceColor',[0 0 0],'MarkerEdgeColor','none')
|
||||
if any(isinf(log(idehess.ide_strength_J(idehess.identified_parameter_indices))))
|
||||
inf_indices=find(isinf(log(idehess.ide_strength_J(idehess.identified_parameter_indices))));
|
||||
inf_pos=ismember(is,inf_indices);
|
||||
plot(find(inf_pos)-0.15,zeros(sum(inf_pos),1),'o','MarkerSize',7,'MarkerFaceColor',[1 1 1],'MarkerEdgeColor',[0 0 0])
|
||||
end
|
||||
if any(isinf(log(idehess.ide_strength_J_prior(idehess.identified_parameter_indices))))
|
||||
inf_indices=find(isinf(log(idehess.ide_strength_J_prior(idehess.identified_parameter_indices))));
|
||||
inf_pos=ismember(is,inf_indices);
|
||||
plot(find(inf_pos)+0.15,zeros(sum(inf_pos),1),'o','MarkerSize',7,'MarkerFaceColor',[1 1 1],'MarkerEdgeColor',[0 0 0])
|
||||
end
|
||||
set(gca,'xlim',[0 nparam+1])
|
||||
set(gca,'xticklabel','')
|
||||
dy = get(gca,'ylim');
|
||||
|
@ -92,7 +105,21 @@ if SampleSize == 1
|
|||
else
|
||||
bar(log([idehess.deltaM(is)]))
|
||||
end
|
||||
|
||||
hold on
|
||||
plot((1:length(idehess.deltaM(is)))-0.15,log([idehess.deltaM(is)']),'o','MarkerSize',7,'MarkerFaceColor',[0 0 0],'MarkerEdgeColor','none')
|
||||
plot((1:length(idehess.deltaM_prior(is)))+0.15,log([idehess.deltaM_prior(is)']),'o','MarkerSize',7,'MarkerFaceColor',[0 0 0],'MarkerEdgeColor','none')
|
||||
inf_pos=find(isinf(log(idehess.deltaM)));
|
||||
if ~isempty(inf_pos)
|
||||
inf_indices=~ismember(inf_pos,idehess.sensitivity_zero_pos);
|
||||
inf_pos=ismember(is,inf_pos(inf_indices));
|
||||
plot(find(inf_pos)-0.15,zeros(sum(inf_pos),1),'o','MarkerSize',7,'MarkerFaceColor',[1 1 1],'MarkerEdgeColor',[0 0 0])
|
||||
end
|
||||
inf_pos=find(isinf(log(idehess.deltaM_prior)));
|
||||
if ~isempty(inf_pos)
|
||||
inf_indices=~ismember(inf_pos,idehess.sensitivity_zero_pos);
|
||||
inf_pos=ismember(is,inf_pos(inf_indices));
|
||||
plot(find(inf_pos)+0.15,zeros(sum(inf_pos),1),'o','MarkerSize',7,'MarkerFaceColor',[1 1 1],'MarkerEdgeColor',[0 0 0])
|
||||
end
|
||||
set(gca,'xlim',[0 nparam+1])
|
||||
set(gca,'xticklabel','')
|
||||
dy = get(gca,'ylim');
|
||||
|
|
|
@ -204,7 +204,7 @@ for b=fpar:B
|
|||
|
||||
if run_smoother
|
||||
[dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_);
|
||||
[alphahat,etahat,epsilonhat,alphatilde,SteadyState,trend_coeff,aK,junk1,junk2,P,junk4,junk5,trend_addition,state_uncertainty,M_,oo_,options_,bayestopt_] = ...
|
||||
[alphahat,etahat,epsilonhat,alphatilde,SteadyState,trend_coeff,aK,~,~,P,~,~,trend_addition,state_uncertainty,M_,oo_,options_,bayestopt_] = ...
|
||||
DsgeSmoother(deep,gend,Y,data_index,missing_value,M_,oo_,options_,bayestopt_,estim_params_);
|
||||
|
||||
stock_trend_coeff(options_.varobs_id,irun(9))=trend_coeff;
|
||||
|
|
|
@ -144,7 +144,7 @@ if tt5
|
|||
if any(x(id5)-p3(id5)<0) || any(x(id5)-p4(id5)>0)
|
||||
logged_prior_density = -Inf ;
|
||||
if nargout ==4
|
||||
info=id5(any(x(id5)-p3(id5)<0) || any(x(id5)-p4(id5)>0));
|
||||
info=id5((x(id5)-p3(id5)<0) || (x(id5)-p4(id5)>0));
|
||||
end
|
||||
return
|
||||
end
|
||||
|
|
|
@ -98,8 +98,7 @@ nobs = options_.nobs;
|
|||
if forecast_ && any(forecast_params)
|
||||
M1=M_;
|
||||
M1.params = forecast_params;
|
||||
[junk1,junk2,junk3,junk4,junk5,junk6,oo1] = dynare_resolve(M1,options_,oo_);
|
||||
clear junk1 junk2 junk3 junk4 junk5 junk6
|
||||
[~,~,~,~,~,~,oo1] = dynare_resolve(M1,options_,oo_);
|
||||
end
|
||||
|
||||
if fast_realtime
|
||||
|
@ -109,7 +108,7 @@ if fast_realtime
|
|||
newString=sprintf(running_text);
|
||||
fprintf(['%s'],newString);
|
||||
options_.nobs=fast_realtime;
|
||||
[oo0,M_,junk1,junk2,Smoothed_Variables_deviation_from_mean0] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_);
|
||||
[oo0,M_,~,~,Smoothed_Variables_deviation_from_mean0] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_);
|
||||
gend0 = size(oo0.SmoothedShocks.(M_.exo_names{1}),1);
|
||||
prctdone=0.5;
|
||||
if isoctave
|
||||
|
@ -120,7 +119,7 @@ if fast_realtime
|
|||
fprintf([s0,'%s'],newString);
|
||||
end
|
||||
options_.nobs=nobs;
|
||||
[oo2,M_,junk1,junk2,Smoothed_Variables_deviation_from_mean2] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_);
|
||||
[oo2,M_,~,~,Smoothed_Variables_deviation_from_mean2] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_);
|
||||
gend2 = size(oo2.SmoothedShocks.(M_.exo_names{1}),1);
|
||||
prctdone=1;
|
||||
if isoctave
|
||||
|
@ -142,7 +141,7 @@ for j=presample+1:nobs
|
|||
% evalin('base',['options_.nobs=' int2str(j) ';'])
|
||||
options_.nobs=j;
|
||||
if ~fast_realtime
|
||||
[oo,M_,junk1,junk2,Smoothed_Variables_deviation_from_mean] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_);
|
||||
[oo,M_,~,~,Smoothed_Variables_deviation_from_mean] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_);
|
||||
gend = size(oo.SmoothedShocks.(M_.exo_names{1}),1);
|
||||
else
|
||||
gend = gend0+j-fast_realtime;
|
||||
|
|
|
@ -23,7 +23,7 @@ function [state_u,state_n] = set_dynare_random_generator_state(state_u,state_n)
|
|||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
matlab_random_streams = ~(isoctave || matlab_ver_less_than('7.7'));
|
||||
matlab_random_streams = ~isoctave;
|
||||
|
||||
if matlab_random_streams% Use new matlab interface.
|
||||
if matlab_ver_less_than('7.12')
|
||||
|
|
|
@ -24,7 +24,7 @@ if ~nargin
|
|||
error('set_dynare_seed:: I need at least one input argument!')
|
||||
end
|
||||
|
||||
matlab_random_streams = ~(isoctave || matlab_ver_less_than('7.7') || options_.parallel_info.isHybridMatlabOctave);
|
||||
matlab_random_streams = ~(isoctave || options_.parallel_info.isHybridMatlabOctave);
|
||||
|
||||
if matlab_random_streams% Use new matlab interface.
|
||||
if nargin==1
|
||||
|
|
|
@ -72,7 +72,7 @@ end
|
|||
|
||||
options_.selected_variables_only = 0; %make sure all variables are stored
|
||||
options_.plot_priors=0;
|
||||
[oo_, M_, junk1, junk2, Smoothed_Variables_deviation_from_mean] = evaluate_smoother(parameter_set, varlist, M_, oo_, options_, bayestopt_, estim_params_);
|
||||
[oo_, M_, ~, ~, Smoothed_Variables_deviation_from_mean] = evaluate_smoother(parameter_set, varlist, M_, oo_, options_, bayestopt_, estim_params_);
|
||||
|
||||
% reduced form
|
||||
dr = oo_.dr;
|
||||
|
|
|
@ -97,7 +97,7 @@ if nargin>2
|
|||
if ~isunix
|
||||
error('The parallel version of SMM estimation is not implemented for non unix platforms!')
|
||||
end
|
||||
[junk,hostname] = unix('hostname --fqdn');
|
||||
[~,hostname] = unix('hostname --fqdn');
|
||||
hostname = deblank(hostname);
|
||||
master_is_running_a_job = 0;
|
||||
for i=1:length(parallel)
|
||||
|
|
|
@ -111,22 +111,22 @@ it_ = M_.maximum_lag + 1;
|
|||
z = repmat(dr.ys,1,klen);
|
||||
if local_order == 1
|
||||
if (options_.bytecode)
|
||||
[chck, junk, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
|
||||
M_.params, dr.ys, 1);
|
||||
[chck, ~, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
|
||||
M_.params, dr.ys, 1);
|
||||
jacobia_ = [loc_dr.g1 loc_dr.g1_x loc_dr.g1_xd];
|
||||
else
|
||||
[junk,jacobia_] = feval([M_.fname '.dynamic'],z(iyr0),exo_simul, ...
|
||||
M_.params, dr.ys, it_);
|
||||
[~,jacobia_] = feval([M_.fname '.dynamic'],z(iyr0),exo_simul, ...
|
||||
M_.params, dr.ys, it_);
|
||||
end
|
||||
elseif local_order == 2
|
||||
if (options_.bytecode)
|
||||
[chck, junk, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
|
||||
M_.params, dr.ys, 1);
|
||||
[chck, ~, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
|
||||
M_.params, dr.ys, 1);
|
||||
jacobia_ = [loc_dr.g1 loc_dr.g1_x];
|
||||
else
|
||||
[junk,jacobia_,hessian1] = feval([M_.fname '.dynamic'],z(iyr0),...
|
||||
exo_simul, ...
|
||||
M_.params, dr.ys, it_);
|
||||
[~,jacobia_,hessian1] = feval([M_.fname '.dynamic'],z(iyr0),...
|
||||
exo_simul, ...
|
||||
M_.params, dr.ys, it_);
|
||||
end
|
||||
if options_.use_dll
|
||||
% In USE_DLL mode, the hessian is in the 3-column sparse representation
|
||||
|
@ -217,15 +217,15 @@ nz = nnz(M_.lead_lag_incidence);
|
|||
|
||||
sdyn = M_.endo_nbr - nstatic;
|
||||
|
||||
[junk,cols_b,cols_j] = find(M_.lead_lag_incidence(M_.maximum_endo_lag+1, ...
|
||||
order_var));
|
||||
[~,cols_b,cols_j] = find(M_.lead_lag_incidence(M_.maximum_endo_lag+1, ...
|
||||
order_var));
|
||||
b = zeros(M_.endo_nbr,M_.endo_nbr);
|
||||
b(:,cols_b) = jacobia_(:,cols_j);
|
||||
|
||||
if M_.maximum_endo_lead == 0
|
||||
% backward models: simplified code exist only at order == 1
|
||||
if local_order == 1
|
||||
[k1,junk,k2] = find(kstate(:,4));
|
||||
[k1,~,k2] = find(kstate(:,4));
|
||||
dr.ghx(:,k1) = -b\jacobia_(:,k2);
|
||||
if M_.exo_nbr
|
||||
dr.ghu = -b\jacobia_(:,nz+1:end);
|
||||
|
|
|
@ -204,7 +204,7 @@ if ~isempty(options_.nk) && options_.nk ~= 0
|
|||
end
|
||||
else
|
||||
positions_in_declaration_order=oo_.dr.order_var(bayestopt_.smoother_var_list(bayestopt_.smoother_saved_var_list));
|
||||
[junk,sorted_index_declaration_order]=sort(positions_in_declaration_order);
|
||||
[~,sorted_index_declaration_order]=sort(positions_in_declaration_order);
|
||||
oo_.FilteredVariablesKStepAhead(:,sorted_index_declaration_order,:)=oo_.FilteredVariablesKStepAhead;
|
||||
if ~isempty(PK) && options_.filter_covariance %get K-step ahead variances
|
||||
oo_.FilteredVariablesKStepAheadVariances(:,sorted_index_declaration_order,sorted_index_declaration_order,:)=oo_.FilteredVariablesKStepAheadVariances;
|
||||
|
|
|
@ -31,7 +31,7 @@ function [hasLicense] = user_has_matlab_license(toolbox)
|
|||
if matlab_ver_less_than('7.12')
|
||||
hasLicense = license('test', toolbox);
|
||||
else
|
||||
[hasLicense, junk] = license('checkout',toolbox);
|
||||
[hasLicense, ~] = license('checkout',toolbox);
|
||||
end
|
||||
if ~hasLicense
|
||||
return
|
||||
|
|
|
@ -21,7 +21,7 @@ a = dir('*.mod');
|
|||
|
||||
|
||||
for i = 1:length(a)
|
||||
[junk,basename,extension] = fileparts(a(i).name);
|
||||
[~,basename,extension] = fileparts(a(i).name);
|
||||
if exist([basename '.m'])
|
||||
delete([basename '.m']);
|
||||
end
|
||||
|
|
|
@ -1,116 +0,0 @@
|
|||
function dyn_mex(win_compiler,basename,force)
|
||||
|
||||
% Compile Dynare model dlls when model option use_dll is used
|
||||
% if C file is fresher than mex file
|
||||
%
|
||||
% INPUTS
|
||||
% o win_compiler str compiler used under Windows (unused under Linux or OSX):
|
||||
% 'msvc' (MS Visual C)
|
||||
% 'cygwin'
|
||||
% o basename str filenames base
|
||||
% o force bool recompile if 1
|
||||
%
|
||||
% OUTPUTS
|
||||
% none
|
||||
%
|
||||
|
||||
|
||||
% Copyright (C) 2015-2017 Dynare Team
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Dc = dir([basename '/mode/src/dynamic.c']);
|
||||
Dmex = dir(['+' basename '/model/dynamic.' mexext]);
|
||||
|
||||
% compile only if date of C file is greater than date of mex file
|
||||
% and force is not True
|
||||
if ~isempty(Dmex)
|
||||
if (Dmex.datenum > Dc.datenum) && ~force
|
||||
disp('Mex files are newer than the source: not recompiled')
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
if ~isoctave
|
||||
% Some mex commands are enclosed in an eval(), because otherwise it will make Octave fail
|
||||
if ispc
|
||||
if strcmp(win_compiler,'msvc')
|
||||
% MATLAB/Windows + Microsoft Visual C++
|
||||
% Add /TP flag as fix for #1227
|
||||
eval(['mex -O LINKFLAGS="$LINKFLAGS /export:Dynamic" COMPFLAGS="/TP" ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
|
||||
eval(['mex -O LINKFLAGS="$LINKFLAGS /export:Static" COMPFLAGS="/TP" ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
|
||||
elseif strcmp(win_compiler,'mingw')
|
||||
eval(['mex -O LINKFLAGS="$LINKFLAGS /export:Dynamic" ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
|
||||
eval(['mex -O LINKFLAGS="$LINKFLAGS /export:Static" ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
|
||||
elseif strcmp(win_compiler,'cygwin') %legacy support for Cygwin with mexopts.bat
|
||||
% MATLAB/Windows + Cygwin g++
|
||||
eval(['mex -O PRELINK_CMDS1="echo EXPORTS > mex.def & echo ' ...
|
||||
'mexFunction >> mex.def & echo Dynamic >> mex.def" ' ...
|
||||
basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
|
||||
eval(['mex -O PRELINK_CMDS1="echo EXPORTS > mex.def & echo ' ...
|
||||
'mexFunction >> mex.def & echo Dynamic >> mex.def" ' ...
|
||||
basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
|
||||
else
|
||||
error(['When using the USE_DLL option, you must give either ' ...
|
||||
'''cygwin'', ''mingw'' or ''msvc'' option to the ''dynare'' command'])
|
||||
end
|
||||
elseif isunix && ~ismac
|
||||
% MATLAB/Linux
|
||||
if matlab_ver_less_than('8.3')
|
||||
eval(['mex -O LDFLAGS=''-pthread -shared -Wl,--no-undefined'' ' ...
|
||||
basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
|
||||
eval(['mex -O LDFLAGS=''-pthread -shared -Wl,--no-undefined'' ' ...
|
||||
basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
|
||||
elseif matlab_ver_less_than('9.1')
|
||||
eval(['mex -O LINKEXPORT='''' ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
|
||||
eval(['mex -O LINKEXPORT='''' ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
|
||||
else
|
||||
eval(['mex -O LINKEXPORTVER='''' ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
|
||||
eval(['mex -O LINKEXPORTVER='''' ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
|
||||
end
|
||||
elseif ismac
|
||||
% MATLAB/MacOS
|
||||
if matlab_ver_less_than('8.1')
|
||||
eval(['mex -O LDFLAGS=''-Wl,-twolevel_namespace -undefined ' ...
|
||||
'error -arch $ARCHS -Wl,-syslibroot,$SDKROOT ' ...
|
||||
'-mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -bundle'' ' ...
|
||||
basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
|
||||
eval(['mex -O LDFLAGS=''-Wl,-twolevel_namespace -undefined ' ...
|
||||
'error -arch $ARCHS -Wl,-syslibroot,$SDKROOT ' ...
|
||||
'-mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -bundle'' ' ...
|
||||
basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
|
||||
elseif matlab_ver_less_than('8.3')
|
||||
eval(['mex -O LDFLAGS=''-Wl,-twolevel_namespace -undefined ' ...
|
||||
'error -arch $ARCHS -Wl,-syslibroot,$MW_SDKROOT ' ...
|
||||
'-mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -bundle'' ' ...
|
||||
basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
|
||||
eval(['mex -O LDFLAGS=''-Wl,-twolevel_namespace -undefined ' ...
|
||||
'error -arch $ARCHS -Wl,-syslibroot,$MW_SDKROOT ' ...
|
||||
'-mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET -bundle'' ' ...
|
||||
basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
|
||||
elseif matlab_ver_less_than('9.1')
|
||||
eval(['mex -O LINKEXPORT='''' ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
|
||||
eval(['mex -O LINKEXPORT='''' ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
|
||||
else
|
||||
eval(['mex -O LINKEXPORT='''' LINKEXPORTVER='''' ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -output +' basename '/dynamic'])
|
||||
eval(['mex -O LINKEXPORT='''' LINKEXPORTVER='''' ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -output +' basename '/static'])
|
||||
end
|
||||
end
|
||||
else
|
||||
% Octave
|
||||
eval(['mex ' basename '/model/src/dynamic.c ' basename '/model/src/dynamic_mex.c -o +' basename '/dynamic'])
|
||||
eval(['mex ' basename '/model/src/static.c ' basename '/model/src/static_mex.c -o +' basename '/static'])
|
||||
end
|
|
@ -48,7 +48,7 @@ if ~all(check)
|
|||
end
|
||||
|
||||
nvar = length(i_var);
|
||||
[i_var_unique, index_uniques, junk] = unique(i_var, 'first');
|
||||
[i_var_unique, index_uniques, ~] = unique(i_var, 'first');
|
||||
index_uniques = sort(index_uniques);
|
||||
i_var_unique = i_var(index_uniques);
|
||||
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
ACLOCAL_AMFLAGS = -I ../../../m4
|
||||
|
||||
# libdynare++ must come before gensylv, k_order_perturbation, dynare_simul_
|
||||
|
||||
if DO_SOMETHING
|
||||
SUBDIRS = mjdgges kronecker bytecode libdynare++ gensylv block_kalman_filter sobol local_state_space_iterations
|
||||
SUBDIRS = mjdgges kronecker bytecode block_kalman_filter sobol local_state_space_iterations
|
||||
|
||||
# libdynare++ must come before gensylv, k_order_perturbation, dynare_simul_
|
||||
if HAVE_MATIO
|
||||
SUBDIRS += k_order_perturbation dynare_simul_
|
||||
SUBDIRS += libdynare++ gensylv k_order_perturbation dynare_simul_
|
||||
endif
|
||||
|
||||
if HAVE_GSL
|
||||
|
|
|
@ -34,7 +34,7 @@ if test "x$ax_enable_matlab" = "xyes"; then
|
|||
|
||||
if test "x$ax_matlab_version_ok" = "xyes"; then
|
||||
AX_MEXOPTS
|
||||
AX_COMPARE_VERSION([$MATLAB_VERSION], [lt], [7.5], [AC_MSG_ERROR([Your MATLAB is too old, please upgrade to version 7.5 (R2007b) at least.])])
|
||||
AX_COMPARE_VERSION([$MATLAB_VERSION], [lt], [7.9], [AC_MSG_ERROR([Your MATLAB is too old, please upgrade to version 7.9 (R2009b) at least.])])
|
||||
fi
|
||||
|
||||
CFLAGS="$MATLAB_CFLAGS"
|
||||
|
@ -66,8 +66,6 @@ AM_PROG_AR
|
|||
|
||||
case ${host_os} in
|
||||
*mingw32*)
|
||||
# Ensure that -lpthread is statically linked under MinGW
|
||||
PTHREAD_LIBS="-Wl,-Bstatic -lpthread -Wl,-Bdynamic"
|
||||
# Kludge for bug in MinGW, that defines __STDC_UTF_16__ but not char16_t
|
||||
# This breaks the matrix.h of older MATLABs (e.g. R2009a)
|
||||
# Also see <uchar.h>
|
||||
|
@ -94,6 +92,18 @@ AM_CONDITIONAL([HAVE_MATIO], [test "x$has_matio" = "xyes"])
|
|||
AX_SLICOT([matlab])
|
||||
AM_CONDITIONAL([HAVE_SLICOT], [test "x$has_slicot" = "xyes"])
|
||||
|
||||
# On Windows, we want static linking of the external libraries
|
||||
case ${host_os} in
|
||||
*mingw32*)
|
||||
# We hardcode -lpthread here, otherwise it is not detected by the
|
||||
# AX_PTHREAD macro and therefore not statically linked
|
||||
PTHREAD_LIBS="-Wl,-Bstatic -lpthread -Wl,-Bdynamic"
|
||||
GSL_LIBS="-Wl,-Bstatic $GSL_LIBS -Wl,-Bdynamic"
|
||||
LIBADD_MATIO="-Wl,-Bstatic $LIBADD_MATIO -Wl,-Bdynamic"
|
||||
LIBADD_SLICOT="-Wl,-Bstatic $LIBADD_SLICOT -Wl,-Bdynamic"
|
||||
;;
|
||||
esac
|
||||
|
||||
AM_CONDITIONAL([DO_SOMETHING], [test "x$ax_enable_matlab" = "xyes" -a "x$ax_matlab_version_ok" = "xyes" -a "x$ax_mexopts_ok" = "xyes"])
|
||||
|
||||
if test "x$ax_enable_matlab" = "xyes" -a "x$ax_matlab_version_ok" = "xyes" -a "x$ax_mexopts_ok" = "xyes"; then
|
||||
|
@ -107,9 +117,9 @@ else
|
|||
fi
|
||||
|
||||
if test "x$ax_enable_matlab" = "xyes" -a "x$has_matio" = "xyes"; then
|
||||
BUILD_KORDER_DYNSIMUL_MEX_MATLAB="yes"
|
||||
BUILD_GENSYLV_KORDER_DYNSIMUL_MEX_MATLAB="yes"
|
||||
else
|
||||
BUILD_KORDER_DYNSIMUL_MEX_MATLAB="no (missing MatIO library)"
|
||||
BUILD_GENSYLV_KORDER_DYNSIMUL_MEX_MATLAB="no (missing MatIO library)"
|
||||
fi
|
||||
|
||||
if test "x$ax_enable_matlab" = "xyes" -a "x$ax_matlab_version_ok" = "xyes" -a "x$ax_mexopts_ok" = "xyes" -a "x$has_slicot" = "xyes"; then
|
||||
|
@ -148,7 +158,7 @@ Dynare is now configured for building the following components...
|
|||
|
||||
Binaries (with "make"):
|
||||
MEX files for MATLAB (except those listed below): $BUILD_MEX_MATLAB
|
||||
K-order and dynare_simul MEX files for MATLAB: $BUILD_KORDER_DYNSIMUL_MEX_MATLAB
|
||||
Gensylv, k-order and dynare_simul MEX files for MATLAB: $BUILD_GENSYLV_KORDER_DYNSIMUL_MEX_MATLAB
|
||||
MS-SBVAR MEX files for MATLAB: $BUILD_MS_SBVAR_MEX_MATLAB
|
||||
Kalman Steady State MEX file for MATLAB: $BUILD_KALMAN_STEADY_STATE_MATLAB
|
||||
M2HTML documentation: $BUILD_M2HTML
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
ACLOCAL_AMFLAGS = -I ../../../m4
|
||||
|
||||
# libdynare++ must come before gensylv, k_order_perturbation, dynare_simul_
|
||||
if DO_SOMETHING
|
||||
SUBDIRS = mjdgges kronecker bytecode libdynare++ gensylv block_kalman_filter sobol local_state_space_iterations
|
||||
SUBDIRS = mjdgges kronecker bytecode block_kalman_filter sobol local_state_space_iterations
|
||||
|
||||
# libdynare++ must come before gensylv, k_order_perturbation, dynare_simul_
|
||||
if HAVE_MATIO
|
||||
SUBDIRS += k_order_perturbation dynare_simul_
|
||||
SUBDIRS += libdynare++ gensylv k_order_perturbation dynare_simul_
|
||||
endif
|
||||
|
||||
if HAVE_GSL
|
||||
|
|
|
@ -56,7 +56,7 @@ AC_SUBST([LIBADD_DLOPEN])
|
|||
AX_GSL
|
||||
AM_CONDITIONAL([HAVE_GSL], [test "x$has_gsl" = "xyes"])
|
||||
|
||||
# Check for libmatio, needed by k-order, dynare_simul, ms-sbvar (only under Octave, as an alternative to MATLAB's libmat)
|
||||
# Check for libmatio, needed by MEX files using Dynare++ code, and by ms-sbvar (the latter only under Octave, as an alternative to MATLAB's libmat)
|
||||
AX_MATIO
|
||||
AM_CONDITIONAL([HAVE_MATIO], [test "x$has_matio" = "xyes"])
|
||||
|
||||
|
@ -88,9 +88,9 @@ else
|
|||
fi
|
||||
|
||||
if test "x$MKOCTFILE" != "x" -a "x$has_matio" = "xyes"; then
|
||||
BUILD_KORDER_DYNSIMUL_MEX_OCTAVE="yes"
|
||||
BUILD_GENSYLV_KORDER_DYNSIMUL_MEX_OCTAVE="yes"
|
||||
else
|
||||
BUILD_KORDER_DYNSIMUL_MEX_OCTAVE="no (missing MatIO library)"
|
||||
BUILD_GENSYLV_KORDER_DYNSIMUL_MEX_OCTAVE="no (missing MatIO library)"
|
||||
fi
|
||||
|
||||
if test "x$MKOCTFILE" != "x" -a "x$has_slicot" = "xyes"; then
|
||||
|
@ -119,9 +119,9 @@ Dynare is now configured for building the following components...
|
|||
|
||||
Binaries (with "make"):
|
||||
MEX files for Octave (except those listed below): $BUILD_MEX_OCTAVE
|
||||
Gensylv, k-order and dynare_simul MEX for Octave: $BUILD_GENSYLV_KORDER_DYNSIMUL_MEX_OCTAVE
|
||||
MS-SBVAR MEX files for Octave: $BUILD_MS_SBVAR_MEX_OCTAVE
|
||||
Kalman Steady State MEX file for Octave: $BUILD_KALMAN_STEADY_STATE_OCTAVE
|
||||
K-order and dynare_simul MEX for Octave: $BUILD_KORDER_DYNSIMUL_MEX_OCTAVE
|
||||
|
||||
])
|
||||
|
||||
|
|
|
@ -33,40 +33,40 @@ DynamicModelAC::copyDoubleIntoTwoDMatData(double *dm, TwoDMatrix *tdm, int rows,
|
|||
tdm->get(i, j) = dm[dmIdx++];
|
||||
}
|
||||
|
||||
double *
|
||||
DynamicModelAC::unpackSparseMatrix(mxArray *sparseMat)
|
||||
void
|
||||
DynamicModelAC::unpackSparseMatrixAndCopyIntoTwoDMatData(mxArray *sparseMat, TwoDMatrix *tdm)
|
||||
{
|
||||
int totalCols = mxGetN(sparseMat);
|
||||
mwIndex *rowIdxVector = mxGetIr(sparseMat);
|
||||
mwSize sizeRowIdxVector = mxGetNzmax(sparseMat);
|
||||
mwIndex *colIdxVector = mxGetJc(sparseMat);
|
||||
|
||||
assert(tdm->ncols() == 3);
|
||||
assert(tdm->nrows() == sizeRowIdxVector);
|
||||
|
||||
double *ptr = mxGetPr(sparseMat);
|
||||
double *newMat = (double *) malloc(sizeRowIdxVector*3*sizeof(double));
|
||||
|
||||
int rind = 0;
|
||||
int retvalind0 = 0;
|
||||
int retvalind1 = sizeRowIdxVector;
|
||||
int retvalind2 = sizeRowIdxVector*2;
|
||||
int output_row = 0;
|
||||
|
||||
for (int i = 0; i < totalCols; i++)
|
||||
for (int j = 0; j < (int) (colIdxVector[i+1]-colIdxVector[i]); j++, rind++)
|
||||
{
|
||||
newMat[retvalind0++] = rowIdxVector[rind] + 1;
|
||||
newMat[retvalind1++] = i + 1;
|
||||
newMat[retvalind2++] = ptr[rind];
|
||||
tdm->get(output_row, 0) = rowIdxVector[rind] + 1;
|
||||
tdm->get(output_row, 1) = i + 1;
|
||||
tdm->get(output_row, 2) = ptr[rind];
|
||||
output_row++;
|
||||
}
|
||||
|
||||
/* If there are less elements than Nzmax (that might happen if some
|
||||
derivative is symbolically not zero but numerically zero at the evaluation
|
||||
point), then fill in the matrix with empty entries, that will be
|
||||
recognized as such by KordpDynare::populateDerivativesContainer() */
|
||||
while (retvalind0 < (int) sizeRowIdxVector)
|
||||
while (output_row < (int) sizeRowIdxVector)
|
||||
{
|
||||
newMat[retvalind0++] = 0;
|
||||
newMat[retvalind1++] = 0;
|
||||
newMat[retvalind2++] = 0;
|
||||
tdm->get(output_row, 0) = 0;
|
||||
tdm->get(output_row, 1) = 0;
|
||||
tdm->get(output_row, 2) = 0;
|
||||
output_row++;
|
||||
}
|
||||
|
||||
return newMat;
|
||||
}
|
||||
|
|
|
@ -25,9 +25,10 @@
|
|||
class DynamicModelAC
|
||||
{
|
||||
public:
|
||||
static double *unpackSparseMatrix(mxArray *sparseMatrix);
|
||||
virtual ~DynamicModelAC() = default;
|
||||
static void unpackSparseMatrixAndCopyIntoTwoDMatData(mxArray *sparseMat, TwoDMatrix *tdm);
|
||||
static void copyDoubleIntoTwoDMatData(double *dm, TwoDMatrix *tdm, int rows, int cols);
|
||||
virtual void eval(const Vector &y, const Vector &x, const Vector ¶ms, const Vector &ySteady,
|
||||
Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) throw (DynareException) = 0;
|
||||
Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) noexcept(false) = 0;
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
#include <sstream>
|
||||
|
||||
DynamicModelDLL::DynamicModelDLL(const string &modName) throw (DynareException)
|
||||
DynamicModelDLL::DynamicModelDLL(const string &modName) noexcept(false)
|
||||
{
|
||||
string fName;
|
||||
#if !defined(__CYGWIN32__) && !defined(_WIN32)
|
||||
|
@ -33,7 +33,7 @@ DynamicModelDLL::DynamicModelDLL(const string &modName) throw (DynareException)
|
|||
{
|
||||
#if defined(__CYGWIN32__) || defined(_WIN32)
|
||||
dynamicHinstance = LoadLibrary(fName.c_str());
|
||||
if (dynamicHinstance == NULL)
|
||||
if (dynamicHinstance == nullptr)
|
||||
throw 1;
|
||||
ntt = (int *) GetProcAddress(dynamicHinstance, "ntt");
|
||||
dynamic_resid_tt = (dynamic_tt_fct) GetProcAddress(dynamicHinstance, "dynamic_resid_tt");
|
||||
|
@ -44,18 +44,18 @@ DynamicModelDLL::DynamicModelDLL(const string &modName) throw (DynareException)
|
|||
dynamic_g2 = (dynamic_g2_fct) GetProcAddress(dynamicHinstance, "dynamic_g2");
|
||||
dynamic_g3_tt = (dynamic_tt_fct) GetProcAddress(dynamicHinstance, "dynamic_g3_tt");
|
||||
dynamic_g3 = (dynamic_g3_fct) GetProcAddress(dynamicHinstance, "dynamic_g3");
|
||||
if (ntt == NULL
|
||||
|| dynamic_resid_tt == NULL || dynamic_resid == NULL
|
||||
|| dynamic_g1_tt == NULL || dynamic_g1 == NULL
|
||||
|| dynamic_g2_tt == NULL || dynamic_g2 == NULL
|
||||
|| dynamic_g3_tt == NULL || dynamic_g3 == NULL)
|
||||
if (ntt == nullptr
|
||||
|| dynamic_resid_tt == nullptr || dynamic_resid == nullptr
|
||||
|| dynamic_g1_tt == nullptr || dynamic_g1 == nullptr
|
||||
|| dynamic_g2_tt == nullptr || dynamic_g2 == nullptr
|
||||
|| dynamic_g3_tt == nullptr || dynamic_g3 == nullptr)
|
||||
{
|
||||
FreeLibrary(dynamicHinstance); // Free the library
|
||||
throw 2;
|
||||
}
|
||||
#else // Linux or Mac
|
||||
dynamicHinstance = dlopen(fName.c_str(), RTLD_NOW);
|
||||
if (dynamicHinstance == NULL)
|
||||
if (dynamicHinstance == nullptr)
|
||||
{
|
||||
cerr << dlerror() << endl;
|
||||
throw 1;
|
||||
|
@ -69,11 +69,11 @@ DynamicModelDLL::DynamicModelDLL(const string &modName) throw (DynareException)
|
|||
dynamic_g2 = (dynamic_g2_fct) dlsym(dynamicHinstance, "dynamic_g2");
|
||||
dynamic_g3_tt = (dynamic_tt_fct) dlsym(dynamicHinstance, "dynamic_g3_tt");
|
||||
dynamic_g3 = (dynamic_g3_fct) dlsym(dynamicHinstance, "dynamic_g3");
|
||||
if (ntt == NULL
|
||||
|| dynamic_resid_tt == NULL || dynamic_resid == NULL
|
||||
|| dynamic_g1_tt == NULL || dynamic_g1 == NULL
|
||||
|| dynamic_g2_tt == NULL || dynamic_g2 == NULL
|
||||
|| dynamic_g3_tt == NULL || dynamic_g3 == NULL)
|
||||
if (ntt == nullptr
|
||||
|| dynamic_resid_tt == nullptr || dynamic_resid == nullptr
|
||||
|| dynamic_g1_tt == nullptr || dynamic_g1 == nullptr
|
||||
|| dynamic_g2_tt == nullptr || dynamic_g2 == nullptr
|
||||
|| dynamic_g3_tt == nullptr || dynamic_g3 == nullptr)
|
||||
{
|
||||
dlclose(dynamicHinstance); // Free the library
|
||||
cerr << dlerror() << endl;
|
||||
|
@ -95,16 +95,19 @@ DynamicModelDLL::DynamicModelDLL(const string &modName) throw (DynareException)
|
|||
}
|
||||
catch (...)
|
||||
{
|
||||
throw DynareException(__FILE__, __LINE__, string("Can't find the relevant dynamic symbols in ") + fName);
|
||||
throw DynareException(__FILE__, __LINE__, "Can't find the relevant dynamic symbols in " + fName);
|
||||
}
|
||||
}
|
||||
|
||||
DynamicModelDLL::~DynamicModelDLL()
|
||||
{
|
||||
#if defined(__CYGWIN32__) || defined(_WIN32)
|
||||
bool result = FreeLibrary(dynamicHinstance);
|
||||
auto result = FreeLibrary(dynamicHinstance);
|
||||
if (result == 0)
|
||||
throw DynareException(__FILE__, __LINE__, string("Can't free the *_dynamic DLL"));
|
||||
{
|
||||
cerr << "Can't free the *_dynamic DLL" << endl;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
#else
|
||||
dlclose(dynamicHinstance);
|
||||
#endif
|
||||
|
@ -112,7 +115,7 @@ DynamicModelDLL::~DynamicModelDLL()
|
|||
|
||||
void
|
||||
DynamicModelDLL::eval(const Vector &y, const Vector &x, const Vector &modParams, const Vector &ySteady,
|
||||
Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) throw (DynareException)
|
||||
Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) noexcept(false)
|
||||
{
|
||||
double *T = (double *) malloc(sizeof(double) * (*ntt));
|
||||
dynamic_resid_tt(y.base(), x.base(), 1, modParams.base(), ySteady.base(), 0, T);
|
||||
|
|
|
@ -34,11 +34,11 @@
|
|||
#include "dynamic_abstract_class.hh"
|
||||
#include "dynare_exception.h"
|
||||
|
||||
typedef void (*dynamic_tt_fct)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, double *T);
|
||||
typedef void (*dynamic_resid_fct) (const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *residual);
|
||||
typedef void (*dynamic_g1_fct)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *g1);
|
||||
typedef void (*dynamic_g2_fct)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *v2);
|
||||
typedef void (*dynamic_g3_fct)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *v3);
|
||||
using dynamic_tt_fct = void (*)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, double *T);
|
||||
using dynamic_resid_fct = void (*) (const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *residual);
|
||||
using dynamic_g1_fct = void (*)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *g1);
|
||||
using dynamic_g2_fct = void (*)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *v2);
|
||||
using dynamic_g3_fct = void (*)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *v3);
|
||||
|
||||
/**
|
||||
* creates pointer to Dynamic function inside <model>_dynamic.dll
|
||||
|
@ -61,11 +61,10 @@ private:
|
|||
|
||||
public:
|
||||
// construct and load Dynamic model DLL
|
||||
DynamicModelDLL(const string &fname) throw (DynareException);
|
||||
virtual
|
||||
~DynamicModelDLL();
|
||||
explicit DynamicModelDLL(const string &fname) noexcept(false);
|
||||
virtual ~DynamicModelDLL();
|
||||
|
||||
void eval(const Vector &y, const Vector &x, const Vector ¶ms, const Vector &ySteady,
|
||||
Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) throw (DynareException);
|
||||
Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) noexcept(false);
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -19,18 +19,14 @@
|
|||
|
||||
#include "dynamic_m.hh"
|
||||
|
||||
DynamicModelMFile::DynamicModelMFile(const string &modName) throw (DynareException) :
|
||||
DynamicMFilename(modName + ".dynamic")
|
||||
{
|
||||
}
|
||||
|
||||
DynamicModelMFile::~DynamicModelMFile()
|
||||
DynamicModelMFile::DynamicModelMFile(const string &modName) noexcept(false) :
|
||||
DynamicMFilename{modName + ".dynamic"}
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
DynamicModelMFile::eval(const Vector &y, const Vector &x, const Vector &modParams, const Vector &ySteady,
|
||||
Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) throw (DynareException)
|
||||
Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) noexcept(false)
|
||||
{
|
||||
mxArray *prhs[nrhs_dynamic], *plhs[nlhs_dynamic];
|
||||
|
||||
|
@ -51,10 +47,10 @@ DynamicModelMFile::eval(const Vector &y, const Vector &x, const Vector &modParam
|
|||
|
||||
residual = Vector(mxGetPr(plhs[0]), residual.skip(), (int) mxGetM(plhs[0]));
|
||||
copyDoubleIntoTwoDMatData(mxGetPr(plhs[1]), g1, (int) mxGetM(plhs[1]), (int) mxGetN(plhs[1]));
|
||||
if (g2 != NULL)
|
||||
copyDoubleIntoTwoDMatData(unpackSparseMatrix(plhs[2]), g2, (int) mxGetNzmax(plhs[2]), 3);
|
||||
if (g3 != NULL)
|
||||
copyDoubleIntoTwoDMatData(unpackSparseMatrix(plhs[3]), g3, (int) mxGetNzmax(plhs[3]), 3);
|
||||
if (g2 != nullptr)
|
||||
unpackSparseMatrixAndCopyIntoTwoDMatData(plhs[2], g2);
|
||||
if (g3 != nullptr)
|
||||
unpackSparseMatrixAndCopyIntoTwoDMatData(plhs[3], g3);
|
||||
|
||||
for (int i = 0; i < nrhs_dynamic; i++)
|
||||
mxDestroyArray(prhs[i]);
|
||||
|
|
|
@ -36,10 +36,9 @@ private:
|
|||
const static int nlhs_dynamic = 4;
|
||||
const static int nrhs_dynamic = 5;
|
||||
public:
|
||||
DynamicModelMFile(const string &modName) throw (DynareException);
|
||||
virtual
|
||||
~DynamicModelMFile();
|
||||
explicit DynamicModelMFile(const string &modName) noexcept(false);
|
||||
virtual ~DynamicModelMFile() = default;
|
||||
void eval(const Vector &y, const Vector &x, const Vector ¶ms, const Vector &ySteady,
|
||||
Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) throw (DynareException);
|
||||
Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) noexcept(false);
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -40,14 +40,14 @@ KordpDynare::KordpDynare(const vector<string> &endo, int num_endo,
|
|||
Vector &ysteady, TwoDMatrix &vcov, Vector &inParams, int nstat,
|
||||
int npred, int nforw, int nboth, const int jcols, const Vector &nnzd,
|
||||
const int nsteps, int norder,
|
||||
Journal &jr, DynamicModelAC *dynamicModelFile_arg, double sstol,
|
||||
const vector<int> &var_order, const TwoDMatrix &llincidence, double criterium) throw (TLException) :
|
||||
nStat(nstat), nBoth(nboth), nPred(npred), nForw(nforw), nExog(nexog), nPar(npar),
|
||||
nYs(npred + nboth), nYss(nboth + nforw), nY(num_endo), nJcols(jcols), NNZD(nnzd), nSteps(nsteps),
|
||||
nOrder(norder), journal(jr), ySteady(ysteady), params(inParams), vCov(vcov),
|
||||
md(1), dnl(*this, endo), denl(*this, exo), dsnl(*this, dnl, denl), ss_tol(sstol), varOrder(var_order),
|
||||
ll_Incidence(llincidence), qz_criterium(criterium), g1p(NULL),
|
||||
g2p(NULL), g3p(NULL), dynamicModelFile(dynamicModelFile_arg)
|
||||
Journal &jr, unique_ptr<DynamicModelAC> dynamicModelFile_arg, double sstol,
|
||||
const vector<int> &var_order, const TwoDMatrix &llincidence, double criterium) noexcept(false) :
|
||||
nStat{nstat}, nBoth{nboth}, nPred{npred}, nForw{nforw}, nExog{nexog}, nPar{npar},
|
||||
nYs{npred + nboth}, nYss{nboth + nforw}, nY{num_endo}, nJcols{jcols}, NNZD{nnzd}, nSteps{nsteps},
|
||||
nOrder{norder}, journal{jr}, ySteady{ysteady}, params{inParams}, vCov{vcov},
|
||||
md{1}, dnl{*this, endo}, denl{*this, exo}, dsnl{*this, dnl, denl}, ss_tol{sstol}, varOrder{var_order},
|
||||
ll_Incidence{llincidence}, qz_criterium{criterium}, g1p{nullptr},
|
||||
g2p{nullptr}, g3p{nullptr}, dynamicModelFile{move(dynamicModelFile_arg)}
|
||||
{
|
||||
ReorderDynareJacobianIndices();
|
||||
|
||||
|
@ -61,15 +61,15 @@ KordpDynare::KordpDynare(const vector<string> &endo, int num_endo,
|
|||
Vector &ysteady, TwoDMatrix &vcov, Vector &inParams, int nstat,
|
||||
int npred, int nforw, int nboth, const int jcols, const Vector &nnzd,
|
||||
const int nsteps, int norder,
|
||||
Journal &jr, DynamicModelAC *dynamicModelFile_arg, double sstol,
|
||||
Journal &jr, unique_ptr<DynamicModelAC> dynamicModelFile_arg, double sstol,
|
||||
const vector<int> &var_order, const TwoDMatrix &llincidence, double criterium,
|
||||
TwoDMatrix *g1_arg, TwoDMatrix *g2_arg, TwoDMatrix *g3_arg) throw (TLException) :
|
||||
nStat(nstat), nBoth(nboth), nPred(npred), nForw(nforw), nExog(nexog), nPar(npar),
|
||||
nYs(npred + nboth), nYss(nboth + nforw), nY(num_endo), nJcols(jcols), NNZD(nnzd), nSteps(nsteps),
|
||||
nOrder(norder), journal(jr), ySteady(ysteady), params(inParams), vCov(vcov),
|
||||
md(1), dnl(*this, endo), denl(*this, exo), dsnl(*this, dnl, denl), ss_tol(sstol), varOrder(var_order),
|
||||
ll_Incidence(llincidence), qz_criterium(criterium),
|
||||
g1p(g1_arg), g2p(g2_arg), g3p(g3_arg), dynamicModelFile(dynamicModelFile_arg)
|
||||
TwoDMatrix *g1_arg, TwoDMatrix *g2_arg, TwoDMatrix *g3_arg) noexcept(false) :
|
||||
nStat{nstat}, nBoth{nboth}, nPred{npred}, nForw{nforw}, nExog{nexog}, nPar{npar},
|
||||
nYs{npred + nboth}, nYss{nboth + nforw}, nY{num_endo}, nJcols{jcols}, NNZD{nnzd}, nSteps{nsteps},
|
||||
nOrder{norder}, journal{jr}, ySteady{ysteady}, params{inParams}, vCov{vcov},
|
||||
md{1}, dnl{*this, endo}, denl{*this, exo}, dsnl{*this, dnl, denl}, ss_tol{sstol}, varOrder{var_order},
|
||||
ll_Incidence{llincidence}, qz_criterium{criterium},
|
||||
g1p{g1_arg}, g2p{g2_arg}, g3p{g3_arg}, dynamicModelFile{move(dynamicModelFile_arg)}
|
||||
{
|
||||
ReorderDynareJacobianIndices();
|
||||
|
||||
|
@ -91,7 +91,7 @@ KordpDynare::solveDeterministicSteady()
|
|||
}
|
||||
|
||||
void
|
||||
KordpDynare::evaluateSystem(Vector &out, const Vector &yy, const Vector &xx) throw (DynareException)
|
||||
KordpDynare::evaluateSystem(Vector &out, const Vector &yy, const Vector &xx) noexcept(false)
|
||||
{
|
||||
// This method is only called when checking the residuals at steady state (Approximation::check), so return zero residuals
|
||||
out.zeros();
|
||||
|
@ -99,7 +99,7 @@ KordpDynare::evaluateSystem(Vector &out, const Vector &yy, const Vector &xx) thr
|
|||
|
||||
void
|
||||
KordpDynare::evaluateSystem(Vector &out, const Vector &yym, const Vector &yy,
|
||||
const Vector &yyp, const Vector &xx) throw (DynareException)
|
||||
const Vector &yyp, const Vector &xx) noexcept(false)
|
||||
{
|
||||
// This method is only called when checking the residuals at steady state (Approximation::check), so return zero residuals
|
||||
out.zeros();
|
||||
|
@ -112,7 +112,7 @@ KordpDynare::evaluateSystem(Vector &out, const Vector &yym, const Vector &yy,
|
|||
void
|
||||
KordpDynare::calcDerivativesAtSteady()
|
||||
{
|
||||
if (g1p == NULL)
|
||||
if (g1p == nullptr)
|
||||
{
|
||||
g1p = new TwoDMatrix(nY, nJcols);
|
||||
g1p->zeros();
|
||||
|
@ -166,7 +166,7 @@ KordpDynare::populateDerivativesContainer(const TwoDMatrix &g, int ord, const ve
|
|||
// model derivatives FSSparseTensor instance
|
||||
FSSparseTensor *mdTi = (new FSSparseTensor(ord, nJcols, nY));
|
||||
|
||||
IntSequence s(ord, 0);
|
||||
IntSequence s{ord, 0};
|
||||
|
||||
if (ord == 1)
|
||||
{
|
||||
|
@ -261,7 +261,7 @@ KordpDynare::populateDerivativesContainer(const TwoDMatrix &g, int ord, const ve
|
|||
* passing to <model>_dynamic DLL
|
||||
*************************************************************/
|
||||
void
|
||||
KordpDynare::LLxSteady(const Vector &yS, Vector &llxSteady) throw (DynareException, TLException)
|
||||
KordpDynare::LLxSteady(const Vector &yS, Vector &llxSteady) noexcept(false)
|
||||
{
|
||||
if ((nJcols-nExog) == yS.length())
|
||||
throw DynareException(__FILE__, __LINE__, "ySteady already of right size");
|
||||
|
@ -308,7 +308,7 @@ KordpDynare::LLxSteady(const Vector &yS, Vector &llxSteady) throw (DynareExcepti
|
|||
************************************/
|
||||
|
||||
void
|
||||
KordpDynare::ReorderDynareJacobianIndices() throw (TLException)
|
||||
KordpDynare::ReorderDynareJacobianIndices() noexcept(false)
|
||||
{
|
||||
// create temporary square 2D matrix size nEndo x nEndo (sparse)
|
||||
// for the lag, current and lead blocks of the jacobian
|
||||
|
@ -351,7 +351,7 @@ DynareStateNameList::DynareStateNameList(const KordpDynare &dynare, const Dynare
|
|||
const DynareNameList &denl)
|
||||
{
|
||||
for (int i = 0; i < dynare.nys(); i++)
|
||||
names.push_back(string(dnl.getName(i+dynare.nstat())));
|
||||
names.push_back(string{dnl.getName(i+dynare.nstat())});
|
||||
for (int i = 0; i < dynare.nexog(); i++)
|
||||
names.push_back(string(denl.getName(i)));
|
||||
names.push_back(string{denl.getName(i)});
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#ifndef K_ORD_DYNARE3_H
|
||||
#define K_ORD_DYNARE3_H
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
#include "t_container.h"
|
||||
#include "sparse_tensor.h"
|
||||
#include "decision_rule.h"
|
||||
|
@ -123,20 +124,19 @@ public:
|
|||
Vector &ySteady, TwoDMatrix &vCov, Vector ¶ms, int nstat, int nPred,
|
||||
int nforw, int nboth, const int nJcols, const Vector &NNZD,
|
||||
const int nSteps, const int ord,
|
||||
Journal &jr, DynamicModelAC *dynamicModelFile_arg, double sstol,
|
||||
Journal &jr, unique_ptr<DynamicModelAC> dynamicModelFile_arg, double sstol,
|
||||
const vector<int> &varOrder, const TwoDMatrix &ll_Incidence,
|
||||
double qz_criterium) throw (TLException);
|
||||
double qz_criterium) noexcept(false);
|
||||
KordpDynare(const vector<string> &endo, int num_endo,
|
||||
const vector<string> &exo, int num_exo, int num_par,
|
||||
Vector &ySteady, TwoDMatrix &vCov, Vector ¶ms, int nstat, int nPred,
|
||||
int nforw, int nboth, const int nJcols, const Vector &NNZD,
|
||||
const int nSteps, const int ord,
|
||||
Journal &jr, DynamicModelAC *dynamicModelFile_arg, double sstol,
|
||||
Journal &jr, unique_ptr<DynamicModelAC> dynamicModelFile_arg, double sstol,
|
||||
const vector<int> &varOrder, const TwoDMatrix &ll_Incidence,
|
||||
double qz_criterium, TwoDMatrix *g1_arg, TwoDMatrix *g2_arg, TwoDMatrix *g3_arg) throw (TLException);
|
||||
double qz_criterium, TwoDMatrix *g1_arg, TwoDMatrix *g2_arg, TwoDMatrix *g3_arg) noexcept(false);
|
||||
|
||||
virtual
|
||||
~KordpDynare();
|
||||
virtual ~KordpDynare();
|
||||
int
|
||||
nstat() const
|
||||
{
|
||||
|
@ -230,21 +230,21 @@ public:
|
|||
}
|
||||
|
||||
void solveDeterministicSteady();
|
||||
void evaluateSystem(Vector &out, const Vector &yy, const Vector &xx) throw (DynareException);
|
||||
void evaluateSystem(Vector &out, const Vector &yy, const Vector &xx) noexcept(false);
|
||||
void evaluateSystem(Vector &out, const Vector &yym, const Vector &yy,
|
||||
const Vector &yyp, const Vector &xx) throw (DynareException);
|
||||
const Vector &yyp, const Vector &xx) noexcept(false);
|
||||
void calcDerivativesAtSteady();
|
||||
DynamicModelAC *dynamicModelFile;
|
||||
unique_ptr<DynamicModelAC> dynamicModelFile;
|
||||
DynamicModel *
|
||||
clone() const
|
||||
{
|
||||
std::cerr << "KordpDynare::clone() not implemented" << std::endl;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
void LLxSteady(const Vector &yS, Vector &llxSteady) throw (DynareException, TLException); // Given the steady state in yS, returns in llxSteady the steady state extended with leads and lags
|
||||
void LLxSteady(const Vector &yS, Vector &llxSteady) noexcept(false); // Given the steady state in yS, returns in llxSteady the steady state extended with leads and lags
|
||||
|
||||
private:
|
||||
void ReorderDynareJacobianIndices() throw (TLException);
|
||||
void ReorderDynareJacobianIndices() noexcept(false);
|
||||
void populateDerivativesContainer(const TwoDMatrix &g, int ord, const vector<int> &vOrder);
|
||||
};
|
||||
|
||||
|
|
|
@ -198,9 +198,9 @@ extern "C" {
|
|||
if ((nEndo != nendo) || (nExog != nexo))
|
||||
DYN_MEX_FUNC_ERR_MSG_TXT("Incorrect number of input parameters.");
|
||||
|
||||
TwoDMatrix *g1m = NULL;
|
||||
TwoDMatrix *g2m = NULL;
|
||||
TwoDMatrix *g3m = NULL;
|
||||
TwoDMatrix *g1m = nullptr;
|
||||
TwoDMatrix *g2m = nullptr;
|
||||
TwoDMatrix *g3m = nullptr;
|
||||
// derivatives passed as arguments */
|
||||
if (nrhs > 3)
|
||||
{
|
||||
|
@ -236,11 +236,11 @@ extern "C" {
|
|||
jName += ".jnl";
|
||||
Journal journal(jName.c_str());
|
||||
|
||||
DynamicModelAC *dynamicModelFile;
|
||||
unique_ptr<DynamicModelAC> dynamicModelFile;
|
||||
if (use_dll == 1)
|
||||
dynamicModelFile = new DynamicModelDLL(fName);
|
||||
dynamicModelFile = make_unique<DynamicModelDLL>(fName);
|
||||
else
|
||||
dynamicModelFile = new DynamicModelMFile(fName);
|
||||
dynamicModelFile = make_unique<DynamicModelMFile>(fName);
|
||||
|
||||
// intiate tensor library
|
||||
tls.init(kOrder, nStat+2*nPred+3*nBoth+2*nForw+nExog);
|
||||
|
@ -248,7 +248,7 @@ extern "C" {
|
|||
// make KordpDynare object
|
||||
KordpDynare dynare(endoNames, nEndo, exoNames, nExog, nPar,
|
||||
ySteady, vCov, modParams, nStat, nPred, nForw, nBoth,
|
||||
jcols, NNZD, nSteps, kOrder, journal, dynamicModelFile,
|
||||
jcols, NNZD, nSteps, kOrder, journal, move(dynamicModelFile),
|
||||
sstol, var_order_vp, llincidence, qz_criterium,
|
||||
g1m, g2m, g3m);
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit bef7c2a1938f1201cffbddc8d597b2a486fd36c6
|
||||
Subproject commit 571b5d081657271b7f5e02f93778bddf9020787b
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue