MATLAB: Difference between revisions

Content deleted Content added
m Reverted 1 edit by 103.93.104.227 (talk) to last revision by JayBeeEll
 
(48 intermediate revisions by 17 users not shown)
Line 3:
{{For|the geographical region|Matlab (Bangladesh)}}
{{Distinguish|MATHLAB}}
{{Infobox software
| name = MATLAB (software)
| logo = Matlab Logo.png
| logo size = 150px
| logo caption = L-shaped membrane logo<ref>{{cite web|title=The L-Shaped Membrane|url=http://www.mathworks.com/company/newsletters/articles/the-l-shaped-membrane.html|publisher=MathWorks|access-date=February 7, 2014|year=2003|archive-date=April 23, 2019|archive-url=https://web.archive.org/web/20190423053626/https://www.mathworks.com/company/newsletters/articles/the-l-shaped-membrane.html|url-status=dead}}</ref>
| screenshot =
| caption = MATLAB R2015b running on Windows 10
| developer = [[MathWorks]]
| released = {{Start date and age|1984}}
| latest release version = {{wikidata|property|edit|reference|P548=Q2804309|P348}}
| latest release date = {{start date and age|{{wikidata|qualifier|mdy|single|P548=Q2804309|P348|P577}}}}
| latest preview version = {{wikidata|property|edit|reference|P548=Q2122918|P348}}
| latest preview date =
| programming language = [[C (programming language)|C]]/[[C++]], MATLAB
| operating system = [[Microsoft Windows|Windows]], [[macOS]], and [[Linux]]<ref>{{cite web|url=http://www.mathworks.com/products/availability/index.html#ML|title=System Requirements and Platform Availability|publisher=MathWorks|access-date=August 14, 2013|archive-date=October 13, 2016|archive-url=https://web.archive.org/web/20161013171819/http://www.mathworks.com/products/availability/index.html#ML|url-status=dead}}</ref><ref>{{Cite web|title=Platform Road Map for MATLAB and Simulink Product Families|url=https://de.mathworks.com/support/requirements/platform-road-map.html|access-date=2021-12-22|website=de.mathworks.com|language=en}}</ref>
| platform = [[IA-32]], [[x86-64]], [[ARM64]]
| genre = [[List of numerical-analysis software|Numerical computing]]
| license = [[Proprietary software|Proprietary]] [[commercial software]]
| website = {{URL|https://www.mathworks.com/products/matlab.html|mathworks.com}}
}}
{{Infobox programming language
| name = MATLAB (programming language)
Line 16 ⟶ 36:
| typing = [[dynamic typing|dynamic]], [[weak typing|weak]]
| scope =
| implementations = MATLAB Software, [[GNU Octave]], [[Sysquake]]
| dialects =
| influenced by = {{startflatlist}}
Line 30 ⟶ 49:
* [[GNU Octave|Octave]]<ref name="Octave">{{cite web |url=http://jbrwww.che.wisc.edu/tech-reports/twmcc-2001-03.pdf |first=John W. |last=Eaton |title=Octave: Past, Present, and Future |work=Texas-Wisconsin Modeling and Control Consortium |date=May 21, 2001 |access-date=December 1, 2016 |archive-url=https://web.archive.org/web/20170809034614/http://jbrwww.che.wisc.edu/tech-reports/twmcc-2001-03.pdf |archive-date=August 9, 2017 |url-status=dead }}</ref>
* [[Scilab]]<ref name="Scilab">{{cite web |url=https://www.scilab.org/scilab/history |title=History |publisher=Scilab |access-date=December 1, 2016 |archive-url=https://web.archive.org/web/20161201171246/http://www.scilab.org/scilab/history |archive-date=December 1, 2016 |url-status=dead }}</ref>
* [[INTLAB]]<ref name="rump">S.M. Rump: INTLAB – INTerval LABoratory. In Tibor Csendes, editor, Developments in Reliable Computing, pages 77–104. Kluwer Academic Publishers, Dordrecht, 1999.</ref><ref name="moore">Moore, R. E., Kearfott, R. B., & Cloud, M. J. (2009). Introduction to Interval Analysis. [[Society for Industrial and Applied Mathematics]].</ref><ref name="acta">Rump, S. M. (2010). Verification methods: Rigorous results using floating-point arithmetic. [[Acta Numerica]], 19, 287–449.</ref><ref name="har">Hargreaves, G. I. (2002). Interval analysis in MATLAB. Numerical Algorithms, (2009.1).</ref>
{{endflatlist}}
| operating system =
| license =
| file ext = <code>.m</code>, <code>.p</code>,<ref>{{cite web|title=Protect Your Source Code|url=https://www.mathworks.com/help/matlab/matlab_prog/protect-your-source-code.html|publisher=MathWorks|access-date=November 1, 2019}}</ref> <code>.mex*</code>,<ref>{{cite web|title=MEX Platform Compatibility|url=https://www.mathworks.com/help/matlab/matlab_external/platform-compatibility.html|publisher=MathWorks|access-date=November 1, 2019}}</ref> <code>.mat</code>,<ref>{{cite web|title=MAT-File Versions|url=https://www.mathworks.com/help/matlab/import_export/mat-file-versions.html|publisher=MathWorks|access-date=November 1, 2019}}</ref> <code>.fig</code>,<ref>{{cite web|title=Save Figure to Reopen in MATLAB Later|url=https://www.mathworks.com/help/matlab/creating_plots/save-figure-to-reopen-in-matlab-later.html|publisher=MathWorks|access-date=November 1, 2019}}</ref> <code>.mlx</code>,<ref>{{cite web|title=Live Code File Format (.mlx)|url=https://www.mathworks.com/help/matlab/matlab_prog/live-script-file-format.html|publisher=MathWorks|access-date=November 1, 2019}}</ref> <code>.mlapp</code>,<ref>{{cite web|title=MATLAB App Designer|url=https://www.mathworks.com/help/matlab/ref/appdesigner.html|publisher=MathWorks|access-date=November 1, 2019}}</ref> <code>.mltbx</code>,<ref>{{cite web|title=Toolbox Distribution|url=https://www.mathworks.com/help/matlab/creating-help.html|publisher=MathWorks|access-date=November 1, 2019}}</ref> <code>.mlappinstall</code>,<ref>{{cite web|title=MATLAB App Installer File|url=https://www.mathworks.com/help/matlab/creating_guis/what-is-an-app.html|publisher=MathWorks|access-date=November 1, 2019|archive-date=January 17, 2014|archive-url=https://web.archive.org/web/20140117002416/https://www.mathworks.com/help/matlab/creating_guis/what-is-an-app.html|url-status=dead}}</ref> <code>.mlpkginstall</code><ref>{{cite web|title=Support Package Installation|url=https://www.mathworks.com/help/matlab/matlab_external/support-package-installation.html|publisher=MathWorks|access-date=November 1, 2019|archive-date=October 6, 2014|archive-url=https://web.archive.org/web/20141006135910/https://www.mathworks.com/help/matlab/matlab_external/support-package-installation.html|url-status=dead}}</ref>
| website = {{URLurl|https://www.mathworks.com/products/matlab.html|mathworks.com}}
| wikibooks = MATLAB Programming
}}
{{Infobox software
| name = MATLAB (software)
| logo = [[File:Matlab Logo.png|121px]]
| logo caption = L-shaped membrane logo<ref>{{cite web|title=The L-Shaped Membrane|url=http://www.mathworks.com/company/newsletters/articles/the-l-shaped-membrane.html|publisher=MathWorks|access-date=February 7, 2014|year=2003}}</ref>
| screenshot =
| caption = MATLAB R2015b running on Windows 10
| developer = [[MathWorks]]
| released = {{Start date and age|1984}}
| latest release version = {{wikidata|property|edit|reference|P548=Q2804309|P348}}
| latest release date = {{start date and age|{{wikidata|qualifier|mdy|single|P548=Q2804309|P348|P577}}}}
| latest preview version = {{wikidata|property|edit|reference|P548=Q2122918|P348}}
| latest preview date =
| programming language = [[C (programming language)|C]]/[[C++]], MATLAB
| operating system = [[Microsoft Windows|Windows]], [[macOS]], and [[Linux]]<ref>{{cite web|url=http://www.mathworks.com/products/availability/index.html#ML|title=System Requirements and Platform Availability|publisher=MathWorks|access-date=August 14, 2013}}</ref><ref>{{Cite web|title=Platform Road Map for MATLAB and Simulink Product Families|url=https://de.mathworks.com/support/requirements/platform-road-map.html|access-date=2021-12-22|website=de.mathworks.com|language=en}}</ref>
| platform = [[IA-32]], [[x86-64]], [[ARM64]]
| genre = [[List of numerical-analysis software|Numerical computing]]
| license = [[Proprietary software|Proprietary]] [[commercial software]]
| website = {{URL|https://www.mathworks.com/products/matlab.html|mathworks.com}}
}}
 
'''MATLAB''' (an'''Matrix abbreviation of "MATrix LABoratory"Laboratory''')<ref>{{Cite web |title=Matrices and Arrays - MATLAB & Simulink |url=https://www.mathworks.com/help/matlab/learn_matlab/matrices-and-arrays.html |access-date=2022-05-21 |website=www.mathworks.com}}</ref>) is a [[Proprietary software|proprietary]] [[multi-paradigm programming language|multi-paradigm]] [[programming language]] and [[numerical analysis|numeric computing]] environment developed by [[MathWorks]]. MATLAB allows [[matrix (mathematics)|matrix]] manipulations, plotting of [[function (mathematics)|functions]] and data, implementation of [[algorithm]]s, creation of [[user interface]]s, and interfacing with programs written in other languages.
 
Although MATLAB is intended primarily for numeric computing, an optional toolbox uses the [[MuPAD]] [[computer algebra system|symbolic engine]] allowing access to [[symbolic computing]] abilities. An additional package, [[Simulink]], adds graphical multi-___domain simulation and [[model-based design]] for [[dynamical system|dynamic]] and [[embedded system]]s.
 
{{As of|2020}}, MATLAB has more than four million users worldwide.<ref name="mathworksCompanyOverview">{{cite web|title=Company Overview|url=https://uk.mathworks.com/content/dam/mathworks/handout/2020-company-factsheet-8-5x11-8282v20.pdf|author=The MathWorks|date=February 2020|access-date=May 11, 2020|archive-date=July 19, 2020|archive-url=https://web.archive.org/web/20200719211946/https://uk.mathworks.com/content/dam/mathworks/handout/2020-company-factsheet-8-5x11-8282v20.pdf|url-status=dead}}</ref> They come from various backgrounds of [[engineering]], [[science]], and [[economics]]. {{As of|2017}}, more than 5000 global colleges and universities use MATLAB to support instruction and research.<ref>{{Cite web |title=Current number of matlab users worldwide |url=https://www.mathworks.com/matlabcentral/answers/77436-current-number-of-matlab-users-worldwide |date=2017-11-09 |access-date=2023-04-26 |website=Mathworks}}</ref>
 
==History==
===Origins===
MATLAB was invented by mathematician and computer programmer [[Cleve Moler]].<ref name="Chonacky Winch 2005 pp. 9–10">{{cite journal | last1=Chonacky | first1=N. | last2=Winch | first2=D. | title=Reviews of Maple, Mathematica, and Matlab: Coming Soon to a Publication Near You | journal=Computing in Science & Engineering | publisher=Institute of Electrical and Electronics Engineers (IEEE) | volume=7 | issue=2 | year=2005 | issn=1521-9615 | doi=10.1109/mcse.2005.39 | pages=9–10| bibcode=2005CSE.....7b...9C | s2cid=29660034 }}</ref> The idea for MATLAB was based on his 1960s PhD [[thesis]].<ref name="Chonacky Winch 2005 pp. 9–10" /> Moler became a math professor at the [[University of New Mexico]] and started developing MATLAB for his students<ref name="Chonacky Winch 2005 pp. 9–10" /> as a hobby.<ref name="hobby" /> He developed MATLAB's initial [[linear algebra]] programming in 1967 with his one-time thesis advisor, [[George Forsythe]].<ref name="Chonacky Winch 2005 pp. 9–10" /> This was followed by [[Fortran]] code for [[Linear equation|linear equations]] in 1971.<ref name="Chonacky Winch 2005 pp. 9–10" />
 
Before version 1.0, MATLAB "was not a programming language; it was a simple interactive [[Matrix (mathematics)|matrix]] calculator. There were no programs, no toolboxes, no graphics. And no [[Ordinary differential equation|ODE]]s or [[FFT]]s."<ref>{{Cite web|title=A Brief History of MATLAB|url=https://www.mathworks.com/company/newsletters/articles/a-brief-history-of-matlab.html|access-date=2021-09-04|website=www.mathworks.com|language=en}}</ref>
 
The first early version of MATLAB was completed in the late 1970s.<ref name="Chonacky Winch 2005 pp. 9–10" /> The software was disclosed to the public for the first time in February 1979 at the [[Naval Postgraduate School]] in California.<ref name="hobby">{{cite journal|url=http://www.tomandmaria.com/Tom/Writing/MolerBio.pdf|first=Thomas|last=Haigh|title=Cleve Moler: Mathematical Software Pioneer and Creator of Matlab|publisher=IEEE Computer Society|journal=IEEE Annals of the History of Computing}}</ref> Early versions of MATLAB were simple [[Matrix (mathematics)|matrix calculators]] with 71 pre-built functions.<ref name="Moler Little pp. 1–67">{{cite journal | last1=Moler | first1=Cleve | last2=Little | first2=Jack | title=A history of MATLAB | journal=Proceedings of the ACM on Programming Languages | publisher=Association for Computing Machinery (ACM) | volume=4 | issue=HOPL | date=June 12, 2020 | pages=1–67 | issn=2475-1421 | doi=10.1145/3386331| doi-access=free }}</ref> At the time, MATLAB was distributed for free<ref name="Xue Press 2020 p. 21">{{cite book | last1=Xue | first1=D. | last2=Press | first2=T.U. | title=MATLAB Programming: Mathematical Problem Solutions | publisher=De Gruyter | series=De Gruyter STEM | year=2020 | isbn=978-3-11-066370-9 | url=https://books.google.com/books?id=0Y7ZDwAAQBAJ&pg=PP21 | access-date=September 16, 2020 | page=21}}</ref><ref name="Press 2008 p. 6">{{cite book | last=Press | first=CRC | title=Solving Applied Mathematical Problems with MATLAB | publisher=CRC Press | year=2008 | isbn=978-1-4200-8251-7 | url=https://books.google.com/books?id=V4vulPEc29kC&pg=PA6 | access-date=September 16, 2020 | page=6}}</ref> to universities.<ref name="Woodford Phillips 2011 p. 1">{{cite book | last1=Woodford | first1=C. | last2=Phillips | first2=C. | title=Numerical Methods with Worked Examples: Matlab Edition | publisher=Springer Netherlands | series=SpringerLink : Bücher | year=2011 | isbn=978-94-007-1366-6 | url=https://books.google.com/books?id=L90JVxIvA0YC&pg=PA1 | access-date=September 16, 2020 | page=1}}</ref> Moler would leave copies at universities he visited and the software developed a strong following in the math departments of university campuses.<ref name="Tranquillo 2011 p.">{{cite book | last=Tranquillo | first=J.V. | title=MATLAB for Engineering and the Life Sciences | publisher=Morgan & Claypool Publishers | series=Synthesis digital library of engineering and computer science | year=2011 | isbn=978-1-60845-710-6 | url=https://books.google.com/books?id=ofWpMryW0lgC | access-date=September 17, 2020 | page=}}</ref>{{RP|5}}
 
In the 1980s, Cleve Moler met [[John N. Little]]. They decided to reprogram MATLAB in [[C (programming language)|C]] and market it for the [[IBM]] [[Desktop computer|desktops]] that were replacing [[Mainframe computer|mainframe computers]] at the time.<ref name="Chonacky Winch 2005 pp. 9–10" /> John Little and programmer Steve Bangert re-programmed MATLAB in C, created the MATLAB programming language, and developed features for toolboxes.<ref name="hobby" />
 
Since 1993 an open source alternative, [[GNU Octave]] (mostly compatible with matlab) and [[scilab]] (similar to matlab) have been available.
 
===Commercial development===
Line 86 ⟶ 83:
 
===Recent history===
Some especially large changes to the software were made with version 8 in 2012.<ref name="Cho Martinez 2014 p.">{{cite book | last1=Cho | first1=M.J. | last2=Martinez | first2=W.L. | title=Statistics in MATLAB: A Primer | publisher=CRC Press | series=Chapman & Hall/CRC Computer Science & Data Analysis | year=2014 | isbn=978-1-4665-9657-3 | url=https://books.google.com/books?id=X0IqBgAAQBAJ | access-date=September 17, 2020 | page=}}</ref> The [[user interface]] was reworked{{fact|date=February 2021}} and [[Simulink]]'s functionality was expanded.<ref name="Xue Chen 2013 p. 17">{{cite book | last1=Xue | first1=D. | last2=Chen | first2=Y. | title=System Simulation Techniques with MATLAB and Simulink | publisher=Wiley | series=No Longer used | year=2013 | isbn=978-1-118-69437-4 | url=https://books.google.com/books?id=6d7iAAAAQBAJ&pg=PT17 | access-date=October 15, 2020 | page=17}}</ref>

By 2016, MATLAB had introduced several technical and user interface improvements, including the MATLAB Live [[Source-code editor|Editor]] notebook, and other features.<ref name="Moler Little pp. 1–67" />
 
==Release history==
For a complete list of changes of both MATLAB an official toolboxes, check MATLAB previous releases.<ref>{{cite web|title=MATLAB Previous releases|url=https://www.mathworks.com/support/requirements/previous-releases.html|publisher=MathWorks|accessdate=Dec 3, 2024}}</ref>
{|class="sortable wikitable"
|+ '''Versions of the MATLAB product family'''
!Name of release
!MATLAB
!Simulink, Stateflow (MATLAB attachments)
!Year
|-
!Volume 8
|5.0
|
|1996
|-
!Volume 9
|5.1
|
|1997
|-
!R9.1
|5.1.1
|
|1997
|-
!R10
|5.2
|
|1998
|-
!R10.1
|5.2.1
|
|1998
|-
!R11
|5.3
|
|1999
|-
!R11.1
|5.3.1
|
|1999
|-
!R12
|6.0
|
|2000
|-
!R12.1
|6.1
|
|2001
|-
!R13
|6.5
|
|2002
|-
!R13SP1
|6.5.1
|
| rowspan=2|2003
|-
!R13SP2
|6.5.2
|
|-
!R14
|7
|6.0
| rowspan=2|2004
|-
!R14SP1
|7.0.1
|6.1
|-
!R14SP2
|7.0.4
|6.2
| rowspan=2|2005
|-
!R14SP3
|7.1
|6.3
|-
!R2006a
|7.2
|6.4
| rowspan=2|2006
|-
!R2006b
|7.3
|6.5
|-
!R2007a
|7.4
|6.6
| rowspan=2|2007
|-
!R2007b
|7.5
|7.0
|-
!R2008a
|7.6
|7.1
| rowspan=2|2008
|-
!R2008b
|7.7
|7.2
|-
!R2009a
|7.8
|7.3
| rowspan=2|2009
|-
!R2009b
|7.9
|7.4
|-
!R2010a
|7.10
|7.5
| rowspan=2|2010
|-
!R2010b
|7.11
|7.6
|-
!R2011a
|7.12
|7.7
| rowspan=2|2011
|-
!R2011b
|7.13
|7.8
|-
!R2012a
|7.14
|7.9
|rowspan=2|2012
|-
!R2012b
|8.0
|8.0
|-
!R2013a
|8.1
|8.1
|rowspan=2|2013
|-
!R2013b
|8.2
|8.2
|-
!R2014a
|8.3
|8.3
|rowspan=2|2014
|-
!R2014b
|8.4
|8.4
|-
!R2015a
|8.5
|8.5
|rowspan=2|2015
|-
!R2015b
|8.6
|8.6
|-
!R2016a
|9.0
|8.7
| rowspan="2" |2016
|-
!R2016b
|9.1
|8.8
|-
!R2017a
|9.2
|8.9
| rowspan="2" |2017
|-
!R2017b
|9.3
|9.0
|-
!R2018a
|9.4
|9.1
| rowspan="2" |2018
|-
!R2018b
|9.5
|9.2
|-
!R2019a
|9.6
|9.3
| rowspan="2" |2019
|-
!R2019b
|9.7
|10.0
|-
!R2020a
|9.8
|10.1
| rowspan="2" |2020
|-
!R2020b
|9.9
|10.2
|-
!R2021a
|9.10
|10.3
| rowspan="2" |2021
|-
!R2021b
|9.11
|10.4
|-
!R2022a
|9.12
|10.5
| rowspan="2" |2022
|-
!R2022b
|9.13
|10.6
|-
!R2023a
|9.14
|10.7
| rowspan="2" |2023
|-
!R2023b
|23.2
|23.2
|-
!R2024a
|24.1
|24.1
| rowspan="2" |2024
|-
!R2024b
|24.2
|24.2
|-
!R2025a
|25.1
|25.1
|2025
|-
|
|}
 
==Syntax==
The MATLAB application is built around the MATLAB programming language.

Common usage of the MATLAB application involves using the "[[Command-line interface|Command Window]]" as an interactive mathematical [[command line interface|shell]] or executing [[Text file|text files]] containing MATLAB code.<ref>{{cite web|url=http://www.mathworks.com/help/matlab/index.html|title=MATLAB Documentation |publisher=MathWorks|access-date=August 14, 2013|archive-date=June 19, 2024|archive-url=https://web.archive.org/web/20240619172747/https://www.mathworks.com/help/matlab/index.html|url-status=dead}}</ref>
 
=== "Hello, world!" example ===
Line 105 ⟶ 371:
 
===Variables===
[[Variable (computer science)|Variables]] are defined using the [[Assignment (computer science)|assignment]] operator, <code>=</code>.
Variables are defined using the assignment operator, <code>=</code>. MATLAB is a [[Strong and weak typing|weakly typed]] programming language because types are implicitly converted.<ref>{{cite web|title=Comparing MATLAB with Other OO Languages|url=http://www.mathworks.com/help/matlab/matlab_oop/matlab-vs-other-oo-languages.html|work=MATLAB|publisher=MathWorks|access-date=August 14, 2013}}</ref> It is an inferred typed language because variables can be assigned without declaring their type, except if they are to be treated as symbolic objects,<ref>{{cite web|title=Create Symbolic Variables and Expressions|url=http://www.mathworks.com/help/symbolic/creating-symbolic-variables-and-expressions.html|work=Symbolic Math Toolbox|publisher=MathWorks|access-date=August 14, 2013}}</ref> and that their type can change. Values can come from [[constant (computer science)|constant]]s, from computation involving values of other variables, or from the output of a function. For example:
 
MATLAB is a [[Strong and weak typing|weakly typed]] programming language because [[Data type|types]] are implicitly converted.<ref>{{cite web|title=Comparing MATLAB with Other OO Languages|url=http://www.mathworks.com/help/matlab/matlab_oop/matlab-vs-other-oo-languages.html|work=MATLAB|publisher=MathWorks|access-date=August 14, 2013|archive-date=October 29, 2013|archive-url=https://web.archive.org/web/20131029194449/http://www.mathworks.com/help/matlab/matlab_oop/matlab-vs-other-oo-languages.html|url-status=dead}}</ref> It is an [[Type inference|inferred]] [[Type system|typed language]] because variables can be assigned without declaring their type, except if they are to be treated as symbolic objects,<ref>{{cite web|title=Create Symbolic Variables and Expressions|url=http://www.mathworks.com/help/symbolic/creating-symbolic-variables-and-expressions.html|work=Symbolic Math Toolbox|publisher=MathWorks|access-date=August 14, 2013|archive-date=July 12, 2013|archive-url=https://web.archive.org/web/20130712032649/http://www.mathworks.com/help/symbolic/creating-symbolic-variables-and-expressions.html|url-status=dead}}</ref> and that their type can change.
 
Values can come from [[constant (computer science)|constant]]s, from computation involving values of other variables, or from the output of a [[Function (computer programming)|function]].
 
For example:
<syntaxhighlight lang="matlabsession">
>> x = 17
Line 141 ⟶ 413:
assigns to the variable named <code>ari</code> an array with the values 1, 2, 3, 4, and 5, since the default value of 1 is used as the increment.
 
[[One-based indexing|Indexing]] is one-based,<ref>{{cite web|title=Matrix Indexing|url=http://www.mathworks.com/help/matlab/math/matrix-indexing.html|publisher=MathWorks|access-date=August 14, 2013|archive-date=August 9, 2018|archive-url=https://web.archive.org/web/20180809011619/http://www.mathworks.com/help/matlab/math/matrix-indexing.html|url-status=dead}}</ref> which is the usual convention for [[matrix (mathematics)|matrices]] in mathematics, unlike zero-based indexing commonly used in other programming languages such as C, [[C++]], and [[Java (programming language)|Java]].
 
Matrices can be defined by separating the elements of a row with blank space or comma and using a semicolon to separate the rows. The list of elements should be surrounded by square brackets <code>[]</code>. Parentheses <code>()</code> are used to access elements and subarrays (they are also used to denote a function argument list).
Line 215 ⟶ 487:
 
=== Structures ===
MATLAB supports structure data types.<ref>{{cite web|title=Structures|url=http://www.mathworks.com/help/matlab/structures.html|publisher=MathWorks|access-date=August 14, 2013|archive-date=July 13, 2019|archive-url=https://web.archive.org/web/20190713130421/https://www.mathworks.com/help/matlab/structures.html|url-status=dead}}</ref> 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<ref>{{cite web|title=Generate Field Names from Variables|url=http://www.mathworks.com/help/matlab/matlab_prog/generate-field-names-from-variables.html|publisher=MathWorks|access-date=August 14, 2013|archive-date=December 5, 2019|archive-url=https://web.archive.org/web/20191205162532/https://www.mathworks.com/help/matlab/matlab_prog/generate-field-names-from-variables.html|url-status=dead}}</ref> (field look-ups by name, field manipulations, etc.).
 
=== Functions ===
Line 238 ⟶ 510:
 
=== Function handles ===
MATLAB supports elements of [[lambda calculus]] by introducing function handles,<ref>{{cite web|title=Function Handles|url=http://www.mathworks.com/help/matlab/function-handles.html|publisher=MathWorks|access-date=August 14, 2013|archive-date=July 19, 2020|archive-url=https://web.archive.org/web/20200719160702/https://www.mathworks.com/help/matlab/function-handles.html|url-status=dead}}</ref> or function references, which are implemented either in .m files or anonymous<ref>{{cite web|title=Anonymous Functions|url=http://www.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html|publisher=MathWorks|access-date=August 14, 2013}}{{Dead link|date=July 2025 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>/nested functions.<ref>{{cite web|title=Nested Functions|url=http://www.mathworks.com/help/matlab/matlab_prog/nested-functions.html|publisher=MathWorks.|access-date=August 14, 2013|archive-date=July 19, 2020|archive-url=https://web.archive.org/web/20200719221302/https://www.mathworks.com/help/matlab/matlab_prog/nested-functions.html|url-status=dead}}</ref>
 
=== Classes and object-oriented programming ===
MATLAB supports [[object-oriented programming]] including classes, [[inheritance (object-oriented programming)|inheritance]], virtual dispatch, packages, [[pass-by-value]] semantics, and [[pass-by-reference]] semantics.<ref>{{cite web|url=http://www.mathworks.com/help/matlab/object-oriented-programming.html |title=Object-Oriented Programming|publisher=MathWorks|access-date=August 14, 2013|archive-date=December 5, 2019|archive-url=https://web.archive.org/web/20191205162541/https://www.mathworks.com/help/matlab/object-oriented-programming.html|url-status=dead}}</ref> 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).<ref>{{cite web|title=Comparing Handle and Value Classes|url=http://www.mathworks.com/help/matlab/matlab_oop/comparing-handle-and-value-classes.html|publisher=MathWorks|access-date=August 14, 2013|archive-date=December 5, 2019|archive-url=https://web.archive.org/web/20191205162818/https://www.mathworks.com/help/matlab/matlab_oop/comparing-handle-and-value-classes.html|url-status=dead}}</ref>
 
Method call behavior is different between value and reference classes. For example, a call to a method:
Line 405 ⟶ 677:
|}
 
MATLAB supports developing [[graphical user interface]] (GUI) applications.<ref>{{cite web | url=http://www.mathworks.com/discovery/matlab-gui.html | title=MATLAB GUI | publisher=MathWorks | date=April 30, 2011 | access-date=August 14, 2013 | archive-date=January 17, 2022 | archive-url=https://web.archive.org/web/20220117115213/https://www.mathworks.com/discovery/matlab-gui.html | url-status=dead }}</ref> UIs can be generated either programmatically or using visual design environments such as ''GUIDE'' and ''App Designer''.<ref>{{cite web|title=Create a Simple GUIDE GUI|url=http://www.mathworks.com/help/matlab/creating_guis/about-the-simple-guide-gui-example.html|publisher=MathWorks|access-date=August 14, 2014|archive-date=October 5, 2014|archive-url=https://web.archive.org/web/20141005205720/http://www.mathworks.com/help/matlab/creating_guis/about-the-simple-guide-gui-example.html|url-status=dead}}</ref><ref>{{cite web|title=MATLAB App Designer|url=https://www.mathworks.com/products/matlab/app-designer.html|publisher=MathWorks|access-date=November 1, 2019}}</ref>
 
== MATLAB and other languages ==
MATLAB can call functions and subroutines written in the programming languages [[C (programming language)|C]] or [[Fortran]].<ref>{{cite web|title=Application Programming Interfaces to MATLAB|url=http://www.mathworks.com/help/matlab/programming-interfaces-for-c-c-fortran-com.html|publisher=MathWorks|access-date=August 14, 2013|archive-date=September 15, 2017|archive-url=https://web.archive.org/web/20170915020649/http://www.mathworks.com/help/matlab/programming-interfaces-for-c-c-fortran-com.html|url-status=dead}}</ref> A wrapper function is created allowing MATLAB data types to be passed and returned. [[MEX file]]s (MATLAB executables) are the dynamically loadable object files created by compiling such functions.<ref>{{cite web|title=Create MEX-Files|url=http://www.mathworks.com/help/matlab/create-mex-files.html|publisher=MathWorks|access-date=August 14, 2013|archive-date=March 3, 2014|archive-url=https://web.archive.org/web/20140303193228/http://www.mathworks.com/help/matlab/create-mex-files.html|url-status=dead}}</ref><ref>{{cite web|title=Connecting C and Matlab | last=Spielman | first=Dan | publisher=Yale University, Computer Science Department | date=February 10, 2004 | url=http://www.cs.yale.edu/homes/spielman/ECC/cMatlab.html | access-date=May 20, 2008}}</ref> Since 2014 increasing two-way interfacing with [[Python (programming language)|Python]] was being added.<ref>{{cite web|title=MATLAB Engine for Python|url=http://www.mathworks.com/help/matlab/matlab-engine-for-python.html|publisher=MathWorks|access-date=June 13, 2015}}{{Dead link|date=July 2025 |bot=InternetArchiveBot |fix-attempted=yes }}</ref><ref>{{cite web|title=Call Python Libraries|url=http://www.mathworks.com/help/matlab/call-python-libraries.html|publisher=MathWorks|access-date=June 13, 2015|archive-date=December 5, 2019|archive-url=https://web.archive.org/web/20191205162912/https://www.mathworks.com/help/matlab/call-python-libraries.html|url-status=dead}}</ref>
 
Libraries written in [[Perl]], [[Java (programming language)|Java]], [[ActiveX]] or [[.NET Framework|.NET]] can be directly called from MATLAB,<ref>{{cite web|title=External Programming Language Interfaces|url=http://www.mathworks.com/help/matlab/external-interfaces.html|publisher=MathWorks|access-date=August 14, 2013|archive-date=March 11, 2014|archive-url=https://web.archive.org/web/20140311003229/http://www.mathworks.com/help/matlab/external-interfaces.html|url-status=dead}}</ref><ref>{{cite web|title=Call Perl script using appropriate operating system executable|url=http://www.mathworks.com/help/matlab/ref/perl.html|publisher=MathWorks|access-date=November 7, 2013|archive-date=December 5, 2019|archive-url=https://web.archive.org/web/20191205162718/https://www.mathworks.com/help/matlab/ref/perl.html|url-status=dead}}</ref> 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<ref>{{cite web |url=http://www.mathworks.com/products/javabuilder/ |title=MATLAB Builder JA |publisher=MathWorks |access-date=June 7, 2010 |archive-date=June 4, 2011 |archive-url=https://web.archive.org/web/20110604183233/http://www.mathworks.com/products/javabuilder/ |url-status=dead }}</ref> which is sold separately by [[MathWorks]], or using an undocumented mechanism called JMI (Java-to-MATLAB Interface),<ref>{{cite web |url=http://undocumentedmatlab.com/blog/jmi-java-to-matlab-interface/ |first=Yair |last=Altman |title=Java-to-Matlab Interface |publisher=Undocumented Matlab |date=April 14, 2010 |access-date=June 7, 2010 |archive-date=September 5, 2015 |archive-url=https://web.archive.org/web/20150905153327/http://undocumentedmatlab.com/blog/jmi-java-to-matlab-interface |url-status=dead }}</ref><ref>{{cite web|title=matlabcontrol JMI|url=https://code.google.com/p/matlabcontrol/wiki/JMI|first=Joshua |last=Kaplan}}</ref> (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.<ref name="MATLAB Engine API for Java">{{cite web|title=MATLAB Engine API for Java|url=http://www.mathworks.com/help/matlab/matlab-engine-api-for-java.html|publisher=MathWorks|access-date=September 15, 2016|archive-date=September 19, 2020|archive-url=https://web.archive.org/web/20200919194505/https://www.mathworks.com/help/matlab/matlab-engine-api-for-java.html|url-status=dead}}</ref>
 
As alternatives to the [[MuPAD]] based Symbolic Math Toolbox available from MathWorks, MATLAB can be connected to [[Maple (software)|Maple]] or [[Mathematica]].<ref>{{cite web|title=MaMa: Calling MATLAB from Mathematica with MathLink|url=http://library.wolfram.com/infocenter/MathSource/618/|publisher=Wolfram Library Archive|first=Roger |last=Germundsson |work=[[Wolfram Research]] |date=September 30, 1998}}</ref><ref>{{cite web|title=MATLink: Communicate with MATLAB from Mathematica|url=http://matlink.org/|access-date=August 14, 2013|author1=rsmenon |author2=szhorvat|year=2013}}</ref>
Line 475 ⟶ 747:
[[Category:Cross-platform software]]
[[Category:Data mining and machine learning software]]
[[Category:Data and information visualization software]]
[[Category:Data-centric programming languages]]
[[Category:Dynamically typed programming languages]]
Line 492 ⟶ 764:
[[Category:Plotting software]]
[[Category:Proprietary commercial software for Linux]]
[[Category:Proprietary cross-platform software]]
[[Category:Regression and curve fitting software]]
[[Category:Software modeling language]]