SPM/Octave

From Wikibooks, open books for an open world
< SPM
Jump to navigation Jump to search



GNU Octave[edit]

GNU Octave is a high-level language that is mostly compatible with MATLAB. It is free open source software under the terms of the GNU General Public License.

Octave[edit]

MATLAB/Octave compatibility[edit]

GNU Octave is mostly compatible with MATLAB:

Compatibility status from other neuroimaging MATLAB packages:

Current status for SPM/Octave compatibility[edit]

SPM is not supported under Octave and there is a number of known issues (especially regarding the graphical user interface) but feel free to contact fil.spm@ucl.ac.uk if you are interested. In most situations, the standalone version of SPM might be a sufficient alternative.

You need to use latest version of SPM12 and GNU Octave (4.4.1).

For compilation of the MEX files for Octave, run the following:

cd /home/login/spm12/src
make distclean PLATFORM=octave
make PLATFORM=octave && make install PLATFORM=octave

How to contribute[edit]

You can contribute to improve the support of SPM on GNU Octave in several ways:

  • Report bugs: using the development version of Octave, report problems you encounter when using SPM to SPM or Octave developers. Make sure to only report a bug in Octave when it's something that should not be fixed in SPM instead. Try to isolate the problem as much as possible.
  • Propose patches in Octave for bugs from the list below that have not been fixed yet.
  • Contribute financially to the Octave community.

Compatibility issues observed so far in SPM with Octave[edit]

Requires changes in SPM[edit]

  • Compilation of MEX files: use "mkoctfile --mex" and the MEX-file extension is ".mex" on all platforms.
  • It is not possible to create a function handle with a function name that does not exist (eg, x = @sdlkjfhg fails, see this).
  • do is a reserved keyword in Octave (for a do-until loop) so cannot be used as variable name.
  • disp should be called instead of display for standard variables (in OO programming).
  • builtin('display',obj) does not work on user-defined objects (MATLAB returns 'classname object: x-by-y', i.e. it calls disp.m).
  • class can only be called from the class constructor (and not in any other method function) (class(obj,'myclass') => myclass(obj)).
  • The short-circuit && and || operators should be used in if statements, instead of binary operators & and |. This is reported by MLINT.
  • MEX files should include "mex.h" but not "matrix.h", see this
  • cd does not return current directory in Octave (unlikely to change, see this thread). Call pwd beforehand instead.

Requires changes in Octave[edit]

  • Line continuation "..." does not ignore anything that appears after it, unless there is a comment sign % (MATLAB does). fixed
  • strrep.m works on strings but not cell arrays. fixed
  • isdeployed.m does not exist (function X=isdeployed, X=false;). fixed
  • textscan.m, strread.m and textread.m do not exist (in 3.2.4; available in devel, see this and this). Note that in MATLAB, textscan should be preferred and replace strread and textread. The devel function crashes on textscan('aaa.bbb','%s','delimiter','.') fixed
  • A subfunction of a private class method does not access fields directly (i.e. it's a step further from this) and calls subsref/subsasgn instead. fixed
  • which.m does not support the -ALL option (see this). in progress
  • trailing filesep in addpath/rmpath fixed
  • a='a';b={};c=cellfun(@(x)strcmp(a,x),b); crashes with Octave (devel, not 3.2.4) while MATLAB returns c=[]. fixed
  • Same error with b=get(findobj(0,'Tag','xxx'),'a') which should return [], i.e. problem with functions that return empty output. fixed
  • save.m (and perhaps load.m) have trouble with MATLAB binary MAT-format. (when some variables are not double precision (e.g. clear a;a.field1=single(1);save a.mat a -v6;load a.mat crashes on Octave dev ("error: load: invalid element type = 0") fixed). fixed
  • dialog, errordlg, helpdlg, inputdlg, listdlg, msgbox, warndlg do not exist in Octave.
  • gco.m now exists in Octave but creates a figure if none exists. fixed.
  • fcnchk.m does not exist in Octave (can usually be replaced by str2func.m)
  • isequal.m does not work with objects (error: find: wrong type argument `class', __isequal__.m at line 147). fixed
  • logm(eye(3)) crashes, MATLAB returns zeros(3). fixed
  • logm sometimes returns complex numbers. fixed
  • mat2str fails on logical inputs. fixed
  • Several problems with hierarchical classes. fixed, fixed, fixed, fixed, fixed, fixed, in progress
  • Assignment error with non-preallocated sparse matrices (clear a; a(1,:)=sparse(1,3,1,1,3); returns A(I,J,...) = X: dimensions mismatch. fixed
  • tic/toc do not handle input/output arguments as in MATLAB (tStart=tic; any_statements; tElapsed=toc(tStart);). fixed
  • str2num(',1,1') returns [1 1] in MATLAB and [] in Octave. fixed
  • Objects not converted as structure when loaded from a MAT-file if class definition is not in path. fixed
  • Accessing graphics object properties from an empty handle displays obscure warning (get([],'x')). fixed
  • Compatibility: save with empty variable names. fixed
  • Test on fileparts input argument. fixed
  • nargchk(1,1,1,'struct') returns a 1x1 struct with no fields in Octave and a 0x1 struct with fields message and identifier in MATLAB. fixed
  • [[];{'a'}] returns {[];'a'} instead of {'a'}, won't fix
  • Empty struct struct([]) not preserved when saved in a MAT-file. fixed
  • Problem in regexprep with backslash escape character. fixed
  • Segmentation fault with [B,C]=chol(-speye(3)). fixed
  • mwSignedIndex is not defined => typedef int mwSignedIndex; fixed
  • cell arrays of cell arrays as saved by matlabbatch are not parsed properly with Octave. fixed
  • mkoctfile does not recognize argument -outdir.
  • desktop function does not exist, particularly useful for calls desktop('-inuse'). fixed
  • Compilation with SuiteSparse 3.2 fails. fixed
  • undefined symbol: mexCallMATLAB. fixed
  • Segmentation fault with clf.m test. fixed
  • W specifier in fopen does not work. fixed
  • Parser oddity with if statements. fixed
  • Problem with mxArray in MEX files. fixed
  • Parse error with local functions in classdef files. fixed
  • ind2rgb does not handle float inputs in the same way than MATLAB. fixed
  • Invalid conversion from string to real scalar with %c., fixed
  • Compilation error yylex was not declared in this scope., fixed
  • Compilation failure due to openGL. fixed
  • -depth argument in findobj., fixed
  • evalc is not defined. fixed
  • io64.h is not defined, in progress.
  • save function handle variables in MATLAB's binary data format, in progress
  • Support of close all force., fixed
  • warning in findobj when using regexp., fixed
  • Printing a figure not containing axes. fixed
  • Error following an error in a callback of a uimenu. fixed
  • SelectionType open for double-click non available (Qt-only). fixed
  • hgload can't open MATLAB figures, in progress
  • Difference with figure/uicontrol between Octave and MATLAB, in progress
  • Segmentation fault when loading a MAT-file containing a function_handle to a subfunction, in progress
  • Behaviour of figure property ToolBar when set to auto. fixed
  • Properties of a popupmenu uicontrol. fixed
  • Callback execution of an edit uicontrol. fixed
  • Mouse interaction with image objects don't work in fltk toolkit, in progress
  • Property value of checkbox uicontrol. fixed
  • Changing the style of a uicontrol after creation, in progress
  • Display of popupmenu uicontrol (Qt) in progress
  • Mouse click callbacks of a listbox uicontrol, in progress
  • Interpretation of cell array in String property of a text uicontrol. fixed
  • Incorrect output in textscan/strread with trailing delimiter. fixed
  • Failure to exit when running Octave in --no-gui mode. fixed
  • Freeze with drawnow. fixed
  • Print options: -noui, -painters, -opengl. fixed
  • Reset submenus of a uicontextmenu, in progress
  • Legend object printed below lines in plot, in progress
  • Order of uimenus. fixed
  • CreateMode argument for msgbox/errordlg/warndlg. fixed
  • Error no method for 'scalar struct = scalar' fixed
  • Print does not preserve multiline text and TeX markup in progress
  • Removing a context menu. fixed
  • Case-sensitive listdlg's SelectionMode values. fixed
  • Image display in a 3D view, in progress
  • Issues with copy to clipboard. fixed
  • Error base_graphics_object::get_properties: invalid graphics object, in progress
  • Visible property of a uicontextmenu fixed
  • make attempts to build libgui even with --disable-gui. fixed
  • function localfunctions not implemented. fixed
  • function import not implemented, in progress
  • Access to object arrays, in progress
  • Loading a function handle from a MAT-file, in progress
  • Segmentation fault with missing warning state "all". fixed
  • corrcoef is missing. fixed
  • Third output of uiputfile undefined when user presses Cancel. fixed
  • MEX object files "*.o" are not automatically deleted after compilation (they are with MATLAB's mex). fixed
  • Octave buffers output, which can be blocking. fflush(stdout) or page_screen_output has to be used. pager disabled by default in 4.4
  • /usr/X11R6/lib/libGL.so: could not read symbols on Suse 64 bits fixed
  • CHOLMOD_NOT_POSDEF was not declared in this scope fixed
  • sortrows/sort: only cell arrays of character strings may be sorted error fixed
  • Error in concatenation of classdef objects in progress
  • Restore window button does not trigger a repaint event for its content fixed
  • ginput doesn't correctly process shift/ctlr/alt key combinationsfixed
  • GUI Command Window could support syntax highlight in progress
  • Ctrl+C doesn't interrupt and causes SIGABRT at exitfixed
  • mxCreateNumericArray with zero size fixed
  • Build error with mx-cdm-dm.cc fixed
  • linspace() incompatibility with Matlab when N < 2 fixed
  • Make display of coordinates in figure's status bar optional fixed
  • Crash when uicontrol's callback returns an error fixed
  • Refresh when using waitfor fixed
  • ButtonDownFcn callback of an image fixed
  • run behaves differently from Matlab on function m-files fixed
  • doc build fails with texi2dvi/texi2pdf errors on Ubuntu 14.04 fixed
  • Figure handle input argument for close(...,'force') fixed
  • "parse error" error message in GUI callbacks fixed
  • delete(allchild(fig)) in a "deletefcn" callback raises error fixed
  • missing getframe function fixed
  • Special characters in uicontrol's string fixed
  • prefdir should not be a private function fixed
  • Help menu of Qt figures fixed
  • Detection of Qscintilla libraries fixed
  • Root graphics property "MonitorPositions" not fully implemented in progress
  • Default settings with uicontrols fixed
  • Segmentation fault with Qt figures fixed
  • uicontrols extent is incorrect in progress
  • mexCallMATLABWithTrap not implemented fixed
  • mxSetDimensions for cell arrays fixed
  • realpow: produced complex result fixed
  • Cannot set breakpoints in subfunctions from GUI editor when not using "endfunction" keyword in progress
  • Missing MEX function mxArrayToUTF8String in progress
  • Backgroundcolor ignored for pushbutton and radiobutton in progress
  • Using exit() in batch mode throws octave::exit_exception fixed
  • Display of images for axes partially outside a figure fixed
  • uicontrol popupmenu sizing fixed
  • Implementation of containers.Map fixed
  • Error in the unwind_protect_cleanup section of print.mfixed
  • strmatch, incompatible result on 'empty' input in progress
  • Patch with zero area not displayed with OpenGL in progress
  • questdlg displays buttons in reverse order fixed
  • waitfor should silently accept an empty graphics handle fixed
  • Segmentation fault after a caught error in an Octave script fixed
  • Non-empty ouput for non-matching regexp with 'names' option fixed
  • Invalid FID and fopen(FID) fixed
  • Matlab eval function accepts a column vector string input in progress
  • __have_gnuplot__ does not return anything fixed
  • uimenu 's position is sometimes 0 in progress
  • rotate3d compatibility with Matlab in progress
  • Output of uicontrol fixed
  • isequalwithequalnans is missing fixed
  • fwrite input argument type fixed
  • set() is case-sensitive fixed
  • Update list of missing functions fixed
  • sum, cumsum, etc. mishandle integer inputs in progress
  • Error using print and the append flag fixed
  • ${cmd} replacement operator in regexprep in progress
  • Position of uimenu fixed
  • Loading of figures (and other objects) from Octave IDE fixed
  • orderfields is slow fixed
  • Undefined input to a classdef method fixed
  • zeros: like keyword in progress
  • textscan option MultipleDelimsAsOne does not apply to space or tab characters in progress
  • ismember fails if the string ends in a space fixed
  • Infinite loop in normest1 fixed
  • pinv(0) different from Matlab fixed
  • center() relies on broadcasting fixed
  • private function in classdef file fixed
  • max_recursion_depth error in classdef constructor in progress
  • isequal is slow fixed
  • display of multidimensional arrays uses 'ans' in progress
  • strcmp with multidimensional char arrays in progress
  • Implementation of class categorical in progress
  • Support for "import" keyword in progress
  • modal windowstyle property not working fixed
  • Missing keyword help for classdef keywords fixed
  • makeValidName and makeUniqueStrings fixed
  • PDF user manual uses a backward apostrophe ` in code examples fixed
  • Implementation of histcounts in progress
  • Implement jsondecode, jsonencode functions in progress
  • Figure property IntegerHandle does not work fully with Qt toolkit in progress
  • "Number" property for figure fixed
  • Implementation of movegui fixed
  • Implementation of savefig fixed
  • Octave 4.3.0+ can't load figures saved with previous versions in progress
  • Unknown command `codequoteundirected' in help text fixed
  • warning message when qcollectiongenerator and qhelpgenerator are not found fixed
  • Syntax of documentation with texinfo 4.13 fixed
  • Segmentation fault when executing a script containing a figure fixed
  • warning from opengl_renderer about light object fixed
  • uicontrol/uibuttongroup: focusing not implemented yet fixed
  • octave deadlocks with deletefcn callback that calls graphical function in progress
  • doc: some default Qt properties are different between systems fixed
  • MEX file in a private directory of a class fixed
  • ismember error with mixed numeric and char arrays inputs fixed
  • Error with whos -file: 'load' not found fixed
  • Behavior of open with unknown or non-existing files in progress
  • Colors of a uicontrol pushbutton fixed
  • uipanel doesnt show border in linux fixed
  • camlight (axis_handle, ...) should work for Matlab Compatibility fixed
  • Implementation of isfolder fixed
  • Private directory in +package in progress
  • Figure's Position when MenuBar is none fixed
  • load() should issue an error if specified variable does not exist in file in progress
  • subsasgn call when the subscripted expression contains the end keyword in progress
  • Implementation of memmapfile in progress
  • File browser unresponsive in progress
  • uicontrol: validation of cdata property fixed
  • savefig should accept a vector of figure handles for Matlab compatibility fixed
  • colormap property of a figure cannot be empty fixed
  • Interpreter cannot find methods in files of classdefs in packages in progress
  • Implement uicontrol focusing behavior fixed
  • Use of camlight when a patch is not visible fixed
  • Removal of called_from_builtin in progress
  • Property VertexNormals not updated fixed
  • gunzip/bunzip2 error with cell array of strings input fixed
  • DOCSTRING macro does not recognize matlab.lang.makeValidName fixed
  • Change of a togglebutton uicontrol's value not reflected graphically fixed
  • Global variable in a MEX file in progress
  • warning: popupmenu value not within valid display range fixed
  • Speed issue with uicontrols in progress
  • gcbf and HandleVisibility property in progress
  • Add support for more types for image's cdata in progress
  • Binary input image for edge in progress
  • colorbar properties need listeners to invoke actions in progress
  • Implementation of lightangle in progress

Undecided yet[edit]

  • mkoctfile's option to define output file name is "-o" or "--output" while mex's option is "-output". If used, no file extension ('.mex') is appended.
  • computer.m returns different strings than on MATLAB (PCWIN, GLNX86, PCWIN64, GLNXA64, MACI64), e.g. x86_64-unknown-linux-gnu.
  • load.m and save.m automatically add a .mat file extension if not provided with MATLAB (Octave doesn't).

Miscellaneous[edit]

  • exist('OCTAVE_VERSION','builtin') can be used to detect if running in Octave or MATLAB.