Octave Changelog

What's new in Octave 9.1.0

Mar 18, 2024
  • Bugfixes to whos -file, urlread, mat2cell, set, savepath, loadpath, griddata, and the general interpreter stack-handling.
  • Better input validation for sparse, speye.
  • Memory usage reduced for movfun and movslice.
  • Memory usage reduced when saving to file, preventing OOM and data loss.
  • Memory usage improved when plotting grid tick marks.
  • Memory management made more robust in the GUI code and with several GUI components (variable editor, doc browser, etc).
  • Text encoding for non-UTF-8 generally made more robust. File editor now lists available encodings.
  • Octave on Windows now supports directory names and path names with non-ASCII characters (other platforms had it already for years). Windows paths now also allow relative paths on different drives.
  • Several race conditions removed in signal handler.
  • Better compatibility when linking to libc++.
  • Performance and stability improvements: avoid unnecessary string construction, use static casts instead of dynamic casts where possible, eliminate various isolated crash conditions.

New in Octave 8.3.0 (Aug 12, 2023)

  • Undo_string_escapes: Return '' for NUL byte input (bug #64051).
  • Stop excessive memory usage for minor grid ticks (bug #64017).
  • Include needed headers in installed .cc files (bug #63922).
  • Fix floating point exception when sparse array reshaped to 0x0 (bug #64080).
  • unicode2native: Fix conversion to UTF-16 (bug #64139).
  • memory: Fix execution on Cygwin.
  • uniconv-wrappers: Avoid freeing uninitialized pointer (bug #64182).
  • lo-regexp.cc: Only include PCRE2/PCRE headers if feature test succeeded (bug #64172).
  • Fix segfault when saveobj() used with old-style class files (bug #64220).
  • Fix restoring breakpoints from dbstatus breakpoint structure (bug #64271).
  • colorbar.m: Fix undefined variable d (bug #64287).
  • Reset all axes properties except 'Units' and 'Position' with cla ('reset').
  • unicode2native.m: Restore support for one input parameter (bug #64331).
  • native2unicode, unicode2native: Support empty second argument (bug #64331).
  • fullfile.m: Return empty cell for input with empty cell (bug #64377).
  • audioplayer.m: Emit error if input data Y is empty (bug #64379).
  • Remove obsolete callback constructor code for @audioplayer and @audiorecorder (bug #64379).
  • Avoid false detection of “non-real pivot” in ichol() (bug #63785).
  • Fix building against SuiteSparse 7.1.0 when SPQR is disabled (bug #64446).
  • ellipsoid.m: Avoid returning geometry data unless it is explicitly requested to avoid overwriting ans.
  • subsasgn: Avoid panic on invalid field names (bug #64213).
  • lex.ll: Remove $ as a valid character for identifiers.
  • fileparts.m: Allow for relative path on different drive on Windows (bug #64462).
  • datevec.m: Add some ISO 8601 conform formats (patch #9964).

New in Octave 8.2.0 (Apr 17, 2023)

  • Improvements and fixes:
  • fopen: Use “UTF-8” as default encoding for fopen (bug #63930).
  • fopen, unicode2native: Fix converting the encoding of short char arrays with invalid UTF-8 (bug #63930).
  • fopen: Try to gather complete UTF-8 surrogates when converting encoding (bug #63930).
  • fopen: Do not convert encoding for file streams with libc++ (bug #63930).
  • pr-output.cc: Fix output for format native-bit (bug #63940).
  • Fix evaluation of & and | expressions in conditional contexts (bug #63935).
  • Avoid clang warning about very unlikely buffer overflow.
  • mpoles.m: Overhaul function and use absolute tolerance for zero poles (bug #63937).
  • perms.m: Change "unique" output order to reverse lexicographic to match non-unique order (bug #63962).
  • Remove trailing 'r' from curl dir list (bug #63851).
  • Fix display of scalar complex variables with mixed Inf/NaN and floating point values (bug #63961).
  • Don’t use encoding facet when writing bytes to stream (bug #63931).
  • GUI:
  • Speedup loading and saving preferences dialog (bug #63909).
  • Build system / Tests:
  • inpolygon.m: Fix demo code (bug #63865).
  • if.tst: New test for (bug #63935).
  • acinclude.m4: Correct typo in #define PCRE2_CODE_UNIT_WIDTH.
  • lu: Add self-test with complex valued input.
  • Disable visibility flags by default (bug #61855, bug #63916).
  • Check whether using STL from LLVM or Apple (bug #63930).
  • Documentation:
  • Improve documentation for linspace and logspace functions.
  • Correct and improve documentation for sparse() function.

New in Octave 8.1.0 (Mar 12, 2023)

  • General improvements:
  • Octave’s libraries are now built using symbol visibility by default. That means that fewer symbols are exported from these libraries. Configure with --disable-lib-visibility-flags to export all symbols (as in previous versions).
  • Filter is now 5X faster, which also speeds up deconv, fftfilt and arma_rnd by the same amount.
  • Integral can now output a second argument passing the error measurement used by the underlying integrator.
  • Perms now accepts a second argument “unique” to return only unique permutations for inputs with repeated elements. It is faster and takes less memory to call perms ('aaaabbbbcccc', "unique") than to call unique (perms ('aaaabbbbcccc'), "rows").
  • Quadgk can now accept the ArrayValued input parameter to handle array-valued input functions.
  • Delaunayn now has consistent trivial simplex checking and removal for all input dimensions, simplex checking 3D inputs is now vectorized, and >3D simplex checking performance has been improved. Simplexes points are now ordered so they will all have positive outward normal vectors. Input type checking has also been added for improved error handling.
  • Factor now factorizes all 64-bit integers in roughly the same time. Previously, the product of two large primes took much longer to factorize than highly composite inputs.
  • Refine option is now implemented in functions ode45, ode23, and ode23s.
  • Octave is now compatible with PCRE2 (UTF-8). PCRE2 is preferred over PCRE if both are installed. Configure with --without-pcre2 if you prefer Octave to use PCRE in this case.
  • mean now internally processes data as type double to reduce liklihood of hitting overflow or precision limits with other types
  • Graphical User Interface:
  • The GUI has a dark style and several new icons in toolbars for better visibility and higher contrast.
  • A new terminal widget has been added for the GUI. It is still experimental and is disabled by default. It can be enabled with the command line parameter --experimental-terminal-widget.
  • More fonts for the documentation browser are included.
  • Graphics backend:
  • When printing, the option -svgconvert is now the default. If you want to use the more limited EPS-based tool chain (the former default)—e.g., if you encounter inaccurate image rendering—you can pass the -nosvgconvert option to the print function.
  • Additional properties have been added to the figure graphics object:
  • "innerposition" (equivalent to "position")
  • "windowstate" (not yet implemented)
  • Legend now features a new property "itemhitfcn", allowing the execution of a callback function when a legend item is clicked.
  • Matlab compatibility:
  • Inline functions now support all Matlab methods. The performance of inline functions has also been improved.
  • Sub2ind now supports index values outside of the size specified by the subscripts.
  • Cylinder now accepts a scalar for the radius argument.
  • Clock now has an optional second output ISDST which indicates if Daylight Savings Time is in effect for the system’s time zone.
  • Print now accepts option -image to specify the “opengl” renderer and -vector to specify the “painters” renderer.
  • Format now accepts the option “default”, which is equivalent to calling format without any options to reset the default state.
  • Quadgk now stops iterating when error <= tolerance while the previous condition was error < tolerance.
  • Mean now accepts vector dimensions and options to handle NaN values. The option "a" (arithmetic mean), "g" (geometric mean), and "h" (harmonic mean) are no longer accepted, only the arithmetic mean is computed. For the geometric and harmonic mean, please use respective functions geomean and harmmean from the Octave Statistics package.
  • Var and std now optionally output a second argument containing the mean or weighted mean.
  • Integral can now accept the ‘ArrayValued’ option in combination with ‘RelTol’ and ‘WayPoints’.
  • File system operations that remove files (e.g., unlink or rmdir) now also remove files that have their read-only file attribute set on Windows.
  • Ode45, ode23, and ode23s have improved results for options Events, OutputFcn, and Refine, along with corrected orientation of struct outputs.
  • Early notice of future breaking changes: Due to many user requests that Octave should have a Matlab-compatible string class, there is work under way to implement a string class that will differ from a vector of characters. In Octave, single-quoted character arrays are currently compatible with Matlab, but double-quoted forms are not. Currently in Octave, both ‘foo’ and “foo” are largely interchangeable, barring certain escape sequence interpretations such as “n” (converted to a single newline character) as opposed to ‘n’ (two separate characters). Matlab’s single-quoted character arrays and double-quoted strings do not process backslash escape sequences, unlike many other languages, and those escape sequences are instead processed by individual functions such as fprintf.
  • Octave’s behavior is likely to change in future as a consequence of implementing Matlab-style string syntax. For example, ‘foo’ will remain a three-element character vector, but “foo” will become a single-element string object. Some backslash escape sequences are likely to differ from their current Octave behavior, but will achieve greater Matlab compatibility. The exact implementation is a work in progress, and may or may not include methods of preserving backward compatibility.
  • What this means for user code: If your code currently relies on double-quoted strings (e.g., “foo”) representing character vectors as opposed to string objects, and if you intend to update to a future version of Octave incorporating the above changes, then consider replacing all double-quoted strings with single-quoted strings in your code over time (e.g., replace “foo” with ‘foo’). Single-quoted strings are expected to retain current behavior. Further, if your code relies on backslash escape sequence interpretation in double-quoted strings (except for special cases like the printf family), that code may need to change as well.
  • Alphabetical list of new functions added in Octave 8:
  • clearAllMemoizedCaches
  • matlab.lang.MemoizedFunction
  • memoize
  • normalize
  • pagectranspose
  • pagetranspose
  • uifigure
  • Bugs:
  • Improved input validation and/or output handling for poly, pinv, patch, fill, fill3, qp, datevec, textscan, sub2ind, qr, airy, regexp, dec2bin, dec2hex, mean, and many others.
  • Improved performance for complex, fftw, delaunayn, isfield, tsearch, sparse matrix exponentiation, other sparse operations, and many others.
  • Overhauled @audiorecorder and @audioplayer classes.

New in Octave 7.1.0 (Apr 8, 2022)

  • General improvements:
  • Many functions in Octave can be called in a command form—no parentheses for invocation and no return argument assignment—or in a functional form—parentheses and ‘=’ for assignment of return values.
  • Calling a user-defined function with too many inputs or outputs is now an error. The interpreter makes this check automatically. If a function uses varargin then the check is skipped for function inputs, and if a function uses varargout then the check is skipped for function outputs. Input validation for functions typically begins with checking that the number of inputs and outputs match expectations. Existing code can be simplified by removing these checks which are now done by the interpreter. Typically, code blocks like the following can simply be deleted.
  • Binary and hexadecimal constants like 0b101 and 0xDEADBEEF now create integers (unsigned by default) with sizes determined from the number of digits present. For example, 0xff creates a uint8 value and 0xDEADBEEF creates a uint64 value. You may also use a suffix of the form u8, u16, u32, u64, s8, s16, s32, or s64 to explicitly specify the data type to use (u or s to indicate unsigned or signed and the number to indicate the integer size).
  • Binary constants are limited to 64 binary digits and hexadecimal constants are limited to 16 hexadecimal digits with no automatic rounding or conversion to floating point values. Note that this may cause problems in existing code. For example, an expression like [0x1; 0x100; 0x10000] will be uint8 (because of the rules of concatenating integers of different sizes) with the larger values truncated (because of the saturation semantics of integer values). To avoid these kinds of problems either: 1) declare the first integer to be of the desired size such as [0x1u32; 0x100; 0x10000], or 2) pad constants in array expressions with leading zeros so that they use the same number of digits for each value such as [0x00_00_01; 0x00_01_00; 0x01_00_00].
  • The colon operator now works for integer (int8, int16, …, uint64) and single data types. However, only double ranges use a memory-efficient storage scheme internally. Other data types are stored as ordinary arrays.
  • The increment and decrement operators ++ and -- must “hug” their corresponding variables. In previous versions of Octave, whitespaces between these operators and the variable they affect were allowed. That is no longer the case.
  • The mldivide function (i.e., the operator) now uses an LU decomposition to solve nearly singular full square matrices. This is Matlab-compatible and yields results which more nearly minimize norm (A*x - b). Previously, Octave computed a minimum-norm solution.
  • The factor function has been overhauled for speed. For large inputs > 1e14, it can be up to 10,000 times faster.
  • The isprime function uses a new primality testing algorithm that is up to 50,000 times faster for inputs > 1e14.
  • The betainc function now calculates an exact output for the important special cases where a or b are 1.
  • The whos function now displays an additional attribute ‘s’ when the variable is a sparse type.
  • As part of GSoC 2020, Abdallah K. Elshamy implemented the jsondecode and jsonencode functions to read and write JSON data.
  • As part of GSoC 2021, Abdallah K. Elshamy implemented the jupyter_notebook classdef class. This class supports running and filling Jupyter Notebooks using the Octave language kernel from Octave itself. Making the evaluation of long-running Jupyter Notebooks on a computing server without permanent browser connection possible.
  • By default, the history file is now located at $DATA/octave/history, where $DATA is a platform dependent location for (roaming) user data files (e.g., ${XDG_DATA_HOME} or, if that is not set, ~/.local/share on Unix-like operating systems or %APPDATA% on Windows).
  • For Octave on Windows OS, the minimum required version of the Windows API is now 6.1 (Windows 7 or newer).
  • The non-re-entrant version of the QHull library “libqhull” was deprecated upstream. Octave now (optionally) requires the re-entrant version of that library “libqhull_r” instead.
  • Octave’s build system no longer appends “++” to the end of the “magick++” library name (set with the --with-magick= configure flag). The real name of the “magick++” library (including any potentially trailing “++”) needs to be set in that option now.
  • The pkg update command now accepts options that are passed to pkg install for each updated package. Specifying -local or -global will restrict update checks to local or global installed packages, respectively.
  • Graphical User Interface:
  • The graphical user interface is now available in Hungarian and Turkish.
  • In debug mode, symbol values are now shown in tooltips when hovering variables in the editor panel.
  • The “Disable global shortcuts when Command Window has focus” GUI preference under the Shortcuts tab is now disabled by default. This option disables keyboard shortcuts to avoid interference with readline key strokes in the Command Window. Unlike versions prior to Octave 7, this preference now also affects the Ctrl-C/V shortcuts for copy/paste.
  • In command line mode, i.e. when Octave is started without the --gui option, the doc command now opens the GUI documentation browser as a standalone widget, provided that Octave was compiled with GUI support.
  • Graphics backend:
  • Support for Qt4 for both graphics and the GUI has been removed.
  • If a working LaTeX tool chain is found on the path, including latex, dvipng, and dvisvgm binaries, then text strings can now be rendered properly when using the "latex" value for the text objects’ "interpreter" property and axes objects’ "ticklabelinterpreter". Type doc "latex interpreter" for further info.
  • The "Marker" property for plot objects now accepts | which draws a vertical line or _ which draws a horizontal line.
  • The FMT format argument for plot commands now accepts long forms for color names which may be more understandable than the existing one-letter codes. For example, the RGB value [0 0 0] can now be specified by "black" in addition to "k".
  • The color graphics properties, for example "EdgeColor" or "FaceColor", now accept HTML specifications. An HTML specification is a string that begins with the character ‘#’ and is followed by either 3 or 6 hexadecimal digits. For example, magenta which is 100% red and blue values can specified by "#FF00FF" or "#F0F".
  • The additional property "contextmenu" has been added to all graphics objects. It is equivalent to the previously used "uicontextmenu" property which is hidden now.
  • uicontrol objects now fully implement the "Off" and "Inactive" values of the "Enable" property. When the value is "Off", no interaction with the object occurs and the uicontrol changes color (typically to gray) to indicate it is disabled. When the value is "Inactive", the object appears normally (no change in color), but it is not possible to change the value of the object (such as modifying text in an Edit box or clicking on a RadioButton).
  • The "ListBoxTop" property for uicontrol objects has been implemented for set commands.
  • The Title property for print formats such as PDF or SVG is now set to the title displayed on the figure window which contains the plot.
  • Additional properties have been added to the axes graphics object:
  • "alphamap" (not yet implemented)
  • "alphascale" (not yet implemented)
  • "colorscale" (not yet implemented)
  • "fontsizemode" (not yet implemented)
  • "innerposition" (equivalent to "position")
  • "interactions" (not yet implemented)
  • "layout" (not yet implemented)
  • "legend" (not yet implemented)
  • "nextseriesindex" (read-only, used by scatter graphics objects)
  • "positionconstraint" (replacement for "activepositionproperty" which is now a hidden property. No plans for removal.)
  • "toolbar" (not yet implemented)
  • "xaxis" (not yet implemented)
  • "yaxis" (not yet implemented)
  • "zaxis" (not yet implemented)
  • Matlab compatibility:
  • The function griddata now implements the "v4" Biharmonic Spline Interpolation method. In adddition, the function now accepts 3-D inputs by passing the data to griddata3.
  • Coordinate transformation functions cart2sph, sph2cart, cart2pol, and pol2cart now accept either row or column vectors for coordinate inputs. A single coordinate matrix with one variable per column can still be used as function input, but a single output variable will now contain just the first output coordinate, and will no longer return the full output coordinate matrix. Output size matches the size of input vectors, or in the case of an input matrix will be column vectors with rows corresponding to the input coordinate matrix.
  • The function dec2bin and dec2hex now support negative numbers.
  • The function factor now supports uint64 inputs larger than flintmax.
  • The function primes now supports char inputs.
  • The functions quantile and prctile now permit operating on dimensions greater than ndims (x).
  • The function iqr now uses Matlab compatible interpolation for quantile values. The dimension input now allows a vector, “all”, and dimensions greater than ndims (x). The function also handles Inf and NaN input values in a Matlab-compatible manner.
  • The function importdata now produces more compatible results when the file contains a 2-D text matrix.
  • The file functions copyfile, mkdir, movefile, rmdir now return a logical value (true/false) rather than a numeric value (1/0).
  • uimenu now accepts property "Text" which is identical to "Label". Matlab recommends using "Text" in new code, although there is no announced date for deprecating "Label".
  • The functions scatter and scatter3 now return a handle to a scatter graphics object. For compatibility, they return an hggroup of patch graphics objects when the "gnuplot" graphics toolkit is used. In previous versions of Octave, these functions returned an hggroup of patch graphics objects for all graphics toolkits.
  • The functions bar and barh now handle stacked negative bar values in a Matlab-compatible manner. Negative values now stack below the zero axis independently of a positive value bars in the same stack. Previously the negative bars could overlap positive bars depending on drawing order.
  • The functions bar and barh now use colors from the "ColorOrder" axes property rather than the "Colormap" figure property unless one of the histogram options (@qcode{“hist”}, @qcode{“histc”} was specified.
  • The function saveas now defaults to saving in Octave figure format (.ofig) rather than PDF (.pdf).
  • A new warning ID ("Octave:unimplemented-matlab-functionality") has been added which prints a warning when Octave’s parser recognizes valid Matlab code, but for which Octave does not yet implement the functionality. By default, this warning is enabled.
  • When Octave is started with the --traditional option for maximum compatibility the print_struct_array_contents internal variable is set to true.
  • The function repelem now produces a row vector output when the input is a scalar.
  • The functions var and std now accept a weight vector as input and compute the weigthed variance. Dimension input now allows a vector and the keyword “all”.

New in Octave 6.4.0 (Nov 3, 2021)

  • Improvements and fixes:
  • Reduce memory usage in BISTs for copyobj, hgsave (bug #57591).
  • hgsave.m, copyobj.m: Use 'qt' graphics toolkit in BISTs.
  • main.cc: Use getopt to parse command line arguments (bug #60886).
  • main.cc: Remove invalid case (bug #60886).
  • Disable getopt error reporting in wrapper program (bug #60886).
  • interp1.m: Don’t interpret later numeric input as xi (bug #60967).
  • pkg: Improve similar package name suggestion (bug #61067).
  • Store parent name in function object when caching parents in scope (bug #61105).
  • Avoid internal error and segfault with eval and scripts (bug #61191).
  • rmpath: Prevent removing the current directory from the load path (bug #61216).
  • GUI:
  • Fix missing interpreter event in octave-scintilla.
  • Fix opening a file in a custom editor (bug #60990).
  • Documentation:
  • Improve docstring for disable_diagonal_matrix, disable_diagonal_matrix, and disable_range (patch #10089).
  • cbrt: Clarify that function errors for non-real input.
  • dsearchn.m: Added optional distance output description (bug #61156).
  • Add Hungarian translation for project description files.
  • Document fsolve output “info” -2 (bug #61310).
  • Build system:
  • Correct error message for incompatible CXSparse (bug #61385).

New in Octave 6.3.0 (Jul 14, 2021)

  • Important notice:
  • This bug fix release breaks ABI compatibility with Octave 6.2.0. Re-build binaries (like .oct or .mex files) when updating to this version.
  • Improvements and fixes:
  • ls-hdf5.cc: Avoid throwing inside HDF5 function (bug #60081).
  • ls-hdf5.cc: Handle non-zero terminated type strings (bug #60081).
  • Fix occasional segfault in symbfact (bug #60101).
  • fsolve.m: Fix undefined output error when using Output function (bug #60144).
  • Avoid ambiguous call to pow (bug #60169).
  • Fix context link when creating handle to nested function.
  • print.m: Warn when figure is too large to be printed to output page (bug #60236).
  • Defer clearing function vars until stack frame is deleted (bug #60137).
  • Avoid memory leaks when returning handles to nested functions.
  • Hold references to closure frames in anon functions if needed (bug #60237).
  • eigs: Prevent possible segmentation fault at exit (bug #60311).
  • Issue warning when gnuplot graphics toolkit is initialized.
  • mpoles.m: Fix detection of pole multiplicity (bug #60384).
  • Perform shutdown actions in interpreter destructor (bug #60334).
  • qz.cc: Return correct number of eigenvalues (bug #60357).
  • qz.cc: Let test pass with LAPACK 3.9.1 and earlier versions (bug #60357).
  • pkg.m: Use default prefixes unless otherwise set previously (bug #60472).
  • betaincinv.m: Correctly handle small inputs (bug #60528).
  • betaincinv.m: Correctly handle inputs very close to 1.0 (bug #60528).
  • unistd-wrappers.c: Allocate sufficient memory for new_argv (bug #60535).
  • Mark system functions correctly if OCTAVE_HOME is non-canonical (bug #60554).
  • Mark compiled system functions correctly if OCTAVE_HOME is non-canonical (bug #60554).
  • Return proper number of stack frames for dbstack (N) call (bug #60531).
  • Avoid ambiguous match of overloaded function (bug #60531).
  • print: Fix error when "px" word is present in a figure (bug #60641).
  • logm.m: Fix check for real negative values in complex vector (bug #60738).
  • hist.m: Improve handling and docstring for third parameter “norm” (bug #60783).
  • logm.m: Allow tolerance in check for real negative values in complex vector (bug #60738).
  • expm.m, logm.m: Use function isdiag to detect if input is a diagonal matrix (bug #60738).
  • Fix scoping issue for handles to sibling nested functions (bug #60845).
  • ls-mat5.cc: Avoid integer overflow in calculation of buffer size for zlib (bug #55427).
  • Avoid crash with dbquit when executing command in terminal from GUI (bug #60813).
  • GUI:
  • Fix calling external editor (bug #60198).
  • Fix missing file suffix .m when saving a new script (bug #60214).
  • Do not run files that are not saved as Octave files (bug #60214).
  • Fix confirm overwrite for native editor file “save as” dialogs (bug #60214).
  • Fix crash when GUI tries to restore missing previous Octave dir (bug #60255).
  • Fix restoring the horizontal position of docked GUI widgets (bug #59426).
  • Prevent floating widgets from re-opening after restart (bug #60279).
  • Avoid crash in GUI for rmdir("") (bug #60473).
  • Fix EOL mode when saving files under new names (bug #60585).
  • Fix auto indentation of switch-structure in GUI editor (bug #60649).
  • Avoid crash when closing GUI with open editor tabs (bug #60500).
  • octave-qscintilla.cc (contextmenu_run): Fix keyboard command handling.
  • Build system / Tests:
  • build: Check for stropts.h (bug #60163).
  • build: Make relocation of dependencies with Octave optional (bug #60413).
  • build: Set necessary flags to allow execution on Windows Vista (bug #60746).
  • build: Use correct path to octave binary in build tree on macOS.
  • build: Fix typo in folder to libraries when building .oct or .mex files.
  • build: Set DL_LDFLAGS in the build rules for .oct or .mex files.
  • Declare base_parser destructor virtual.
  • Move top-level REPL from interpreter to evaluator.
  • Fix compilation error with iconv_t on Solaris (bug #60162).
  • lo-array-errwarn.cc: Include <limits> (bug #60470).
  • Use std::size_t and std::ptrdiff_t in C++ code (bug #60471).
  • Use std::size_t in more instances (bug #60471).
  • Fix error if test suite is run before Octave is installed (bug #60554).
  • tests: Relax tolerance for some tests on macOS.
  • logspace.m: Mark tests as known to fail on macOS (bug #55538).
  • hist.m: Use deterministic test (bug #60783).
  • rgb2ind.m: Reduce memory usage and eliminate randomness in test.
  • logm.m: Allow larger tolerance for test on macOS.
  • rgb2ind.m: Suppress output in test.
  • lscov.m: Relax BIST tolerance to pass with OpenBLAS (bug #60552).
  • Documentation:
  • Improve documentation for log2 function (bug #60817).
  • ind2sub: Fix typo in “see also” section of docstring (bug #60842).
  • mrdivide, mldivide: Document that functions might return minimum norm solutions (bug #60839).
  • Improve Differential Equations chapter and example for lsode (bug #57508).
  • Clarify usage of “Depends” keyword in package DESCRIPTION file (bug #60053).
  • Add note that wildcard patterns for save are glob patterns (bug #60157).
  • Change example for Delaunay triangulation to match the generating code (bug #60216).
  • Document single precision issues with OpenGL graphics toolkits (bug #59418).
  • Minor changes to documentation of single precision issues with OpenGL (bug #59418).
  • Expand on documentation for command syntax (bug #60084).
  • isprop.m: Document that function only works on graphics objects in Octave 6.X (bug #60295).
  • Explain how to write dual-purpose executable scripts and Octave functions (bug #60291).
  • Update keyword docstrings (bug #60275).
  • Use Texinfo commands to improve transpose() docstring rendering.
  • betainc.m, betaincinv.m: Correct non-TeX definition of beta incomplete integral.
  • Grammarcheck documentation ahead of 6.3 release.
  • Spellcheck documentation ahead of 6.3 release.

New in Octave 6.2.0 (Feb 21, 2021)

  • Improvements:
  • bicgstab.m, cgs.m: Fix typo in "iter_min" variable name (bug #60071).
  • Compute with NA correctly on MIPS architecture (bug #59830).
  • Fix lookup of "caller" stack frame (bug #59847).
  • Also wait on main_thread after interpreter shuts down (bug #56952).
  • Fix symbol lookup issue with anonymous functions (bug #55989).
  • Line buffer input in terminal_reader class.
  • qr: Error for dense A and B with three output arguments (bug #58944).
  • strmatch.m: Always return column vector for Matlab compatibility (bug #59917)
  • Avoid crash when evalin global variables into existence in script (bug #59937)
  • Avoid crash on null statement list (bug #59938).
  • Fix ignored output from user function in left side of assignment (bug #59704).
  • Temporarily set lvalue list to null (bug #59704).
  • fminbnd.m: do not ignore "OutputFcn" (bug #59901).
  • load-path.cc: Reduce number of times "canonicalize_file_name" is called (bug #59711).
  • interpn.m: Use size_equal for 10X speedup in cset 067b663529bb (bug #59856).
  • interpn.m: Fix check for scattered point coordinates (bug #59856).
  • Avoid YYUSE in Octave parser files (see bug #59806).
  • struct2hdl.m: Set "units" property early.
  • load-path.cc: Avoid copying string for loop variable.
  • pcg.m: Return correct FLAG and correct RELRES output (bug #59776).
  • Use static keyword on regexp pattern in file_stat (bug #59706).
  • stat: Improve regular expression for UNC roots on Windows (bug #59706).
  • stat: Use "make_absolute" instead of "canonicalize_file_name" on Windows (bug #59706).
  • Improve class_simple function handle function lookup (bug #59661).
  • hdl2struct.m: store hidden text properties (bug #57241).
  • Mark script created with commands from history as modified.
  • replem.m: Fix operations with sparse matrices (bug #59705).
  • ode_event_handler.m: Fix mishandling of event edge types and multiple events (bug #59709).
  • Increase size of dynamic variable new_argv by 1 to avoid indexing out of array.
  • Fix incorrect results for set functions with "legacy" option (bug #59708).
  • dir.m: Return folder (not including file) in field "folder" (bug #59689).
  • Avoid memory leak with function handles (bug #59659).
  • Avoid dispatch error if method argument is a function handle (bug #59617).
  • Avoid crash due to accessing first element of empty list (bug #59656).
  • Don’t propagate prevailing isargout info through mexCallMATLAB (bug #59597).
  • Show original error when failing to create a graphics object (bug #59620).
  • Fix regression with superclass lookup in classdef constructors (bug #59602).
  • Allow Octave class execution_exception to catch std::exception objects (bug #59592).
  • GUI:
  • Fix restoring editor session after having closed all tabs (bug #60051).
  • Maybe convert TAB to SPC in GUI terminal pasted text (bug #59916).
  • Make bracketed paste mode work in GUI terminal.
  • Fix regression in variable editor when printing without selection.
  • Avoid gui when octave is launched in non-interactive mode (bug #59628).
  • file-editor-tab.cc (dtor): do not delete m_edit_area (bug #59628).
  • Fix error when restoring previous main window layout (bug #59426).
  • Improve default sizes of gui dock widgets.
  • Clean up constructing main window layout of the gui.
  • Fix focus command window after command execution (bug #59609).
  • Check object size before plotting from variable editor (bug #56685).
  • documentation.cc: Include missing header (bug #59553).
  • Build system / Tests:
  • Add default value to OCTAVE_MIPS_NAN configure macro for cross-compiling (bug #59830).
  • tests: Function name should match file name (bug #59704).
  • Avoid build errors with Qt4 (bug #59813).
  • eigs.m: Make tests that depend on CHOLMOD conditional.
  • tests: Make tests that depend on CXSparse conditional.
  • build: Use SPARSE_XCPPFLAGS in CPP_FLAGS for libcorefcn (bug #59806).
  • Add test case for bug #59661.
  • hgsave.m: Allow test to run with qt or gnuplot graphics toolkits (bug #57241).
  • Documentation:
  • embedded.cc: Fix syntax error interpreter shutdown.
  • Update Octave Project Developers copyright for the new year.
  • Use the same comment style for copyright headers in .m files and shell scripts.

New in Octave 6.1.0 (Nov 29, 2020)

  • This major release improves the graphics backend, compatibility with Matlab and contains many new and improved functions. A list of important user-visible changes is available by selecting the Release Notes item in the News menu of the GUI or by typing news at the Octave command prompt.

New in Octave 5.2.0 (May 25, 2020)

  • Improvements:
  • Avoid color changes in MS Windows GUI terminal (bug #57658).
  • Lock amd and symbfact to avoid segmentation fault with SuiteSparse (bug #57435).
  • Fix segfault when calculating patch vertex normals (bug #57353).
  • Fix segfault in constructing patch normals for lighting (bug #57353).
  • mat2str.m: Fix for logical matrix (add transpose).
  • improve file equality check for MS Windows (bug #55161).
  • ismember.m: Fix second return argument when values are complex (bug #52437).
  • findobj.m: Fix typo and correctly handle numeric properties (bug #57030).
  • Correctly display integer types with format hex (bug #56966).
  • Cast winqueryreg REG_DWORD types to DWORD (bug #56703).
  • Fix numerous errors in audiowrite / audioread (bug #56889).
  • print.m: Pass quoted path to octave-svgconvert (bug #56768).
  • dir.m: Fix occasionally returning incorrect folder field (bug #55448).
  • Stop segfault when calling 3-input form of diag with cell arrays (bug #56711).
  • improve message for setting breakpoint in nonexistent function (bug #56157).
  • Use framebuffer object for printing invisible Qt figures on mac (bug #55268).
  • Escape backslash characters in EPS output (bug #56448).
  • Use replacement characters to display non UTF-8 strings in figures (bug #55974).
  • inputrc: Add warning about modification (bug #56079).
  • documentation.cc (global_search): just return if query string is empty (bug #56388).
  • Default (c)transpose for old style class arrays (bug #56323).
  • Always reserve at least 1 element of storage for sparse matrices (bug #56232).
  • Don’t segfault at exit after reading malformed HDF5 file (bug #56149).
  • Fix pause() with no arguments called on Windows (bug #55943).
  • refactor minimum eigenvalue index search in qp (bug #56037).
  • qp: fix obscure corner case when calculating qp caused by a typo (bug #56037).
  • use std::streampos instead of std::ios::streampos (patch #9782).
  • fix pause and kbhit with glibc 2.28 end-of-file state behavior (bug #55029).
  • Fix return of left-handed vectors when inputs are complex (bug #56026).
  • waitbar.m: Fix hang when using createcancelbtn property (bug #55963).
  • shading.m: Fix unexpected error when multiple hggroups present (bug #55993).
  • dec2base.m: Correctly handle zero matrix input (bug #56005).
  • eliminate duplicate graphics callback object stack (bug #55908).
  • Improve performance when closing figures (bug #55908).
  • Reduce time to process pkg -forge list by 30X (bug #39479).
  • Feed fig2dev with PDF files converted from svg (bug #55906).
  • Improve error checking for iconv_open.
  • poly.m: fix the fix for input of complex conjugate pairs (bug #53897).
  • mkoctfile: use the TMPDIR environment variable if set (bug #55814).
  • line.m: Fix creation of unwanted axes (bug #55840).
  • Accept 4-input form for quiver3 (bug #55570).
  • pkg.m: restore installing packages from zip archives (bug #55788).
  • axis.m: Fix issues with equal argument (bug #55619, bug #55614, bug #55574, bug #55514, bug #54848, bug #53724, bug #53504, bug #53336, bug #51938, bug #50356).
  • ordeig.m: Do not fail on 1x1 matrices (bug #55779).
  • GUI:
  • fix editors search and replace in selection (bug #56405).
  • undo a complete replace all action in the editor (bug #56405).
  • fix missing unlock of mutex when gui editor is not present (bug #56097).
  • prevent unnamed editor tab from being closed by rmdir (bug #55888).
  • prevent editor from closing files that are not affected by rmdir (bug #55823).
  • fix creating keyword files for editor autocompletion (bug #55835).
  • fix dock widget position when being dragged out of the main window (bug #55704).
  • Build system / Tests:
  • fetch upstream gnulib changes using git fetch
  • update gnulib archive if requested changeset is not in the local archive
  • eliminate gnulib subrepo (bug #57044).
  • configure: prevent overlinking when SUNDIALS is disabled (bug #55956).
  • use QtCore and Qt5Gui modules instead of Qt5OpenGL (bug #55735).
  • make building with Qt4 QGLWidget work again (bug #55735).
  • build: adapt mk-qthelp.pl to changes in Texinfo 6.7.
  • BIST should not rely on the current directory to be writable.
  • bp-table.cc: Fix test.
  • maint: Make old style class tests Matlab compatible.
  • Add BIST tests for unlink (bug #56097).
  • Documentation:
  • fix many spelling errors (bug #57613).
  • help: improve documentation for the startup.m user script.
  • avoid conflict with @seealso macro in Texinfo 6.6 (bug #55952)
  • mk-doc-cache.pk: Also translate @seealso here. (bug #55952).
  • makeinfo.m: Also translate @seealso here (bug #55952).
  • polar.m: Document that input is expected to be in radians (bug #57052).
  • gallery.m: Fix typo in docstring for poisson (bug #56267).
  • Add 1024x1024 Octave logo icon (bug #55836).
  • add .editorconfig for default file encoding and indentation.
  • octave.doap: Copy localized (short) description over from appdata (bug #55279).
  • org.octave.Octave.appdata.xml: Add German and French description (bug #55279).
  • languages/*.ts: updated language files (bug #55772).
  • quiver3.m: Fix texinfo typo in docstring from cset f7b10bd40045.
  • doc: fix . Operator Index entry to build with Texinfo 6.7.
  • doc: improve example of using global variables from oct-files.
  • doc: Create en-dashes and em-dashes correctly in documentation.
  • doc: expand page_output_immediately doc string, mention page_screen_output.
  • doc: Clarify documentation of history_file (bug #57027).
  • doc: Improve documentation for get_help_text, get_help_text_from_file.
  • doc: Add documentation for GNUTERM variable used with gnuplot (bug #56906).
  • doc: Improve contour docstring example (bug #56849).
  • doc: Add example to show limitations of the given BLAS integer size.
  • doc: Improve documentation of sparse functions.
  • doc: Improve spelling of bicgstab (bug #56812).
  • doc: Remove Map functions keys, values, remove from unimplemented list (bug #56718).
  • doc: Add function index entry for alias inverse (bug #56629).
  • add content rating declaration to AppStream metadata (bug #56466)
  • doc: Remove stray semicolons from pie, pie3 calling forms.
  • doc: Redo documentation for rats function.
  • doc: Specify position property for text objects is a three-element vector (bug #56303).
  • doc: state that Octave can only load HDF5 files created by itself (bug #56148).
  • doc: Fix names of options in issorted (bug #56087).
  • doc: Small fixes to mat2cell and polyeig docstrings (bug #55985).
  • doc: Improve example code for using -pdflatexstandalone (bug #55945).
  • doc: Refer to “root object” rather than “root figure object”.
  • doc: Place cross-reference from list of graphics object properties back to object (bug #46076).
  • doc: document the newline character in warning messages (bug #49158).
  • doc: pkg versions can be more general than “x.y.z” (bug #55798).

New in Octave 4.2.1 (Feb 25, 2017)

  • doc: Fix differences between example code and run time results (bug #50282).
  • Fix opengl “invalid operation” when zooming (bug #50317).
  • doc: provide complete examples in plotting documentation (bug #44263).
  • doc: Overhaul Java interface description (bug #50299).
  • doc: Add documentation for hex and binary prefix and _ separator(bug #50305 and bug #50334).
  • Fix incorrect handling of 0b binary numbers in complex constants.
  • Guarantee returning std::string from tilde_expand functions (bug #50234).
  • Workaround segfault in file_stat (bug #50234).
  • Better documentation of *fcn properties.
  • genpropdoc.m: document more graphics properties (bug #50337).
  • doc: Fix build of docs broken in sub2ind (bug #50348).
  • always fork and exec when starting the gui (bug #49609).
  • maint: add classdef test files from cset 194481349d22 (bug #49819).
  • print.m: fix regression with -append option (bug #50318).
  • version.m: document that -release returns an empty string (bug #50294).
  • Don’t display legend, colorbar, and annotation axes coordinates (bug #50272).
  • doc: Remove trailing "n" from sleep and usleep docstrings (bug #50301).
  • fix settings update for existing editor tabs (regression from b3ced5e3cebb).
  • acinclude.m4: Correct test for SetPlaceHolderText.
  • configure: use the correct flags when testing for the CXSparse library version.
  • __run_test_suite__.m: fix typo in return values.
  • qp.m: Fix regression with incorrect vector dimensions (bug #50067).
  • make editor save its widget settings again when octave quits
  • Prevent infinite loop in global documentation search (bug #50177).
  • connect execute command signal in editor constructor (bug #50171)
  • connect editors execute command signal to the required slot (bug #50171)
  • check if input is class method before declaring it unimplemented (patch #9238 and bug #49694).
  • doc: Expand documentation for cast (bug #50201).
  • doc: Correct two entries in Table 34.1 (bug #50203).
  • oop.txi: Improve table formatting (bug #50203).
  • Workaround segfault when an error occurs while printing (bug #49779)
  • doc: Fix ## in middle of docstring/comment lines (bug #50145).
  • doc: Reword documentation about subplots in 15.2.4 (bug #50148).
  • doc: Update unimplemented list of functions and where to find them (bug #50098).
  • axis.m: Do not set plotboxaspectratio to 0 (bug #49755).
  • help.m: Return valid list of keywords for --list.
  • don’t rethrow exception in destructor (bug #49304).
  • rethrow octave::exit_exception (bug #49304).
  • doc: Don’t use @code in @deftypefn because it expands badly in plain text format.
  • Update appdata.xml to follow conventions (bug #49952).
  • mexproto.h (mxAssert, mxAssertS): ensure operator precedence (bug #50050).
  • compare_plot_demos: fix spurious link to next page.
  • compare_plot_demos: fix HTML syntax, simplify output, remove external deps (bug #49709).
  • Calculate error in solution for ode solvers correctly (bug #49950).
  • doc: Add more depth to explanation of ~ function argument (bug #49444).
  • Use GetModuleFileName for getting octave path in windows (bug #48671).
  • Use C++ updaters for labels color (bug #49980).
  • distinguish elements vs. bytes in fread (bug #49699).
  • doc: Add more seealso links between docstrings.
  • use correct dimensions for liboctave += and -= matrix operators.
  • fix cut and paste error in sparse matrix solver.
  • doc: Review Appendix A, External Code Interface, of manual.
  • fminsearch.m: Fix error in guarded_eval.
  • Move frame2im and im2frame to image/ directory (bug #49939).
  • doc: Document nargout=0 calling mode for ode23, ode45.
  • Fix undefined return argument for more than 2 outputs from ode solver (bug #49890).
  • CITATION: Use and instead of comma to separate author names.
  • CITATION: Fix accent for Søren in BibTeX entry.
  • Fix inv for hermitian matrices (bug introduced in 5ce959c55cc0) (bug #49904).
  • doc: Correct documentation for javaclasspath file (bug #49873).
  • Fix gzip for certain types of gzip files (bug #49760).
  • Fix typo in liboctave version info (bug #49860).
  • Initialize ODE Event function with start time (bug #49846).
  • languages/de_DE.ts: Fix spacing and punctuation (patch #9188).
  • allow configure test to succeed without implicit fcn decls (bug #49782).
  • gnulib: import fix for link.m4.
  • allow external docstrings from .oct files to be found again (bug #49687).
  • don’t require semicolon between property list elements (bug #49819).
  • Fall back to Octave’s regular display method for class objects without a display method.
  • exit with non-zero status if parsing or evaluation of --eval code fails.
  • display.m: Correctly display output for non-class objects (bug #49753 and bug #49794).
  • Don’t run publish.tst unless OSMESA or gnuplot are available (bug #49767).
  • doc: Rewrite parts of Introduction chapter.
  • doc: Rewrite docstrings for sub2ind and ind2sub.
  • doc: Small fixes to docstrings (bug #49733).
  • doc: Update documentation for norm, normest, normest1, condest.
  • doc: Update docstring for condest.
  • find help for function aliases again (bug #49687).
  • legend.m: backport cset 7184b4516a68 (bug #49675).
  • doc: Add programming note to caxis docstring.
  • axis.m: Replace call to non-existent function clim with caxis.
  • doc: Update documentation for axis.
  • doc: Update documentation for [xyz]lim.m.
  • preserve lasterror info on rethrow (bug #49642).
  • light.m: Update docstring.
  • Change text describing demo plots to reflect new ColorOrder (bug #49288).
  • norm: fix input validation tests.
  • norm: fix error in input argument validation leading to segfault (bug #49634).
  • doc: Update month of TeX title page.
  • doc: Clarify inputs and outputs for rgb2hsv.

New in Octave 4.2.0 (Nov 21, 2016)

  • 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.
  • 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 precision.
  • 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" property.
  • 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.
  • 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.
  • 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 example.
  • 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 handling.
  • 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:
  • audioformats camlight condeig deg2rad dialog evalc hash im2double isocaps lighting localfunctions material normest1 ode23 ode45 odeget odeplot odeset padecoef profexport psi rad2deg reducepatch reducevolume smooth3 uibuttongroup
  • 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.

New in Octave 4.0.1 (Mar 24, 2016)

  • Allow strsplit to use '+' as a delimiter (bug #47403)
  • svds.m: Special handling for case of sigma=0 (bug #46683)
  • Fix splines and remove unnecessary calculations (bug #47013)
  • Fix printf regression (bug #47192)
  • Avoid overflow while reshaping large sparse matrices (bug #42850)
  • Fix memory corruption allocating to sparse arrays (bug #42825)
  • Disable char/int8_t function overloads where not permitted (bug #45411)
  • Fix cut/paste error in rande documentation (bug #47097)
  • Fix regressions caused by ismatrix definition change (bug #47036)
  • doc: Update copyright date in octave.texi (bug #47058)
  • Fix regressions caused by ismatrix definition change (bug #47036)
  • Fix regression for coordinate transforms on 3-D arrays (bug #47036)
  • Fix regressions caused by ismatrix definition change (bug #47036)
  • doc: Correct example errobar code and plot (bug #46972)
  • __getlegenddata__.m: Fix handling of multiple child elements (bug #46835)
  • fzero.m: Correctly choose tolerance (eps) based on class of fun and X0 (bug #46658)
  • Fix behavior of warning ("error") call (bug #45753)
  • Fixed isequal for comparison of objects with overridden size (bug #44334)
  • Fix compilation of classdef with the clang compiler (bug #41178)
  • doc: Fix incorrect description of Hessenberg decomposition (bug #46622)
  • set all lexical_feedback variables in init function (bug #46522)
  • Stop segfault when find function called with 6 outputs (bug #42424)
  • textread.m, textscan.m: Properly process single-quoted endofline parameter (bug #46477)
  • Fix rotated graphics when printing through ghostscript (bug #46435)
  • drawnow: Add a delay to let the GUI thread lock the mutex when printing (bug #44463)
  • Fix segfault with 'dbclear all' (bug #41843)
  • Force left-to-right alignment for the whole GUI (bug #46204)
  • validateattributes.m: Fix typo on documentation (bug #46328)
  • doc: Fix typo in short-circuit operators documentation (bug #46280)
  • datevec.m: Properly handle FFF millisecond code (bug #46171)
  • Fix issue with gnuplot, subplot, and 2 y-axes (bug #45822)
  • plot.m: Use actual property names in the description FMT argument (bug #46240)
  • normrnd.m: Return correct result for vector case when std = 0 (bug #46238)
  • prevent doc browser from searching for an empty string (bug #46227)
  • improve focus detection of gui (bug #45306)
  • Fix segfault when complex double matrix calls ZGETRF (bug #45577)
  • Add uiXXXX documentation (bug #46076)
  • quantile.m: Fix operation along a singleton dimension (bug #45455)
  • __gnuplot_drawnow__.m: Use "screenpixelsperinch" instead of constant value (bug #46122)
  • methods.m: Rry Java class names if getMethods fails on Java objects (bug #46010)
  • textread.m, textscan.m: Always remove headerlines args before invoking strread (bug #46080)
  • Include stdint.h in mex.h file (bug #46062)
  • Handle hggroup objects "buttondownfcn" when children are clicked (bug #45621)
  • Fix selection of one pixel high(wide) images (bug #46049)
  • annotation.m: Document the "string" property of textbox and textarrow annotations (bug #46036)
  • mkoctfile: Apply default C++ compiler flags when linking oct-file (bug #45280)
  • Use backslash as windows file separator for canonicalize_file_name (bug #45816)
  • Generate correct ezplot for 2-input functions (bug #46004)
  • doc: Make excplicit that asctime and ctime values end in a newline (bug #45976)
  • Initialize interpreter correctly with script and --traditional (bug #45921)
  • do not leave debug modus when entering a command at debug prompt (bug #45737)
  • __finish__.m: Change from function to script to stay in base workspace (bug #45869)
  • Don't put default xtick vector size in documentation (bug #45725)
  • Fix 'descending' sort of Range objects (bug #45739)
  • strread.m: Clarify delimiter and whitespace usage (bug #45712)
  • strread.m: Properly preprocess all forms of string format specifier (bug #45712)
  • strfunc: Document function does not accept anonymous functions (bug #45682)
  • Fix hang when using errorbar with empty dataset (bug #45554)
  • doc: Clarify behavior of length function (bug #45611)
  • Allow sorting columns in workspace view (bug #45448)
  • Pass all fields in face/vertex structure through to patch() (bug #45593)
  • polar.m: Display plot titles on polar plots (bug #45514)
  • ellipke.m: Use correct definition of elliptic integral in documentation (bug #45522)
  • unpack.m: Stop hang when unpacking on to existing filename (bug #45331)
  • Allow NEWS to be displayed properly in QTextBrowser (bug #45396)
  • Fix crash when selecting an image (bug #45372)
  • qt toolkit: Set keyboard focus in canvas (bug #44832)
  • Change mxCreateNumericArray to be Matlab compatible for ndims < 2 (bug #45319)
  • Fix conversion from string cell array into java's String (bug #45290)
  • Fix load/save of integers with -hdf5 (bug #45225)
  • ellipke.m: Modify to accept row vectors (bug #45283)
  • Return correct hex value for printf when used with string inputs (bug #45263)
  • run.m: Return to original directory on Windows (bug #45231)
  • Convert double Octave vectors to double Java vectors (bug #45264)
  • Also load settings and translations in --no-gui mode (bug #44222) and (bug #45199)
  • Avoid crash when trying to annotate an empty figure (bug #45241)
  • Allow copying a figure to clipboard even in --no-gui mode (bug #44886)
  • Allow saving/copying other figures than the currentfigure (bug #45226)
  • linsolve.m: Fix regression when calling linsolve with 2 arguments (bug #45212)
  • fftshift.m, ifftshift.m: Restore support for N-dimensional arrays (bug #45207)

New in Octave 4.0.0 (May 30, 2015)

  • A graphical user interface is now the default when running Octave interactively. The start-up option --no-gui will run the familiar command line interface, and still allows use of the GUI dialogs and qt plotting toolkit. The option --no-gui-libs runs a minimalist command line interface that does not link with the Qt libraries and uses the fltk toolkit for plotting.
  • Octave now uses OpenGL graphics with Qt widgets by default. If OpenGL libraries are not available when Octave is built, gnuplot is used. You may choose to use the fltk or gnuplot toolkit for graphics by executing the command
  • graphics_toolkit ("fltk")
  • graphics_toolkit ("gnuplot")
  • Adding such a command to your ~/.octaverc file will set the default for each session.
  • A new syntax for object oriented programming termed classdef has been introduced. See the manual for more extensive documentation of the classdef interface.
  • New keywords:
  • classdef endclassdef
  • enumeration endenumeration
  • events endevents
  • methods endmethods
  • properties endproperties
  • New audio functions and classes:
  • audiodevinfo audioread sound
  • audioinfo audiorecorder soundsc
  • audioplayer audiowrite
  • Other new classes in Octave 4.0:
  • audioplayer inputParser
  • audiorecorder
  • Optional stricter Matlab compatibility for ranges, diagonal matrices, and permutation matrices.
  • Octave has internal optimizations which use space-efficient storage for the three data types above. Three new functions have been added which control whether the optimizations are used (default), or whether the data types are stored as full matrices.
  • disable_range disable_diagonal_matrix disable_permutation_matrix
  • All three optimizations are disabled if Octave is started with the --braindead command line option.
  • The preference do_braindead_shortcircuit_evaluation is now enabled by default.
  • The preference allow_noninteger_range_as_index is now enabled by default and the warning ID Octave:noninteger-range-as-index is now set to "on" by default instead of "error" by default and "on" for --traditional.
  • The "backtrace" warning option is now enabled by default. This change was made for Matlab compatibility.
  • For compatibility with Matlab, the "ismatrix (x)" function now only checks the dimension of "x". The old behaviour of "ismatrix" is obtained by "isnumeric (x) || islogical (x) || ischar (x)".
  • The nextpow2 function behaviour has been changed for vector inputs. Instead of computing `nextpow2 (length (x))', it will now compute nextpow2 for each element of the input. This change is Matlab compatible, and also prevents bugs for "vectors" of length 1.
  • polyeig now returns a row vector of eigenvalues rather than a matrix with the eigenvalues on the diagonal. This change was made for Matlab compatibility.
  • Interpolation function changes for Matlab compatibility
  • The interpolation method 'cubic' is now equivalent to 'pchip' for interp1, interp2, and interp3. Previously, 'cubic' was equivalent to 'spline' for interp2. This may produce different results as 'spline' has continuous 1st and 2nd derivatives while 'pchip' only has a continuous 1st derivative. The methods 'next' and 'previous' have been added to interp1 for compatibility.
  • The delaunay function has been extended to accept 3-D inputs for Matlab compatibility. The delaunay function no longer plots the triangulation if no output argument is requested, instead, the triangulation is always returned. The delaunay3 function which handles 3-D inputs has been deprecated in favor of delaunay.
  • The trigonometric functions asin and acos return different phase values from previous versions of Octave when the input is outside the principal branch ([-1, 1]). If the real portion of the input is greater than 1 then the limit from below is taken. If the real portion is less than 1 then the limit from above is taken. This criteria is consistent with several other numerical analysis software packages.
  • The hyperbolic function acosh now returns values with a phase in the range [-pi/2, +pi/2]. Previously Octave returned values in the range [0, pi]. This is consistent with several other numerical analysis software packages.
  • strfind changes when using empty pattern ("") for Matlab compatibility. strfind now returns an empty array when the pattern itself is empty. In previous versions of Octave, strfind matched at every character location when the pattern was empty.
  • NEW
  • strfind ("abc", "") => []
  • OLD
  • strfind ("abc", "") => [1, 2, 3, 4]
  • Integer formats used in the printf family of functions now work for 64-bit integers and are more compatible with Matlab when printing non-integer values.
  • Now instead of truncating, Octave will switch the effective format to '%g' in the following circumstances :
  • the value of an integer type (int8, uint32, etc.) value exceeds the maximum for the format specifier. For '%d', the limit is intmax ('int64') and for '%u' it is intmax ('uint64').
  • round(x) != x or the value is outside the range allowed by the integer format specifier.
  • There is still one difference: Matlab switches to '%e' and Octave switches to '%g'.
  • The functions intersect, setdiff, setxor, and union now return a column vector as output unless the input was a row vector. This change was made for Matlab compatibility.
  • The inpolygon function now returns true for points that are within the polygon OR on it's edge. This change was made for Matlab compatibility.
  • The archive family of functions (bzip2, gzip, zip, tar) and their unpacking routines (bunzip2, gunzip, unzip, untar, unpack) have been recoded. Excepting unpack, the default is now to place files in the same directory as the archive (on unpack) or as the original files (on archiving).
  • Qt and FLTK graphics toolkits now support offscreen rendering on Linux. In other words, print will work even when the figure visibility is "off".
  • Z-order stacking issues with patches, grid lines, and line object plot markers for on screen display and printing have all been resolved. For 2-D plots the axis grid lines can be placed on top of the plot with set (gca, "layer", "top").
  • The patch graphic object has been overhauled. It now produces visual results equivalent to Matlab even for esoteric combinations of faces/vertices/cdata.
  • The polar() plot function now draws a circular theta axis and radial rho axis rather than using a rectangular x/y axis.
  • linkprop has been completely re-coded for performance and Matlab compatibility. It now returns a linkprop object which must be stored in a variable for as long as the graphic objects should remain linked. To unlink properties use 'clear hlink' where hlink is the variable containing the linkprop object.
  • isprime has been extended to operate on negative and complex inputs.
  • xor has been extended to accept more than two arguments in which case it performs cumulative XOR reduction.
  • The following functions now support N-dimensional arrays:
  • fliplr flipud rot90 rectint
  • The new warning ID "Octave:data-file-in-path" replaces the three previous separate warning IDs "Octave:fopen-file-in-path", "Octave:load-file-in-path", and "Octave:md5sum-file-in-path".
  • The warning ID Octave:singular-matrix-div has been replaced by Octave:nearly-singular-matrix and Octave:singular-matrix.
  • The warning ID Octave:matlab-incompatible has been replaced by Octave:language-extension to better reflect its meaning.
  • The warning ID Octave:broadcast has been removed. Instead automatic broadcasting will throw an Octave:language-extension warning. This warning ID is used for broadcasting as well as other features not available in Matlab.
  • Other new functions added in 4.0:
  • annotation
  • bandwidth
  • cubehelix
  • dir_in_loadpath
  • flip
  • frame2im
  • get_home_directory
  • hgload
  • hgsave
  • ichol
  • ilu
  • im2frame
  • isbanded
  • isdiag
  • isstudent
  • istril
  • istriu
  • javachk
  • jit_failcnt
  • linkaxes
  • lscov
  • metaclass
  • numfields
  • open
  • ordschur
  • pan
  • qmr
  • rotate
  • rotate3d
  • sylvester
  • unsetenv
  • validateattributes
  • zoom
  • inline() scheduled for eventual deprecation by Matlab
  • Functions created through the use of inline are scheduled for deprecation by Matlab. When this occurs Octave will continue to support inline functions for an indeterminate amount of time before also removing support. All new code should use anonymous functions in place of inline functions.
  • Deprecated functions:
  • The following functions have been deprecated in Octave 4.0 and will be removed from Octave 4.4 (or whatever version is the second major release after 4.0):
  • Function | Replacement
  • bicubic | interp2
  • delaunay3 | delaunay
  • dump_prefs | individual preference get/set routines
  • find_dir_in_path | dir_in_loadpath
  • finite | isfinite
  • fmod | rem
  • fnmatch | glob or regexp
  • loadaudio | audioread
  • luinc | ilu or ichol
  • mouse_wheel_zoom | mousewheelzoom axes property
  • nfields | numfields
  • octave_tmp_file_name | tempname
  • playaudio | audioplayer
  • saveaudio | audiowrite
  • syl | sylvester
  • usage | print_usage
  • allow_noninteger_range_as_index
  • do_braindead_shortcircuit_evaluation
  • setaudio
  • The following functions were deprecated in Octave 3.8 and will be removed from Octave 4.2 (or whatever version is the second major release after 3.8):
  • 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 following functions were deprecated in Octave 3.6 and have been removed from Octave 4.0:
  • cut polyderiv
  • cor shell_cmd
  • corrcoef studentize
  • __error_text__ sylvester_matrix
  • error_text
  • The following keywords were deprecated in Octave 3.8 and have been removed from Octave 4.0:
  • static
  • The following configuration variables were deprecated in Octave 3.8 and have been removed from Octave 4.0:
  • CC_VERSION (now GCC_VERSION)
  • CXX_VERSION (now GXX_VERSION)
  • The internal function atan2 of the sparse matrix class has been deprecated in Octave 4.0 and will be removed from Octave 4.4 (or whatever version is the second major release after 4.0). Use the Fatan2 function with sparse inputs as a replacement.
  • The internal class was deprecated in Octave 3.8 and has been removed from Octave 4.0. Replacement classes are (struct array) or for a single structure.
  • The configure option --enable-octave-allocator has been removed. The internal class declared in oct-alloc.h has been removed. The header remains, but is deprecated. The macros to access the class DECLARE_OCTAVE_ALLOCATOR, DEFINE_OCTAVE_ALLOCATOR, and DEFINE_OCTAVE_ALLOCATOR2) are now unconditionally defined to be empty.
  • Octave now has OpenMP enabled by default if the system provides a working OpenMP implementation. This allows oct-file modules to take advantage of OpenMP if desired. This can be disabled when building Octave with the configure option --disable-openmp.
  • Octave now automatically truncates intermediate calculations done with floating point values to 64 bits. Some hardware math co-processors, such as the x87, maintain extra precision, but this leads to disagreements in calculations when compared to reference implementations in software using the IEEE standard for double precision. There was no measurable performance impact to this change, but it may be disabled with the configure option --disable-float-truncate. MinGW and Cygwin platforms, as well as GCC compilers >= 5.0 require this feature. Non-x87 hardware, or hardware using SSE options exclusively, can disable float truncation if desired.

New in Octave 3.2.4 (Apr 30, 2010)

  • add the following packages from octave forge to the installer:
  • jhandles-0.3.5+ (noauto)
  • java-1.2.7+ (noauto)
  • video-1.0.2
  • msh-1.0.0
  • fpl-1.0.0
  • actuarial-1.1.0
  • bim-1.0.10
  • fenv-0.1.0
  • generate_html-0.1.2
  • gnuplot-1.0.1
  • gpc-0.1.7
  • nlwing2-1.1.1
  • nurbs-1.0.3
  • ocs-0.0.4
  • oct2mat-1.0.7
  • octgpr-1.1.5
  • simp-1.1.0
  • spline-gcvspl-1.0.8
  • symband-1.0.10
  • updated the following octave forge packages
  • windows 1.0.8 -> 1.0.8+ (noauto)
  • octcdf 1.0.13 -> 1.0.17+ (noauto)
  • optim 1.0.6 -> 1.0.12
  • general 1.1.3 -> 1.2.0
  • io 1.0.9 -> 1.0.11
  • odepkg 0.6.7 -> 0.6.10
  • update gnuplot to 4.4.0
  • CHG: revert PS1 to octave's default (of not including the pwd)
  • add necessary jars for ods/xls support in the io package

New in Octave 3.0.3 (Jan 30, 2009)

  • This package contains:
  • octave 3.0.3
  • ATLAS 3.8.1 compiled with SSE1 and SSE2
  • octave-forge 20080831
  • playrec package (record and play sounds under Windows)
  • SciTE text editor
  • GnuPlot (CVS)
  • This package does not contain the IDE that was included
  • in the previous one as a technology preview.