Differences between revisions 5 and 42 (spanning 37 versions)
Revision 5 as of 2008-05-26 12:33:43
Size: 3749
Comment:
Revision 42 as of 2008-11-05 14:47:54
Size: 8080
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
= Dynare for Octave = = Dynare with Octave =
Line 5: Line 5:
Porting of Dynare to Octave is under progress. Development is done using Octave version 3.0. Dynare is now able to run on GNU Octave, which is basically a free clone of Matlab.

Octave versions greater or equal to 3.0.0 are supported.
Line 9: Line 11:
Octave is a free clone of Matlab, running under Linux, Windows and MacOS. GNU Octave is a free clone of Matlab, running under Linux, Windows and MacOS.
Line 11: Line 13:
It normally runs in a command window, but a graphical frontend is available (see below). It normally runs in a command window, and displays graphics in separate windows (using Gnuplot).
Line 18: Line 20:
 * List of [http://www.gnu.org/software/octave/FAQ.html#MATLAB-compatibility differences between Octave and Matlab]
 * [http://www.unige.ch/math/folks/loisel/www.math.mcgill.ca/loisel/octave-workshop/ Octave workshop]: graphical user interface for Octave
 * On the compatibility between Octave and Matlab:
   * List of [http://www.gnu.org/software/octave/FAQ.html#MATLAB-compatibility differences between Octave and Matlab]
   * List of [http://wiki.octave.org/wiki.pl?MissingMatlabFunctions missing Matlab functions] in Octave
   * More on [http://wiki.octave.org/wiki.pl?MatlabOctaveCompatibility Matlab/Octave compatibility]
 * [http://en.wikibooks.org/wiki/Octave_Programming_Tutorial Octave Programming Tutorial] on Wiki``Books
Line 21: Line 26:
== Development of Dynare for Octave == == Installing Dynare with Octave ==
Line 23: Line 28:
A specific subversion branch has been created under {{{branches/dynare_v4_octave}}}. Note that this branch is supposed to work on both Matlab and Octave (using tests to differentiate between the two when necessary). Please report any failure to run under Matlab. === Windows ===
Line 25: Line 30:
It is possible to view the differences between Matlab and Octave versions of Dynare by issuing: The recommended Octave distribution is the [http://sourceforge.net/project/showfiles.php?group_id=2888&package_id=40078 precompiled binaries from Octave Forge]. Pick the {{{octave-3.0.1-vs2008-setup.exe}}} installer. Choose GNUplot graphical backend (instead of JHandles) during installation. Also note that this distribution contains a nice text editor, which you can invoke with {{{edit}}} as you would under Matlab.

''Warning:'' this binary distribution has a bug which makes Octave crash everytime one types {{{clear all}}} (and therefore everytime one runs Dynare!). A simple workaround is to type the following command the first time you run Octave:
Line 27: Line 34:
svn diff http://www.cepremap.cnrs.fr/svn/dynare_v4 http://www.cepremap.cnrs.fr/svn/branches/dynare_v4_octave
}}}
''Note:'' be aware that recent changes to Matlab version of Dynare may not have been yet merged into the Octave branch, and may thus appear as spurious differences.

== Installing Dynare for Octave ==

=== Octave ===

Under Debian "Lenny", install package {{{octave3.0}}}

For Windows, the Cygwin package is quite outdated. You should rather download [http://sourceforge.net/project/showfiles.php?group_id=2888&package_id=40078 precompiled binaries from Octave Forge].

=== Dynare for Octave ===

If you don't already have a subversion copy of the whole Dynare tree, you should type (under Linux or Cygwin prompt, assuming you have installed the {{{subversion}}} package):
{{{
svn checkout http://www.cepremap.cnrs.fr/svn/branches/dynare_v4_octave
pkg rebuild -noauto ftp ann database
Line 46: Line 37:
Don't forget to update regularly your working copy, using {{{svn update}}}. Then download Dynare from [http://www.dynare.org] (pick the most recent release of version 4 for Windows in the download section). The archive contains DLLs compiled for Octave.
Line 48: Line 39:
== Running Dynare for Octave == ''Note:'' Cygwin now contains an Octave 3.0 package. However this package is slower than the standalone one, and is therefore not recommended for the moment. If you really want to use it, you will have to recompile the MEX files (see BuildingDlls).

=== GNU/Linux ===

For Debian "Lenny" or Ubuntu "Hardy Heron" or "Intrepid Ibex", see InstallOnDebianOrUbuntu.

For other distributions:
 * install the package for Octave 3.0 from your distribution
 * download and uncompress Dynare version 4 sources from [http://www.dynare.org] (download section)
 * compile the preprocessor (see BuildingPreprocessor)
 * compile the dynamic libaries (see BuildingDlls)

== Running Dynare with Octave ==
Line 58: Line 61:
Then, from Octave, add the path to {{{dynare_v4_octave}}} using the {{{addpath}}} command, as you would under Matlab: It is also possible to run [http://www.gnu.org/software/octave/doc/interpreter/Emacs.html Octave under Emacs].

Then, from Octave, add the path to Dynare with the {{{addpath}}} command, as you would under Matlab:
Line 60: Line 65:
addpath REPLACE_WITH_RIGHT_PATH/dynare_v4_octave/matlab addpath REPLACE_WITH_INSTALL_PATH/matlab
Line 64: Line 69:
Unless you tell it to do otherwise, Octave won't accept short syntax when typing {{{dynare}}} command. In other words, to run Dynare on {{{ramst.mod}}}, you need to type: Unless you tell it to do otherwise, Octave won't accept the short syntax when typing {{{dynare}}} command. In other words, to run Dynare on {{{ramst.mod}}}, you need to type:
Line 75: Line 80:
mark_as_command dynare; mark_as_command dynare
Line 78: Line 83:
== Current status of Dynare with Octave ==
Line 79: Line 85:
== Main changes between Matlab and Octave versions of Dynare ==  * 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)
   * Diffuse Kalman filter doesn't work (no {{{ordschur}}} function in Octave)
 * Ramsey policy works
 * Results are saved in {{{.mat}}} files which can be read from Matlab 6, 7 and from Octave
 * Graphics display:
   * basically works
   * however window titles ("Priors", ...) don't show up
   * the scale is sometimes ugly (overlapping characters)
   * warnings about missing font file show up
   * 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"
 * MEX files:
   * can be compiled using {{{mex/sources/build_octave.m}}}
   * successfully tested under Linux
   * under Windows, since the Octave-Forge pre-compiled binary is build using Microsoft Visual C++ 2008, one need this compiler to create MEX files
Line 81: Line 105:
 * Warning handling is different between Matlab and Octave, and necessitated some adjustments. == 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 changes in {{{gensylv/sylvester3.m}}} and {{{qz/mjdgges.m}}}
 * '''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 should be available in the next major release of Octave, see [http://www.cae.wisc.edu/pipermail/octave-maintainers/2008-May/007332.html this post] and its reply.
 * '''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 [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=248426 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
Line 83: Line 119:
 * Generalized eigenvalues are not implemented as a primitive (i.e. {{{eig(A,B)}}} doesn't exist in Octave). This implied a change in {{{dr1.m}}}

== Current status of development ==

 * Simple deterministic models should work
 * 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.

Dynare with Octave

Dynare is now able to run on GNU Octave, which is basically a free clone of Matlab.

Octave versions greater or equal to 3.0.0 are supported.

About Octave

GNU Octave is a free clone of Matlab, running under Linux, Windows and MacOS.

It normally runs in a command window, and displays graphics in separate windows (using Gnuplot).

Some ressources:

Installing Dynare with Octave

Windows

The recommended Octave distribution is the [http://sourceforge.net/project/showfiles.php?group_id=2888&package_id=40078 precompiled binaries from Octave Forge]. Pick the octave-3.0.1-vs2008-setup.exe installer. Choose GNUplot graphical backend (instead of JHandles) during installation. Also note that this distribution contains a nice text editor, which you can invoke with edit as you would under Matlab.

Warning: this binary distribution has a bug which makes Octave crash everytime one types clear all (and therefore everytime one runs Dynare!). A simple workaround is to type the following command the first time you run Octave:

pkg rebuild -noauto ftp ann database

Then download Dynare from [http://www.dynare.org] (pick the most recent release of version 4 for Windows in the download section). The archive contains DLLs compiled for Octave.

Note: Cygwin now contains an Octave 3.0 package. However this package is slower than the standalone one, and is therefore not recommended for the moment. If you really want to use it, you will have to recompile the MEX files (see BuildingDlls).

GNU/Linux

For Debian "Lenny" or Ubuntu "Hardy Heron" or "Intrepid Ibex", see InstallOnDebianOrUbuntu.

For other distributions:

Running Dynare with Octave

First, you should run Octave.

Under Linux, at the prompt, just type:

octave

Under Windows, you should have a shortcut already installed in your Start menu.

It is also possible to run [http://www.gnu.org/software/octave/doc/interpreter/Emacs.html Octave under Emacs].

Then, from Octave, add the path to Dynare with the addpath command, as you would under Matlab:

addpath REPLACE_WITH_INSTALL_PATH/matlab

It is possible to autoexecute this command at each Octave start by adding it to the .octaverc startup file (under Linux, this file should be put in the home directory; under Windows, it should be put at the root of the user home under Documents and Settings).

Unless you tell it to do otherwise, Octave won't accept the short syntax when typing dynare command. In other words, to run Dynare on ramst.mod, you need to type:

dynare('ramst')

rather than:

dynare ramst

However, you can force Octave to accept the short syntax by typing the following (or by adding it to your .octaverc):

mark_as_command dynare

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)
    • Diffuse Kalman filter doesn't work (no ordschur function in Octave)

  • Ramsey policy works
  • Results are saved in .mat files which can be read from Matlab 6, 7 and from Octave

  • Graphics display:
    • basically works
    • however window titles ("Priors", ...) don't show up
    • the scale is sometimes ugly (overlapping characters)
    • warnings about missing font file show up
    • 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"
  • MEX files:
    • can be compiled using mex/sources/build_octave.m

    • successfully tested under Linux
    • under Windows, since the Octave-Forge pre-compiled binary is build using Microsoft Visual C++ 2008, one need this compiler to create MEX files

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 changes in gensylv/sylvester3.m and qz/mjdgges.m

  • 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 should be available in the next major release of Octave, see [http://www.cae.wisc.edu/pipermail/octave-maintainers/2008-May/007332.html this post] and its reply.

  • 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 [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=248426 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.

DynareWiki: OctaveCompatibility (last edited 2012-10-08 11:47:00 by SébastienVillemot)