GNU Octave Version 5

Summary of important user-visible changes

February 23, 2019

News for version  9   8   7   6   5   4.4   4.2   4   3.8   3.6   3.4   3.2   3   2   1   (Release History)

General improvements

  • The Octave plotting system now supports high resolution screens, i.e., those with greater than 96 DPI which are referred to as HiDPI/Retina monitors.

  • Unicode character support for files and folders in Windows.

  • A new core function movfun will apply a function to a sliding window of arbitrary size on a dataset and accumulate the results. Many common cases have been implemented using the naming scheme movXXX where XXX is the function that will be applied. For example, the moving average over a dataset is movmean. New moving window functions:

    movfun movslice movmad movmax movmean movmedian movmin movprod movstd movsum movvar

  • The fsolve function has been tweaked to use larger step sizes when calculating the Jacobian of a function with finite differences. This leads to faster convergence.

  • The ranks function has been recoded for performance and is now 25X faster. In addition, it now supports a third argument that specifies how to resolve the ranking of tie values.

  • The function randi has been recoded to produce an unbiased (all results are equally likely) sample of integers. This may produce different results in existing code. If it is necessary to reproduce the exact random integer sequence as in previous versions use

    ri = imin + floor ((imax - imin + 1) * rand ());

  • The function isdefinite now returns true or false rather than -1, 0, or 1. To test for a positive semi-definite matrix (old output of 0) check whether the following two conditions hold:

    isdefinite (A) => 0 and isdefinite (A + 5*TOL, TOL) => 1

  • The intmax, intmin, and flintmax functions now accept a variable as input. Existing code to query the range of an existing variable can be simplified by removing the call to class that was previously required. For example defining the variable x = int8 (3) in the workspace, calls like

    range = [ intmin(class(x)), intmax(class(x)) ]

    can in Octave 5 be simplified to range = [ intmin(x), intmax(x) ].

  • The path handling functions no longer perform variable or brace expansion on path elements and Octave’s load-path is no longer subject to these expansions.

  • A new printing device is available, "-ddumb", which produces ASCII art for plots. This device is only available with the gnuplot toolkit.

Dependencies

  • The GUI requires Qt libraries. The minimum Qt4 version supported is Qt4.8. Qt5 of any version is preferred.

  • The OSMesa library is no longer used. To print invisible figures when using OpenGL graphics, the Qt QOFFSCREENSURFACE feature must be available and you must use the qt graphics toolkit.

  • The FFTW library is now required to perform FFT calculations. The FFTPACK sources have been removed from Octave.

Matlab compatibility

  • The determination of an object’s dimensions, size, and shape by the functions ndims, rows, columns, isscalar, isvector, isrow, iscolumn, ismatrix, and issquare now fully depends on the function size. Thus, any user-defined object can ensure correct treatment by the aforementioned functions by properly overloading the size function.

  • The functions issymmetric and ishermitian accept an option "nonskew" or "skew" to calculate the symmetric or skew-symmetric property of a matrix. Performance has also been increased.

  • The issorted function now uses a direction option of "ascend" or "descend". Change all uses of "ascending" and "descending" in existing code to the new options.

  • The strncmp and strncmpi functions now return true if the two input strings match, even though the number of characters specified by n exceeds the string length. For Example:

    strncmp ("abc", "abc", 100)

    returns true in Octave 5 and false in older versions of Octave.

  • The str2func function no longer accepts a second "global" argument. This argument was typically used to allow functions that accept function names as arguments to avoid conflicts with subfunctions or nested functions. Instead, it’s best to avoid this situation entirely and require users to pass function handles rather than function names.

  • Using clear with no arguments now removes only local variables from the current workspace. Global variables will no longer be visible, but they continue to exist in the global workspace and possibly other workspaces such as the base workspace.

Nonlinear Equations

Several default solver options have been changed to be Matlab compatible. This may result in existing code producing different results.

  • fsolve

    Option New Default Old Default
    FinDiffType "forward" "central"
    MaxFunEvals 100*length(x0) Inf
    TolFun 1e-6 1e-7
    TolX 1e-6 1e-7
    Updating "off" "on"
  • fminsearch

    Option New Default Old Default
    TolFun 1e-7 1e-4
  • fminbnd

    Option New Default Old Default
    MaxFunEvals 500 Inf
    MaxIter 500 Inf
    TolX 1e-4 1e-8
  • fminunc

    Option New Default Old Default
    FinDiffType "forward" "central"
    MaxFunEvals 100*length(x0) Inf
    TolX 1e-6 1e-7
    TolFun 1e-6 1e-7

Graphic objects

  • Figure graphic objects have a new property "Number" which is read-only and will return the handle (number) of the figure. However, if the property "IntegerHandle" has been set to "off" then the property will return an empty matrix [].

  • Patch and surface graphic objects now use the "FaceNormals" property for flat lighting.

  • "FaceNormals" and "VertexNormals" for patch and surface graphic objects are now calculated only when necessary to improve graphics performance. In order for any normals to be calculated the "FaceLighting" property must be set to "flat" (FaceNormals) or "gouraud" (VertexNormals), and a light object must be present in the axes.

  • The "Margin" property of text-objects has a new default of 3 rather than 2.

  • Printing to raster formats (bitmaps like PNG or JPEG) now uses an OpenGL-based method by default. The print options "-opengl" (raster) and "-painters" (vector) have been added (“qt” toolkit only). The figure property "renderer" specifies which renderer to use. When the property "renderermode" is "auto" Octave will select "-opengl" for a raster output format and "-painters" for a vector output format.

  • A new print option "-RGBImage" has been added which captures the pixels of a figure as an image. This is similar to screen capture tools, except that print formatting options can be used to, for example, change the resolution or display the image in black and white.

  • Two new print options for page-based formats (PDF, PostScript) have been added. The "-fillpage" option will stretch the plot to occupy the entire page with 0.25 inch margins all around. The "-bestfit" option will expand the plot to take up as much room as possible on the page without distorting the original aspect ratio of the plot.

  • Printing using the "-dtiff" output device will now create compressed images using LZW compression. To produce uncompressed images use the "-dtiffn" device.

Legacy functions

The following functions have been declared legacy functions which means they are obsolete and should not be used in any new code. Unlike deprecated functions, however, their removal from Octave has not yet been scheduled.

Function Replacement
findstr strfind
flipdim flip
isdir isfolder or dir_in_loadpath
isequalwithequalnans isequaln
isstr ischar
setstr char
strmatch strncmp or strcmp
strread textscan
textread textscan

Deprecated functions and properties

The following functions and graphics properties have been deprecated in Octave 5 and will be removed from Octave 7 (or whatever version is the second major release after 5):

  • Functions

    Function Replacement
    output_max_field_width output_precision
    is_keyword iskeyword
  • Graphics properties

    Object Property Value
    text fontangle "oblique"
    uibuttongroup fontangle "oblique"
    uicontrol fontangle "oblique"
    uipanel fontangle "oblique"
    uitable fontangle "oblique"
  • Specifying legend position with a numeric argument is deprecated. Use a string argument instead.

  • The environment variable used by mkoctfile for linker flags is now LDFLAGS rather than LFLAGS. LFLAGS is deprecated, and a warning is emitted if is used, but it will continue to work.

Removed functions and properties

The following functions and properties were deprecated in Octave 4.2 and have been removed from Octave 5.

  • Functions

    Function Replacement
    bitmax flintmax
    mahalanobis mahal in Octave Forge statistics pkg
    md5sum hash
    octave_config_info __octave_config_info__
    onenormest normest1
    sleep pause
    usleep pause
    wavread audioread
    wavwrite audiowrite
  • Properties

    Object Property Value
    axes xaxislocation "zero"
      yaxislocation "zero"
    hggroup erasemode  
    image erasemode  
    line erasemode  
    patch erasemode  
    patch normalmode  
    surface erasemode  
    surface normalmode  
    text erasemode  

Alphabetical list of new functions added in Octave 5

  • clearvars
  • isfile
  • isfolder
  • matlab.lang.makeUniqueStrings
  • matlab.lang.makeValidName
  • movegui
  • movfun
  • movie
  • movmad
  • movmax
  • movmean
  • movmedian
  • movmin
  • movprod
  • movslice
  • movstd
  • movsum
  • movvar
  • openfig
  • ordeig
  • savefig
  • uitable