Current status of Dynare with Octave
Deterministic simulation works (tested on ramst.mod)
Stochastic simulation works (tested on example1.mod)
Bayesian estimation works (tested on arima/mod1a.mod).
- However, Excel data files are not supported by Octave. A workaround is to convert the file to a text format (more details to come shortly)
- Ramsey policy works
Results are saved in .mat files which can be read from MATLAB and from Octave
- Graphics display:
- basically works
- however window titles ("Priors", ...) don't show up (with GNUplot backend)
- the scale is sometimes ugly (overlapping characters) (with GNUplot backend)
- warnings about missing font file show up (with GNUplot backend)
- graphics are vertically shrinked when several plots are on the same window (with JHandles backend)
- graphics saving on filesystem works for EPS, but not for PDF and FIG formats
- currently, Dynare crashes when Octave is run without graphical capabilities; a workaround is to use option "nograph"
Main differences between MATLAB and Octave which are dealt with by Dynare
Generalized eigenvalues: eig(A,B) doesn't exist in Octave. A call to lambda = qz(A,B) does the same job, except that it doesn't return infinite eigenvalues, so we can't use it. Implied a change in dr1.m
QZ decomposition: [AA,BB,Q,Z] = qz(A,B) works under Octave, but:
the convention for Q is different. We have AA = Q*A*Z under Matlab and AA = Q'*A*Z under Octave. Implied a change in gensylv/sylvester3.m
Octave is only able to compute real QZ, while MATLAB can do both complex and real, and does complex by default. As a consequence, qz/mjdgges.m is implemented differently for Octave and MATLAB: under MATLAB we compute the complex decomposition, and use Sims' code for reordering the eigenvalues; under Octave, we use the native reordered QZ, but as a consequence the criterium is de facto always 1.0
Reciprocal condition number: rcond(A) doesn't exist under Octave. For the moment, the workaround is to create a rcond.m M-file which does 1/(norm(A,1)*norm(inv(A), 1)). The rcond() function is now available in Octave 3.2.
Saving data on the filesystem:
Octave can read and write Matlab's MAT format. A call to default_save_options('-mat') was added in dynare.m to make Dynare for Octave create MAT files
But save() and load() under Octave don't assume the .mat extension. Need to explicitly add them
Saving graphics on the filesystem:
Saving graphics with saveas() don't work, since it uses a Matlab specific format
Creation of PDF files is not supported (through print -dpdf). This comes from the fact that PDF support in GNUPlot is non-free, and therefore not available under Debian/Ubuntu or Windows package. See Debian bug #248426
- Creation of EPS files works (though file extension is not automatically added by Octave, contrary to Matlab)
Warning handling is different between Matlab and Octave, and necessitated some adjustments
Adjustments were obviously necessary where version() function is called
The operator & under MATLAB is buggy: it doesn't execute its second argument if the first is false, when used in an if statement. This behaviour should be restricted to &&. This also applies to | and ||. Implied a change in mh_optimal_bandwith.m, since this file expects the buggy behaviour
waitbar() exists under Octave, but is text-only and is not very flexible. Replaced by calls to printf() in random_walk_metropolis_hastings.m
mkdir() works slightly differently under Octave: it won't simultaneously create several depths of subdirectories. Implied a change in CheckPath.m
setdiff() doesn't return a second argument under Octave. Implied a workaround in dynare_estimation.m and dynare_estimation_init.m
ordeig() doesn't exist under Octave (nor on MATLAB < 7.0.1). Use my_ordeig() instead.
Case sensitivity : under GNU/Linux, calls to Octave functions and variables are case sensitive. So non preprocessed instructions at the end of modfiles should be written with lowercase.