History
Origins
MATLAB was invented by mathematician and computer programmer Cleve Moler. The idea for MATLAB was based on his 1960s PhD thesis. Moler became a math professor at theCommercial development
MATLAB was first released as a commercial product in 1984 at the Automatic Control Conference inRecent history
Some especially large changes to the software were made with version 8 in 2012. The user interface was reworked and Simulink's functionality was expanded. By 2016, MATLAB had introduced several technical and user interface improvements, including the MATLAB Live Editor notebook, and other features.Syntax
The MATLAB application is built around the MATLAB programming language. Common usage of the MATLAB application involves using the "Command Window" as an interactive mathematical shell or executing text files containing MATLAB code.Variables
Variables are defined using the assignment operator,=
. MATLAB is a Vectors and matrices
A simple array is defined using the colon syntax: ''initial'':
''increment'':
''terminator''. For instance:
array
(or assigns a new value to an existing variable with the name array
) which is an array consisting of the values 1, 3, 5, 7, and 9. That is, the array starts at 1 (the ''initial'' value), increments with each step from the previous value by 2 (the ''increment'' value), and stops once it reaches (or is about to exceed) 9 (the ''terminator'' value).
The ''increment'' value can actually be left out of this syntax (along with one of the colons), to use a default value of 1.
ari
an array with the values 1, 2, 3, 4, and 5, since the default value of 1 is used as the increment.
Indexing is one-based, which is the usual convention for matrices in mathematics, unlike zero-based indexing commonly used in other programming languages such as C, C++, and Java.
Matrices can be defined by separating the elements of a row with blank space or comma and using a semicolon to terminate each row. The list of elements should be surrounded by square brackets []
. Parentheses ()
are used to access elements and subarrays (they are also used to denote a function argument list).
2:4
, which evaluates to , 3, 4/code>. For example, a submatrix taken from rows 2 through 4 and columns 3 through 4 can be written as:
>> A(2:4,3:4)
ans =
11 8
7 12
14 1
A square identity matrix
In linear algebra, the identity matrix of size n is the n\times n square matrix with ones on the main diagonal and zeros elsewhere.
Terminology and notation
The identity matrix is often denoted by I_n, or simply by I if the size is immaterial ...
of size ''n'' can be generated using the function eye
, and matrices of any size with zeros or ones can be generated with the functions zeros
and ones
, respectively.
>> eye(3,3)
ans =
1 0 0
0 1 0
0 0 1
>> zeros(2,3)
ans =
0 0 0
0 0 0
>> ones(2,3)
ans =
1 1 1
1 1 1
Transposing a vector or a matrix is done either by the function transpose
or by adding dot-prime after the matrix (without the dot, prime will perform conjugate transpose for complex arrays):
>> A = ; 2 B = A.', C = transpose(A)
A =
1
2
B =
1 2
C =
1 2
>> D = , 3 ; 1, 5 D.'
D =
0 3
1 5
ans =
0 1
3 5
Most functions accept arrays as input and operate element-wise on each element. For example, mod(2*J,n)
will multiply every element in ''J'' by 2, and then reduce each element modulo ''n''. MATLAB does include standard for
and while
loops, but (as in other similar applications such as R), using the vectorized notation is encouraged and is often faster to execute. The following code, excerpted from the function ''magic.m'', creates a magic square
In recreational mathematics, a square array of numbers, usually positive integers, is called a magic square if the sums of the numbers in each row, each column, and both main diagonals are the same. The 'order' of the magic square is the number ...
''M'' for odd values of ''n'' (MATLAB function meshgrid
is used here to generate square matrices ''I'' and ''J'' containing ''1:n''):
,I= meshgrid(1:n);
A = mod(I + J - (n + 3) / 2, n);
B = mod(I + 2 * J - 2, n);
M = n * A + B + 1;
Structures
MATLAB supports structure data types. Since all variables in MATLAB are arrays, a more adequate name is "structure array", where each element of the array has the same field names. In addition, MATLAB supports dynamic field names (field look-ups by name, field manipulations, etc.).
Functions
When creating a MATLAB function, the name of the file should match the name of the first function in the file. Valid function names begin with an alphabetic character, and can contain letters, numbers, or underscores. Variables and functions are case sensitive.
Function handles
MATLAB supports elements of lambda calculus by introducing function handles, or function references, which are implemented either in .m files or anonymous/nested functions.
Classes and object-oriented programming
MATLAB supports object-oriented programming
Object-oriented programming (OOP) is a programming paradigm based on the concept of " objects", which can contain data and code. The data is in the form of fields (often known as attributes or ''properties''), and the code is in the form of ...
including classes, inheritance, virtual dispatch, packages, pass-by-value semantics, and pass-by-reference semantics. However, the syntax and calling conventions are significantly different from other languages. MATLAB has value classes and reference classes, depending on whether the class has ''handle'' as a super-class (for reference classes) or not (for value classes).
Method call behavior is different between value and reference classes. For example, a call to a method:
object.method();
can alter any member of ''object'' only if ''object'' is an instance of a reference class, otherwise value class methods must return a new instance if it needs to modify the object.
An example of a simple class is provided below:
classdef Hello
methods
function greet(obj)
disp('Hello!')
end
end
end
When put into a file named hello.m
, this can be executed with the following commands:
>> x = Hello();
>> x.greet();
Hello!
Graphics and graphical user interface programming
MATLAB has tightly integrated graph-plotting features. For example, the function ''plot'' can be used to produce a graph from two vectors ''x'' and ''y''. The code:
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
produces the following figure of the sine function:
MATLAB supports three-dimensional graphics as well:
MATLAB supports developing graphical user interface (GUI) applications. UIs can be generated either programmatically or using visual design environments such as ''GUIDE'' and ''App Designer''.
MATLAB and other languages
MATLAB can call functions and subroutines written in the programming languages C or Fortran. A wrapper function is created allowing MATLAB data types to be passed and returned. MEX files (MATLAB executables) are the dynamically loadable object files created by compiling such functions. Since 2014 increasing two-way interfacing with Python was being added.
Libraries written in Perl
Perl is a family of two High-level programming language, high-level, General-purpose programming language, general-purpose, Interpreter (computing), interpreted, dynamic programming languages. "Perl" refers to Perl 5, but from 2000 to 2019 it ...
, Java
Java (; id, Jawa, ; jv, ꦗꦮ; su, ) is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of 151.6 million people, Java is the world's mo ...
, ActiveX or .NET can be directly called from MATLAB, and many MATLAB libraries (for example XML or SQL support) are implemented as wrappers around Java or ActiveX libraries. Calling MATLAB from Java is more complicated, but can be done with a MATLAB toolbox which is sold separately by MathWorks, or using an undocumented mechanism called JMI (Java-to-MATLAB Interface), (which should not be confused with the unrelated Java Metadata Interface that is also called JMI). Official MATLAB API for Java was added in 2016.
As alternatives to the MuPAD based Symbolic Math Toolbox available from MathWorks, MATLAB can be connected to Maple or Mathematica.
Libraries also exist to import and export MathML.
While MATLAB is the most popular commercial numerical computation software package, other alternatives are available, such as the open source computation language GNU Octave, the statistics programming language R, the computing environment Maple, and the computational language Julia. However, Python with its numerous libraries for numerical applications ( NumPy, SciPy, Matplotlib, etc.) and high flexibility as a fully extendable multiplatform scripting language is likely the by far most important and widely used alternative today.
Relations to US sanctions
In 2020, MATLAB withdrew services from two Chinese universities as a result of US sanctions. The universities said this will be responded to by increased use of open-source alternatives and by developing domestic alternatives.
Release history
MATLAB is updated twice per year. In addition to new features and other improvements, each release has new bug fixes and smaller changes.
The number (or release number) is the version reported by Concurrent License Manager program FLEXlm. For a complete list of changes of both MATLAB and official toolboxes, consult the MATLAB release notes.
See also
* Comparison of numerical-analysis software
* List of numerical-analysis software
Notes
Further reading
*
*
*
*
External links
*
*
{{DEFAULTSORT:Matlab
Array programming languages
Articles with example MATLAB/Octave code
C (programming language) software
Computer algebra system software for Linux
Computer algebra system software for macOS
Computer algebra system software for Windows
Computer algebra systems
Computer vision software
Cross-platform software
Data mining and machine learning software
Data visualization software
Data-centric programming languages
Dynamically typed programming languages
Econometrics software
High-level programming languages
IRIX software
Linear algebra
Mathematical optimization software
Numerical analysis software for Linux
Numerical analysis software for macOS
Numerical analysis software for Windows
Numerical linear algebra
Numerical programming languages
Numerical software
Parallel computing
Plotting software
Proprietary commercial software for Linux
Proprietary cross-platform software
Regression and curve fitting software
Software modeling language
Statistical programming languages
Time series software
Domain-specific programming languages