Powerful mathematics-oriented syntax with built-in plotting and visualization tools

Octave

Octave

  -  507 MB  -  Open Source
Octave is a high-level programming language and scientific computing platform that can help users of all knowledge levels to create and visualize numerical computations and solve linear and nonlinear problems.
  • Powerful mathematics-oriented syntax with built-in 2D/3D plotting and visualization tools
  • Free software, runs on GNU/Linux, macOS, BSD, and Microsoft Windows
  • Drop-in compatible with many Matlab scripts
Originally developed by John W. Eaton and his partners in 1988, and greatly expanded after 1992, this GNU Octave tool today represents the most popular free alternative to the commercial software MATLAB. With this programming language, students, enthusiasts, and professionals can create intricate and highly accurate software in the fields of instrument control, mechanics, bioinformatics, and many other advanced fields.

It comes as a full package, offering users access to the optimized and highly developed GUI and integrated development environment (IDE) with the fully-featured editor, compiler, visualizer, and other tools.

To better serve the needs of users, It can also load various packages and 3rd party graphical front ends (such as ToolboX that is streamlined for easier coding education). More than seventy GNU Octave 32/64 bit packages that optimize the creation of new applications for specific use cases can be found at the Octave-Forge website.

In addition to being offered as a standalone high-level programming language package, It can also be integrated into Visual Studio and MinGW.

Features and Highlights
  • Largest free programming language for creating and visualization of numerical computations.
  • Developed since 1988 into a major competitor of the commercial rival MATLAB.
  • Easy installation and deployment to your system.
  • Powerful visualization tools.
  • Versatile and usable in any math field.
  • Compatible with many MATLAB scripts.
  • Available on all modern versions of Windows.
  • Additionally, supported on GNU/Linux, macOS, and BSD.
  • Translated into 19 languages.
  • Available for FREE under GNU General Public License.
Installation and Use

Since this open-source platform is still heavily updated, its installation package has grown over the years, reaching the current state of almost 300 MB. While its installation procedure is easy to finish, because of the size of the archive and the presence of a large number of small files, its installation can run for prolonged periods of time, depending on the performance of your computer.

After the installation is finished, you will be welcomed with the main screen of the Octave GUI application. Its interface shares the layout approach that is today shared between many professional programming applications of this type. The UI features the main function bar with dropdown windows and main function buttons for controlling the currently active loaded project.

On the left of the window is the File Browser tab and Command History listing area, while on the far right are Workplace and Variable Editor tabs, and the central area is left for large Editor window and slim Command Window below it.

After getting a bit used to its interface and toolset, GNU Octave can become a very flexible tool for managing even the largest collections of math projects and modules. In addition to programming and testing for results, It also features extensive support for graphics rendering which can be used for easy data visualization and manipulation.

As of March 2019, the app was upgraded to its latest V5 version that featured a redesigned interface and expanded capabilities.

PROS
  • Open Source: Free to use and modify, making it accessible for everyone.
  • MATLAB Compatibility: High compatibility with MATLAB, allowing easy transition between the two.
  • Extensive Functionality: Supports numerical computations, data visualization, and scripting similar to MATLAB.
  • Active Community: Strong support and regular updates from an active user community.
  • Cross-Platform: Available on multiple platforms, including Windows, macOS, and Linux.
CONS
  • Performance: May be slower than MATLAB for certain computations, especially on larger datasets.
  • Interface: The user interface is not as polished or user-friendly as MATLAB's.
  • Toolbox Availability: Some specialized toolboxes available in MATLAB are not present or fully compatible in Octave.
  • Graphical Capabilities: The plotting and graphical output are less sophisticated compared to MATLAB.


  • Octave 10.1.0 Screenshots

    The images below have been resized. Click on them to view the screenshots in full size.

    Octave 10.1.0 Screenshot 1
  • Octave 10.1.0 Screenshot 2
  • Octave 10.1.0 Screenshot 3
  • Octave 10.1.0 Screenshot 4
  • Octave 10.1.0 Screenshot 5

What's new in this version:

General improvements:
- Three short form aliases have been added for long form options when starting octave
- e CODE for --eval CODE
- g for --gui
- G for --no-gui
- Three long form options have been introduced for clarity
- no-init-user : Don’t read user configuration files ~/.octaverc or .octaverc files at startup
- no-init-site : Don’t read site-wide configuration files at startup
- no-init-all : Don’t read any configuration files at startup
- nchoosek algorithm is now ~2x faster and provides greater precision
- nextpow2 algorithm is now more accurate for inputs very close to a power of 2. The output class now matches the input class for Matlab compatibility. The function no longer accepts complex inputs and emits an error for these inputs.
- jsonencode now outputs integers and floating point integers without an unnecessary “.0” suffix.
- hist now accepts N-dimensional array inputs for input Y, which is processed in columns as if the array was flattened to a 2-dimensional array.
- The third output for unique is now correct when the stable sort option is used.
- Support setting breakpoints in set or get methods of classdef properties
- .mex files now link to the new library liboctmex (instead of to liboctinterp and liboctave). The SOVERSION of this new library is expected to be stable across multiple major versions of Octave. The benefit is that .mex files will not necessarily require rebuilding for every major version release of Octave.
- pkg describe command now supports a new Tracker tag in the DESCRIPTION file and returns package-provided repository and bug tracker URLs. Package maintainers are encouraged to utilize the new feature to redirect users to package-specific bug trackers instead of Savannah.
- pkg install now mentions package-provided URL and package-provided bug tracker if they exist.

Graphics backend:
- polar plots now include the center tick mark value, typically 0, in the 'rtick' parameter when the plot is created. Subsequent modifications to 'rtick' by the function rticks will only include the center tick mark value if it is specified.
- view correctly interprets Cartesian viewpoints on main axes
- plot3 now draws a single marker if only one data point is given. Previously the plot was blank (marker = "none") which was confusing.

Matlab compatibility:
- height and width are now aliases for the rows and columns functions.
- All colormaps now default to a size of 256 colors. (The previous default size was 64.)
- The first argument to colormap may now be a figure or axes object. Calling colormap on a figure object will clear any "colormap" properties set at the axes level.
- griddata output size more consistently matches the input interpolation points when the inputs are vectors. If the inputs are vectors with the same-orientation, then the outputs will be the same size as those vectors. When either input is a row vector and the other is a column vector, the interpolating points are processed through meshgrid and the output is a matrix the same size as the meshgrid.
- iqr now provides compatible output for empty inputs.
- cross now produces row vector outputs when the inputs are a mix of row and column vectors
- rat now accepts complex inputs.
- The optional second input argument of system, denoting whether to return the output as a variable, is now required to be a boolean value if used.
- Octave functions whose Matlab equivalents give errors when passed non-integer values as sizes or dimensions now also give similar errors. For example, cell (e, pi) now gives an error in Octave about requiring integer sizes for the cell array, matching Matlab behavior. Previously, Octave’s conversion from non-integers to integers was more lenient.
- issorted now accepts the MODE option "monotonic", which has the same behavior as the option "either".
- movfun and movslice: Functions now accept wlen equal to 1 or [0,0], non-integer values of wlen, and values of wlen that create window lengths exceeding the size of the target array. movfun also accepts values of dim larger than the number of non-singleton dimensions in the target array. The SamplePoints option has been implemented for both functions. Non-numeric input array handling has been improved. These changes affect all moving window functions (movmad, movmax, movmean, movmedian, movmin, movprod, movstd, movsum, and movvar)
- movfun: The nancond property has been fully implemented and made Matlab-compatible. The omitnan option will ignore NaN and NA values when calculating the function return, and, if all elements in a window slice are NaN or NA, it will return the value contained in a new property nanval (default NaN) for that element. The includenan property (the default) has been updated for compatibility such that any window containing NaN or NA will return NaN rather than passing those values to the calculating function. omitmissing and includemissing are now accepted as aliases for omitnan and includenan. These changes affect all moving window functions (movmad, movmax, movmean, movmedian, movmin, movprod, movstd, movsum, and movvar)
- movmin and movmax: These functions now have their default behavior set to omitnan. NaN and NA values will be ignored unless a moving window contains only NaN or NA values, in which case the function will return NaN for that element
- movsum: When called with option omitnan, any windows containing only NaN and NA values will return 0
- movprod: When called with option omitnan, any windows containing only NaN and NA values will return 1
- movmad: The function now defaults to calculating median absolute deviation. Before Octave 10, the function calculated mean absolute deviation. A new method property has been provided that takes values of either "mean" or "median" to allow the user to select which option to use. This property should not be expected to function in code used outside of Octave.
- symbfact: outputs count, parent, and post are now row vectors rather than column vectors.

Alphabetical list of new functions added in Octave 10:
- clim
- rticklabels
- thetaticklabels

Build system:
- Octave now requires a C++ compiler that is compliant with C++17 (preferably with GNU extensions)
- The location of the list of packages installed site-wide for all users (pkg global_list) has changed

Summary of bugs fixed for version 10.1.0 (2025-03-28):
- hist.m: Test for equal bin spacing using a numeric tolerance
- hist.m: Fix regression in determining equal bin spacing
- Fix thinko in cset be1d0c81678
- Silence unexpected Octave:mixed-string-concat warning in num2str.m
- Code beautification for cset 2c2301104ca
- Check for undefined outputs in cellfun and arrayfun
- Add cellfun BIST for function failing to return requested output
- Add arrayfun BIST for function failing to return requested output
- Avoid error for struct2cell with function without output arguments
- Add self-tests for structfun with function without output arguments
- Translate shortcuts and descriptions in settings dialog
- symbfact: Return row vectors for Matlab compatibility
- sparseqr: Support permutation output with CXSparse
- Emit error when qr() is called with permutation output and CXSparse library is used
- qr (sparse, 0) isn’t equal to qr (sparse, 'econ', 'vector')
- Avoid ASAN error with path (_) manipulations
- legend and bar cause ASAN to crash Octave
- Ctrl-C kills Octave 10.0.0
- File encoding conversion errors on macOS 14
- fseek and ftell functions don’t always work correctly on Windows with filesizes >2GB
- menu() throws an error when Qt dialogs are not available
- movmad uses ‘mean absolute deviation’ while Matlab uses ‘median absolute deviation’
- Implement nanflag option for moving window functions
- movfun: Implement SamplePoints option
- Function glpk produces incorrect output
- nthargout does not propagate error ID
- movfun dimension constraints: Shouldn’t error for dim > ndims(x), or wlen > size(x, dim), or wlen=1
- Error retrieving data from struct values in containers.Map
- Segmentation fault on default branch
- Strip leading/trailing whitespace from “Function Index” search expression
- Documentation window: Function Index: Search box respects trailing spaces
- Some remaining cases of silent conversion of fractional inputs
- issorted: enable 'monotonic' and 'strict...' sort modes
- axes 'colormap' property being set over figure 'colormap' property
- Input validation for system()
- Execute FIXME of perms.cc: Use constexpr instead of template specialisation
- view produces incorrect viewpoint when given a vector aligned with the primary axes
- short_disp doesn’t show ellipsis at end of long arrays
- clears editor setting 'Always show debug breakpoints and pointers...'
- Feature request: Editor right-click to run test without needing to clear %! first
- xint_value does not work the way it is intended
- iqr handling of empty inputs is not compatible
- Use separate GUI settings for Octave releases
- nchoosek error ‘gcd: all values must be integers
- uifigure ('visible', 'off') temporarily creates a visible figure window
- jsonencode does not accept integer values larger than 999999
- nextpow2 incorrect for some inputs slightly larger than powers of two
- Improve nchoosek.m algorithm to prevent numerical issues
- movfun: Create inputParser only once
- unique.m: Enable third output with option 'stable'
- griddata: Output size inconsistent for vector input interpolation points
- Column width in browser pane not retained between restarts of Octave
- Compatibility: Colormaps now default to 256 colors in Matlab
- Implement height and width as aliases for rows and columns for Matlab compatibility
- polar doesn’t populate 'rtick' with center tick value
- Error sourcing file message when script with embedded ‘.’ in filename has syntax error
- cross(): Dimensions inconsistent with Matlab when using mismatched input vector dimensions
- sqrtm: Returns NaN for matrix of ones with rows and columns >=4
- Fix nargout for subsref when returned value may be a cs-list
- Support displaying lazy index objects in variable editor
- properties function does not preserve order
- rat() should support complex numbers
- lastwarn: Save warning info for disabled warnings
- Modify built-in self-tests to pass with Matlab-compatible lastwarn() behavior