Differences between revisions 9 and 74 (spanning 65 versions)
Revision 9 as of 2008-06-09 09:17:16
Size: 5040
Comment:
Revision 74 as of 2012-10-08 11:47:00
Size: 3444
Comment: Remove obsolete stuff
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was renamed from DynareOctave
Line 3: Line 4:
= Dynare for Octave = Main differences between MATLAB and Octave which are dealt with by Dynare:
Line 5: Line 6:
Porting of Dynare to Octave is under progress. Development is done using Octave version 3.0.

== About Octave ==

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:

 * [http://www.octave.org Octave official site]
 * [http://octave.sourceforge.net Octave Forge]: a set of extensions for Octave
 * Official [http://www.gnu.org/software/octave/doc/interpreter/ Octave manual] online
 * 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]

Note that a graphical frontend for Octave is available (see [http://www.unige.ch/math/folks/loisel/www.math.mcgill.ca/loisel/octave-workshop/ Octave workshop]), but it is not at all necessary for running Dynare.

== Development of Dynare for Octave ==

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.

It is possible to view the differences between Matlab and Octave versions of Dynare by issuing:
{{{
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].

[http://wiki.octave.org/wiki.pl?CategoryInstall More installation instructions] can be found on Octave Wiki.

=== 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
}}}

Don't forget to update regularly your working copy, using {{{svn update}}}.

== Running Dynare for 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.

Then, from Octave, add the path to {{{dynare_v4_octave}}} using the {{{addpath}}} command, as you would under Matlab:
{{{
addpath REPLACE_WITH_RIGHT_PATH/dynare_v4_octave/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
}}}


== Main changes between Matlab and Octave versions of Dynare ==

 * Warning handling is different between Matlab and Octave, and necessitated some adjustments.
 * '''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 [[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 89: Line 20:
 * '''Generalized eigenvalues:''' {{{eig(A,B)}}} doesn't exist in Octave. But a call to {{{lambda = qz(A,B)}}} does the same job. 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}}}
 * Saving graphics under Octave works differently ({{{saveas()}}} doesn't exist)
 * 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 or Windows package. See [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=248426 Debian bug #248426]

== Current status of development ==

 * Simple deterministic models should work
 * Simple stochastic simulation should work
 * Graphics display is correct but not very nice when many plots on the same figure
 * Graphics saving on filesystem is disabled for the moment
 * 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.

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.

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