0% found this document useful (0 votes)
4 views

MATLAB_Programming_Differences_between_Octave_and_MATLAB

The document outlines the key differences and similarities between GNU Octave and MATLAB, emphasizing that Octave is designed for MATLAB compatibility but includes unique features and syntax. It details specific programming aspects such as data types, operators, function behavior, and error handling that differ between the two platforms. Additionally, it provides guidance for users transitioning between Octave and MATLAB to avoid common pitfalls in code execution.

Uploaded by

alissonafs
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

MATLAB_Programming_Differences_between_Octave_and_MATLAB

The document outlines the key differences and similarities between GNU Octave and MATLAB, emphasizing that Octave is designed for MATLAB compatibility but includes unique features and syntax. It details specific programming aspects such as data types, operators, function behavior, and error handling that differ between the two platforms. Additionally, it provides guidance for users transitioning between Octave and MATLAB to avoid common pitfalls in code execution.

Uploaded by

alissonafs
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

MATLAB Programming/Differences between

Octave and MATLAB

Octave has been mainly built with MATLAB compatibility in mind. It has a lot of features in common with
MATLAB:

1. Matrices as fundamental data type.


2. Built-in support for complex numbers.
3. Powerful built-in math functions and extensive function libraries.
4. Extensibility in the form of user-defined functions.

Some of the differences that do exist between Octave and MATLAB can be worked around using "user
preference variables."

GNU Octave is mostly compatible with MATLAB. However, Octave's parser allows some (often very useful)
syntax that MATLAB's does not, so programs written for Octave might not run in MATLAB. For example,
Octave supports the use of both single and double quotes, whereas older versions of MATLAB only supported
single quotes, which meant parsing errors occurred if you tried to use double quotes (e.g. in an Octave script
when run on MATLAB). More recent versions of MATLAB introduced double quotes, but with different
functionality to single quotes (albeit with some overlap in functionality). Octave and MATLAB users who
must collaborate with each other need to take note of these issues and program accordingly.

Note: Octave can be run in "traditional mode" (by including the --traditional flag when
starting Octave) which makes it give an error when certain Octave-only syntax is used.

This chapter documents instances where MATLAB's parser will fail to run code that will run in Octave, and
instances where Octave's parser will fail to run code that will run in MATLAB. This page also contains notes
on differences between things that are different between Octave (in traditional mode) and MATLAB.

C-Style Autoincrement and Assignment operators


Octave supports C-style autoincrement and assignment operators:

i++; ++i; i+=1; etc.

MatLab does not.

Product of booleans
MATLAB (R2011b) and Octave (3.6.4) respond differently when computing the product of boolean values:

X = ones(2,2) ; prod(size(X)==1)
MATLAB: PROD is only supported for floating point input.
Octave: ans = 0

They both produce the same result (ans=0) in MATLAB (R2015a) and above

nargin
Nargin returns the number of input arguments of a function. MATLAB (R2011b) will not allow the following;
Octave will.

function myfun = testfun(c)


if (nargin == 1)
nargin = 2;
else
nargin = 3
end

startup.m
MATLAB will execute a file named 'startup.m' in the directory it was called from on the command line. Old
versions of Octave do not. Starting with Octave 4.2.0 it behaves the same as Matlab. For older versions of
Octave, it will execute a file named '.octaverc' which can be edited to execute existing startup files. This means
that '.octaverc' can be edited to look for and execute a 'startup.m' file.

if ( exist ('startup.m', 'file') )


source ('startup.m') # load startup.m like MATLAB
endif

Character Strings and Arrays


MATLAB differentiates between character strings and character arrays, while Octave does not. In Octave:

>> ["foo" "bar"]


ans = foobar
>> ['foo' 'bar']
ans = foobar

In MATLAB:

>> ["foo" "bar"]


ans =
1×2 string array
"foo" "bar"

>> ['foo' 'bar']


ans =
'foobar'

Solution: Use strcat() for character string concatenation.

['abc ';'abc']
['abc ';'abc'] is now allowed in both Octave and MATLAB; (MATLAB previously would return: ?? Error
using ==> vertcat)

In Octave and MATLAB the result will be a 2 by 3 matrix.

Calling Shells
the "! STRING" syntax calls a shell with command STRING in MATLAB. Octave does not recognize ! as
system call, since it is used in logical operations. Always use 'system (STRING)' for compatibility.

If you really miss the one-character shortcut, for convenience on the command line you can create a similar
shortcut by defining the following in your '.octaverc' file:

function S(a), system(a); end

Now "S STRING" will evaluate the string in the shell.

Attempting to load empty files


MATLAB lets you load empty files, OCTAVE does not.

system('touch emptyfile');
A = load('emptyfile')

MATLAB R2011b : A=[]


Octave 4.2.0 : error: load: unable to determine file format of 'emptyfile'

fprintf and printf


Octave supports both printf and fprintf as a command for printing to the screen. MATLAB requires
fprintf:

foo = 5;
printf ('My result is: %d\n', foo) % Prints to STDOUT. Octave only

fprintf covers writing both to the screen and to a file by omitting the optional file-handle argument:

foo = 5;
fprintf('My result is: %d\n', foo) % Prints to STDOUT. Octave and MATLAB

Whitespace
MATLAB does not allow whitespace before the transpose operator but Octave does (it is just an operator like
others).

[0 1]' % works in MATLAB and Octave


[0 1] ' % works only in Octave
Line continuation
MATLAB always requires ... for line continuation.

rand (1, ...


2)

while Octave also supports

rand (1,
2)

For both programs, a line break without '...' within an array shifts to the next row

>> R=[1 2 3
7 8 9]

R =
1 2 3
7 8 9

Assignment
Octave supports

z = y = x + 3

MATLAB requires

y = x + 3
z = y

Octave allows

global isOctave = (exist('OCTAVE_VERSION') > 0);

while MATLAB requires

global isOctave;
isOctave = (exist('OCTAVE_VERSION') > 0);

This example also shows how to detect the interpreter at runtime.

Logical operator NOT


Octave allows users to use both ~ and ! with boolean values. The first is for MATLAB compatibility, while !
will be more familiar to C/Java/etc programmers. If you use the latter, however, you'll be writing code that
MATLAB will not accept:
For not-equal comparison, Octave can use both '~=' or '!='. MATLAB requires '~='.

GNU Octave Control Package


Both MATLAB and Octave have toolboxes intended to control system design. In Octave, the toolbox is called
the Octave Control Package. The package can be downloaded, compiled and installed with the command pkg
install control from the Octave prompt. Users of Debian and its derivatives can install it by installing
the package "octave-control", if it is not installed by default.

For more information about functions' syntax, type help <name of function>. For more information
about the Control Package, view the PDF manual in the package's "doc" folder.

Small differences exist - an example is c2d. Here are the two formats for the bilinear transformation with an
analog model C:

* discrete = c2d(C,0.5,'tustin'); % Matlab


* discrete = c2d(C,0.5,'bi'); % GNU Octave

Some other differences


MATLAB uses the percent sign '%' to begin a comment. Octave uses both the hash symbol #
and the percent sign % interchangeably.
For exponentiation, Octave can use ^ or **; MATLAB requires ^.
For string delimiters, Octave can use ' or "; old versions of MATLAB required '; current
versions of MATLAB can use ' or ", but with different (slightly overlapping) functionality.
To end blocks, Octave can use end or specify the block with endif, endfor, ...;
MATLAB requires end.
Octave supports C-style hexadecimal notation (e.g. "0xF0"); MATLAB requires the hex2dec
function (e.g. "hex2dec('F0')").
If something (like Netlab) needs a function named fcnchk, create a file named fcnchk.m with the
contents shown below and put it where Octave can find it:

function f=fcnchk(x, n)
f = x;
end

The main difference used to be the lack of GUI (http://wiki.octave.org/FAQ#GUI) for Octave.
With version 4.0 Octave has a GUI as its default interface.

Notes about specific functions


For "dbstep, in" use "dbstep"; for "dbstep", use "dbnext"
For "eig(A,B)" use "qz(A,B)"
The fputs() function is not available in MATLAB. Use fprintf() instead.
The strftime() function is not available in MATLAB. Use datestr() instead.
The time() function is not available in MATLAB. Use now() instead.
As of 4.2.1, Octave does not print outputs to the console until it has completed all waiting
commands, unlike MATLAB. This behavior is controlled by the boolean variable
page_output_immediately (default: 0), and it is not ameliorated in --traditional.
The functions strread() and textscan() in Octave 3.4.0 are not fully compatible with their
implementations in MATLAB 2009b (and probably later versions as well). For instance, the
N=-1 option (repeat reading format until end of string) is not implemented in Octave 3.4.0 .
Using a value of N=a positive integer (read format N times) does work the same as in MATLAB.
The textscan() function is not included in Octave versions prior to 3.4.0. Use fscanf() instead.
For the linprog() function, MATLAB is more permissive by allowing the "a" and "b" inputs to be
either row or column vectors. Octave requires that they be column vectors.
In Octave, one can specify data labels (or legends) with the plot() function, while in MATLAB
one can only use the legend() function.

Octave: plot(x, y, ';label;')


MATLAB/Octave: plot(x, y); legend('label')

The error(msg) function in MATLAB is a no-op if the message is empty. In Octave, it results in
an error.
The contains() function is not available in Octave. Use ~isempty(strfind()) instead.

References
Octave FAQ: Differences between Octave and Matlab (http://wiki.octave.org/FAQ#Differences_
between_Octave_and_Matlab)
Octave FAQ: What features are unique to Octave? (http://wiki.octave.org/FAQ#What_features_a
re_unique_to_Octave.3F)

See also
Octave Programming Tutorial

Retrieved from "https://en.wikibooks.org/w/index.php?


title=MATLAB_Programming/Differences_between_Octave_and_MATLAB&oldid=3704983"

This page was last edited on 9 July 2020, at 16:50.

Text is available under the Creative Commons Attribution-ShareAlike License.; additional terms may apply. By using this
site, you agree to the Terms of Use and Privacy Policy.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy