GNU Octave Version 4.2

Summary of important user-visible changes

November 13, 2016

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)

 ** The parser has been extended to accept, but ignore, underscore
    characters in numbers.  This facilitates writing more legible code
    by using '_' as a thousands separator or to group nibbles into bytes
    in hex constants.

    Examples: 1_000_000 == 1e6  or  0xDE_AD_BE_EF

 ** The parser has been extended to understand binary numbers which
    begin with the prefix '0b' or '0B'.  The value returned is Octave's
    default numeric class of double, not at unsigned integer class.
    Therefore numbers greater than flintmax, i.e., 2^53, will lose some

    Examples: 0b101 == 5  or  0B1100_0001 == 0xC1

 ** gnuplot 4.4 is now the minimum version supported by Octave.

 ** The default set of colors used to plot lines has been updated to be
    compatible with Matlab's new default color scheme.  The line plot
    color scheme can be set with the axes property "ColorOrder".

 ** The default colormap is now set to "viridis" which is also the
    default colormap in matplotlib.  This new colormap fixes some of the
    main issues with the old default colormap "jet" such as its bad
    "luminance profile" and is also more similar to Matlab's new default
    colormap "parula".

 ** The colormap function no longer supports the input argument "list"
    to show built-in colormaps.  Use "help colormap" to find the
    built-in colormaps.

 ** The graphics command "hold on" now ensures that each new plot added
    to an existing plot has a different color or linestyle according to
    the "ColorOrder" and/or "LineStyleOrder" properties.  This is
    equivalent to the old command "hold all" and was made for Matlab
    compatibility.  Existing code *may* produce differently colored
    plots if it did not specify the color for a plot and relied on each
    new plot having the default first color in the "ColorOrder"

 ** When starting, Octave now looks in the function path for a file
    startup.m and executes any commands found there.  This change was
    made to accommodate Matlab users.  Octave has it's own configuration
    system based on the file .octaverc which is preferred.

 ** Octal ('\NNN') and hex ('\xNN') escape sequences in single quoted
    strings are now interpreted by the function do_string_escapes().
    The *printf family of functions now supports octal and hex escape
    sequences in single-quoted strings for Matlab compatibility.

 ** Special octal and hex escape sequences for the pattern and
    replacement strings in regular expressions are now interpreted for
    Matlab compatibility.

    octal: '\oNNN' or '\o{NNN}'
    hex  : '\xNN'  or '\x{NN}'

 ** Unknown escape sequences in the replacement string for regexprep are
    now substituted with their unescaped version and no warning is
    emitted.  This change was made for Matlab compatibility.

    Example: regexprep ('a', 'a', 'x\yz')
             => 'xyz'

 ** mkfifo now interprets the MODE argument as an octal, not decimal,
    integer.  This is consistent with the equivalent shell command.

 ** linspace now returns an empty matrix if the number of requested
    points is 0 or a negative number.  This change was made to be
    compatible with Matlab releases newer than 2011.  In addition,
    Octave no longer supports matrix inputs for A or B.

 ** The cov function now returns the complex conjugate of the result
    from previous versions of Octave.  This change was made for
    compatibility with Matlab.

 ** condest now works with a normest1 compatible syntax.

 ** The griddata function no longer plots the interpolated mesh if no
    output argument is requested, instead the vector or array of
    interpolated values is always returned for Matlab compatibility.

 ** The new function "light" and the corresponding graphics object
    provide light and shadow effects for patch and surface objects.

 ** The surfnorm function now returns unnormalized (magnitude != 1)
    normal vectors for compatibility with Matlab.

 ** The normal vectors returned from isonormals have been reversed to
    point towards smaller values for compatibility with Matlab.

 ** The quadl function now uses an absolute, rather than relative,
    tolerance for Matlab compatibility.  The default tolerance is 1e-6
    which may result in lower precision results than previous versions
    of Octave which used eps as the relative tolerance.  The quadl
    function has also been extended to return a second output with the
    total number of function evaluations.

 ** The textscan function is now built-in and is much faster and much
    more Matlab-compatible than the previous m-file version.

 ** Dialog boxes--errordlg, helpdlg, inputdlg, listdlg, msgbox,
    questdlg, and warndlg--now exclusively use Qt for rendering.
    Java based versions have been removed.

 ** The axes properties "TitleFontSizeMultiplier" and "TitleFontWeight"
    are now implemented which control the default appearance of text
    created with title().
    The axes property "LabelFontSizeMultiplier" is now implemented
    which controls the default appearance of text created with
    xlabel(), ylabel(), or zlabel().

 ** The graphics property "box" for axes now defaults to "off".
    To obtain equivalent plots to previous versions of Octave use
      set (0, "DefaultAxesBox", "on");
    in your .octaverc file.

 ** The graphics property "boxstyle" has been implemented.  The default
    is "back" which draws only the back planes in a 3-D view.  If the
    option is "full" then all planes are drawn.

 ** The graphics property "erasemode" has been hidden, and will
    eventually be removed.  This property has also been removed
    from Matlab, and was never implemented in Octave.

 ** The graphics property "graphicssmoothing" for figures now controls
    whether anti-aliasing will be used for lines.  The default is "on".

 ** The value "zero" for the axes properties "xaxislocation" and
    "yaxislocation" has been deprecated and will be removed from
    Octave 4.6.  Use "origin" instead.

 ** The publish function allows easy publication of Octave script files
    in HTML or other formats, including figures and output created by
    this script.  It comes with its counterpart grabcode, which lets one
    literally grab the HTML published code from a remote website, for

 ** The value of the MEX variable TrapFlag now defaults to 0, which will
    cause Octave to abort execution of a MEX file and return to the
    prompt if an error is encountered in mexCallMATLAB.

 ** The MEX API now includes the function mexCallMATLABWithTrap.  This
    function will not abort if an error occurs during mexCallMATLAB, but
    instead will return execution to the MEX function for error

 ** The MEX API functions for input validation that begin with "mxIs"
    (e.g., mxIsDouble, mxIsEmpty, etc.) now return type bool rather than
    type int.

 ** The functions mxAssert and mxAssertS for checking assertions have
    been added.  In order to avoid a performance penalty they are only
    compiled in to debug versions of a MEX file, i.e., that are produced
    when the '-g' option is given to mex or mkoctfile.

 ** Other new MEX API functions include mexEvalStringWithTrap,
    mxIsScalar, mxCreateUninitNumericArray, mxCreateUninitNumericMatrix.

 ** Other new functions added in 4.2:


 ** Deprecated functions.

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

      Function             | Replacement
      bitmax               | flintmax
      mahalanobis          | mahal in Octave-Forge statistics pkg
      md5sum               | hash
      octve_config_info    | __octave_config_info__
      onenormest           | normest1
      sleep                | pause
      usleep               | pause
      wavread              | audioread
      wavwrite             | audiowrite

 ** The following functions were deprecated in Octave 3.8 and have been
    removed from Octave 4.2.

      default_save_options    java_new
      gen_doc_cache           java_unsigned_conversion
      interp1q                javafields
      isequalwithequalnans    javamethods
      java_convert_matrix     re_read_readline_init_file
      java_debug              read_readline_init_file
      java_invoke             saving_history

 ** The global error_state variable in Octave's C++ API has been
    deprecated and will be removed in a future version.  Now the error
    and print_usage functions throw an exception
    (octave::execution_exception) after displaying the error message.
    This makes the error and print_usage functions in C++ work more like
    the corresponding functions in the scripting language.

 ** The default error handlers in liboctave have been updated to use
    exceptions.  After displaying an error message they no longer return
    control to the calling program.  The error handler function can be
    customized through the global variables
    "current_liboctave_error_handler" and
    "current_liboctave_error_with_id_handler".  If a programmer has
    installed their own custom error handling routines when directly
    linking with liboctave then these must be updated to throw an
    exception and not return to the calling program.

 ** The system for common errors and warnings has been renamed from
    gripe_XXX to either err_XXX if error is called or warn_XXX if
    warning is called.  The gripe_XXX functions are deprecated and will
    be removed in version 4.6.

 ** New configure option, --enable-address-sanitizer-flags, to build
    Octave with memory allocator checks (similar to those in valgrind)
    built in.