Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
MATLAB
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Numerical computing environment and programming language}} {{Use mdy dates|date=September 2020}} {{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}}</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}} }} {{Infobox programming language | name = MATLAB (programming language) | paradigm = [[Multi-paradigm programming language|multi-paradigm]]: [[Functional programming|functional]], [[Imperative programming|imperative]], [[Procedural programming|procedural]], [[Object-oriented programming|object-oriented]], [[Array programming|array]] | family = | year = late 1970s | designer = [[Cleve Moler]] | developer = [[MathWorks]] | 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 = | typing = [[dynamic typing|dynamic]], [[weak typing|weak]] | scope = | dialects = | influenced by = {{startflatlist}} * [[APL (programming language)|APL]] * [[EISPACK]] * [[Fortran]] * [[LINPACK]] * [[PL/0]] * [[Speakeasy (computational environment)|Speakeasy]]<ref>{{cite web |url=http://archive.computerhistory.org/resources/access/text/2013/12/102746804-05-01-acc.pdf |title=An interview with CLEVE MOLER Conducted by Thomas Haigh On 8 and 9 March, 2004 Santa Barbara, California |publisher=Computer History Museum |quote=So APL, Speakeasy, LINPACK, EISPACK, and PL0 were the predecessors to MATLAB. |access-date=December 6, 2016 |archive-url=https://web.archive.org/web/20141227140938/http://archive.computerhistory.org/resources/access/text/2013/12/102746804-05-01-acc.pdf |archive-date=December 27, 2014 |url-status=dead }}</ref> {{endflatlist}} | influenced = {{startflatlist}} * [[Julia (programming language)|Julia]]<ref name="Julia">{{cite web |url=http://julialang.org/blog/2012/02/why-we-created-julia |first1=Jeff |last1=Bezanson |first2=Stefan |last2=Karpinski |first3=Viral |last3=Shah |first4=Alan |last4=Edelman |title=Why We Created Julia |publisher=Julia Language |date=February 14, 2012 |access-date=December 1, 2016}}</ref> * [[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> {{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}}</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}}</ref> | website = {{url|https://www.mathworks.com/products/matlab.html|mathworks.com}} | wikibooks = MATLAB Programming }} '''MATLAB''' (an abbreviation of "MATrix 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}}</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" /> ===Commercial development=== MATLAB was first released as a commercial product in 1984 at the Automatic Control Conference in [[Las Vegas]].<ref name="Chonacky Winch 2005 pp. 9β10" /><ref name="hobby" /> [[MathWorks]], Inc. was founded to develop the software<ref name="Press 2008 p. 6"/> and the MATLAB programming language was released.<ref name="Moler Little pp. 1β67" /> The first MATLAB sale was the following year, when [[Nick Trefethen]] from the [[Massachusetts Institute of Technology]] bought ten copies.<ref name="hobby" /><ref name="LoTurco 2020">{{cite web | last=LoTurco | first=Lori | title=Accelerating the pace of engineering | website=MIT News |publisher=Massachusetts Institute of Technology | date=January 28, 2020 | url=https://news.mit.edu/2020/accelerating-pace-engineering-mathworks-fellows-0128 | access-date=September 16, 2020}}</ref> By the end of the 1980s, several hundred copies of MATLAB had been sold to universities for student use.<ref name="hobby" /> The software was popularized largely thanks to toolboxes created by experts in various fields for performing specialized mathematical tasks.<ref name="Xue Press 2020 p. 21" /> Many of the toolboxes were developed as a result of [[Stanford University|Stanford]] students that used MATLAB in academia, then brought the software with them to the private sector.<ref name="hobby" /> Over time, MATLAB was re-written for early operating systems created by [[Digital Equipment Corporation]], [[VAX]], [[Sun Microsystems]], and for Unix PCs.<ref name="hobby" /><ref name="Moler Little pp. 1β67" /> Version 3 was released in 1987.<ref name="Gatto Rizzoli 1993 pp. 85β88">{{cite journal | last1=Gatto | first1=Marino | last2=Rizzoli | first2=Andrea | title=Review of MATLAB, Version 4.0 | journal=Natural Resource Modeling | publisher=Wiley | volume=7 | issue=1 | year=1993 | issn=0890-8575 | doi=10.1111/j.1939-7445.1993.tb00141.x | pages=85β88| bibcode=1993NRM.....7...85G }}</ref> The first MATLAB compiler was developed by [[Stephen C. Johnson]] in the 1990s.<ref name="Moler Little pp. 1β67" /> In 2000, MathWorks added a Fortran-based library for linear algebra in MATLAB 6, replacing the software's original LINPACK and EISPACK subroutines that were in C.<ref name="Moler Little pp. 1β67" /> MATLAB's Parallel Computing Toolbox was released at the 2004 Supercomputing Conference and support for graphics processing units (GPUs) was added to it in 2010.<ref name="Moler Little pp. 1β67" /> ===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 |- |} ==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}}</ref> === "Hello, world!" example === An example of a [["Hello, world!" program]] exists in MATLAB. <syntaxhighlight lang="matlab"> disp('Hello, world!') </syntaxhighlight> It displays like so: <syntaxhighlight lang="output"> Hello, world! </syntaxhighlight> ===Variables=== [[Variable (computer science)|Variables]] are defined using the [[Assignment (computer science)|assignment]] operator, <code>=</code>. 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}}</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}}</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 x = 17 >> x = 'hat' x = hat >> x = [3*4, pi/2] x = 12.0000 1.5708 >> y = 3*sin(x) y = -1.6097 3.0000 </syntaxhighlight> === Vectors and matrices === A simple array is defined using the colon syntax: ''initial''<code>:</code>''increment''<code>:</code>''terminator''. For instance: <syntaxhighlight lang="matlabsession"> >> array = 1:2:9 array = 1 3 5 7 9 </syntaxhighlight> defines a variable named <code>array</code> (or assigns a new value to an existing variable with the name <code>array</code>) 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. <syntaxhighlight lang="matlabsession"> >> ari = 1:5 ari = 1 2 3 4 5 </syntaxhighlight> 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}}</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). <syntaxhighlight lang="matlabsession"> >> A = [16, 3, 2, 13 ; 5, 10, 11, 8 ; 9, 6, 7, 12 ; 4, 15, 14, 1] A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 >> A(2,3) ans = 11 </syntaxhighlight> Sets of indices can be specified by expressions such as <code>2:4</code>, which evaluates to <code>[2, 3, 4]</code>. For example, a submatrix taken from rows 2 through 4 and columns 3 through 4 can be written as: <syntaxhighlight lang="matlabsession"> >> A(2:4,3:4) ans = 11 8 7 12 14 1 </syntaxhighlight> A square [[identity matrix]] of size ''n'' can be generated using the function <code>eye</code>, and matrices of any size with zeros or ones can be generated with the functions <code>zeros</code> and <code>ones</code>, respectively. <syntaxhighlight lang="matlabsession"> >> 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 </syntaxhighlight> [[Transpose|Transposing]] a vector or a matrix is done either by the function <code>transpose</code> or by adding dot-prime after the matrix (without the dot, prime will perform [[conjugate transpose]] for complex arrays): <syntaxhighlight lang="matlabsession"> >> A = [1 ; 2], B = A.', C = transpose(A) A = 1 2 B = 1 2 C = 1 2 >> D = [0, 3 ; 1, 5], D.' D = 0 3 1 5 ans = 0 1 3 5 </syntaxhighlight> Most functions accept arrays as input and operate element-wise on each element. For example, <code>mod(2*J,n)</code> will multiply every element in ''J'' by 2, and then reduce each element modulo ''n''. MATLAB does include standard <code>for</code> and <code>while</code> loops, but (as in other similar applications such as [[APL (programming language)|APL]] and [[R (programming language)|R]]), using the [[Array programming|vectorized]] notation is encouraged and is often faster to execute. The following code, excerpted from the function ''magic.m'', creates a [[magic square]] ''M'' for odd values of ''n'' (MATLAB function <code>meshgrid</code> is used here to generate square matrices {{mvar|I}} and {{mvar|J}} containing {{tmath|1:n}}): <syntaxhighlight lang="matlab"> [J,I] = meshgrid(1:n); A = mod(I + J - (n + 3) / 2, n); B = mod(I + 2 * J - 2, n); M = n * A + B + 1; </syntaxhighlight> === 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}}</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}}</ref> (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.<ref>{{cite web|title=Case and Space Sensitivity|url=https://www.mathworks.com/help/matlab/matlab_prog/case-and-space-sensitivity.html|publisher=MathWorks|access-date=November 1, 2019}}</ref> {{sxhl|2=matlab|1= rgbImage = imread('ecg.png'); grayImage = rgb2gray(rgbImage); % for non-indexed images level = graythresh(grayImage); % threshold for converting image to binary, binaryImage = im2bw(grayImage, level); % Extract the individual red, green, and blue color channels. redChannel = rgbImage(:, :, 1); greenChannel = rgbImage(:, :, 2); blueChannel = rgbImage(:, :, 3); % Make the black parts pure red. redChannel(~binaryImage) = 255; greenChannel(~binaryImage) = 0; blueChannel(~binaryImage) = 0; % Now recombine to form the output image. rgbImageOut = cat(3, redChannel, greenChannel, blueChannel); imshow(rgbImageOut); }} === 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}}</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}}</ref>/nested functions.<ref>{{cite web|title=Nested Functions|url=http://www.mathworks.com/help/matlab/matlab_prog/nested-functions.html|publisher=MathWorks.}}</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}}</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}}</ref> Method call behavior is different between value and reference classes. For example, a call to a method: <syntaxhighlight lang="matlab"> object.method(); </syntaxhighlight> 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: <syntaxhighlight lang="matlab"> classdef Hello methods function greet(obj) disp('Hello!') end end end </syntaxhighlight> When put into a file named <code>hello.m</code>, this can be executed with the following commands: <syntaxhighlight lang="matlabsession"> >> x = Hello(); >> x.greet(); Hello! </syntaxhighlight> == Graphics and graphical user interface programming == <graph>{ "version": 2, "width": 400, "height": 200, "data": [ { "name": "table", "values": [ { "x": 3, "y": 1 }, { "x": 1, "y": 3 }, { "x": 2, "y": 2 }, { "x": 3, "y": 4 } ] } ], "scales": [ { "name": "x", "type": "ordinal", "range": "width", "zero": false, "domain": { "data": "table", "field": "x" } }, { "name": "y", "type": "linear", "range": "height", "nice": true, "domain": { "data": "table", "field": "y" } } ], "axes": [ { "type": "x", "scale": "x" }, { "type": "y", "scale": "y" } ], "marks": [ { "type": "rect", "from": { "data": "table" }, "properties": { "enter": { "x": { "scale": "x", "field": "x" }, "y": { "scale": "y", "field": "y" }, "y2": { "scale": "y", "value": 0 }, "fill": { "value": "steelblue" }, "width": { "scale": "x", "band": "true", "offset": -1 } } } } ] }</graph> 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: <syntaxhighlight lang="matlab"> x = 0:pi/100:2*pi; y = sin(x); plot(x,y) </syntaxhighlight> produces the following figure of the [[sine wave|sine function]]: [[File:Matlab plot sin.svg|350px]] MATLAB supports three-dimensional graphics as well: {| |- | valign="top" |<syntaxhighlight lang="matlab">[X,Y] = meshgrid(-10:0.25:10,-10:0.25:10); f = sinc(sqrt((X/pi).^2+(Y/pi).^2)); mesh(X,Y,f); axis([-10 10 -10 10 -0.3 1]) xlabel('{\bfx}') ylabel('{\bfy}') zlabel('{\bfsinc} ({\bfR})') hidden off </syntaxhighlight> | | valign="top" |<syntaxhighlight lang="matlab"> [X,Y] = meshgrid(-10:0.25:10,-10:0.25:10); f = sinc(sqrt((X/pi).^2+(Y/pi).^2)); surf(X,Y,f); axis([-10 10 -10 10 -0.3 1]) xlabel('{\bfx}') ylabel('{\bfy}') zlabel('{\bfsinc} ({\bfR})') </syntaxhighlight> |- | This code produces a '''[[wire frame model|wireframe]]''' 3D plot of the two-dimensional unnormalized [[sinc function]]: | | This code produces a '''surface''' 3D plot of the two-dimensional unnormalized [[sinc function]]: |- | style="text-align:center;"|[[File:MATLAB mesh sinc3D.svg]] | | style="text-align:center;"|[[File:MATLAB surf sinc3D.svg]] |} 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}}</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}}</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}}</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}}</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}}</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}}</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}}</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> Libraries also exist to import and export [[MathML]].<ref>{{cite web |first=Michael |last=Weitzel |url=http://www.mathworks.com/matlabcentral/fileexchange/7709-mathml-importexport |title=MathML import/export |publisher=MathWorks - File Exchange |date=September 1, 2006 |access-date=August 14, 2013 |archive-date=February 25, 2011 |archive-url=https://web.archive.org/web/20110225010921/http://www.mathworks.com/matlabcentral/fileexchange/7709-mathml-importexport |url-status=dead }}</ref> ==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.<ref>{{Cite web|date=2020-06-12|title=US military ban locks two Chinese universities out of popular software|url=https://www.scmp.com/news/china/diplomacy/article/3088854/us-military-ban-locks-two-chinese-universities-out-popular|access-date=2020-11-06|website=South China Morning Post|language=en}}</ref> == See also == * [[Comparison of numerical-analysis software]] * [[List of numerical-analysis software]] == Notes == {{Reflist|30em}} == Further reading == {{Refbegin}} * {{cite book |last=Gilat |first=Amos |title=MATLAB: An Introduction with Applications 2nd Edition |year=2004 |publisher=John Wiley & Sons |isbn= 978-0-471-69420-5 |ref=none}} * {{cite book |author-link1= Alfio Quarteroni |last1=Quarteroni |first1=Alfio |first2=Fausto |last2=Saleri |title=Scientific Computing with MATLAB and Octave |year=2006 |publisher=Springer |isbn= 978-3-540-32612-0 |ref=none}} * {{cite book |last=Ferreira |first=A.J.M. |title=MATLAB Codes for Finite Element Analysis |year=2009 |publisher=Springer |isbn= 978-1-4020-9199-5 |ref=none}} * {{cite book |last=Lynch |first=Stephen |title=Dynamical Systems with Applications using MATLAB |year=2004 |publisher=BirkhΓ€user |isbn=978-0-8176-4321-8 |ref=none}} {{Refend}} == External links == <!-- ===================== {{No more links}} ========================= | PLEASE BE CAUTIOUS IN ADDING MORE LINKS TO THIS ARTICLE. Wikipedia | | is not a collection of links nor should it be used for advertising. | | | | Excessive or inappropriate links WILL BE DELETED. | | See [[Wikipedia:External links]] & [[Wikipedia:Spam]] for details. | | | | If there are already plentiful links, please propose additions or | | replacements on this article's discussion page. | ========================== {{No more links}} ====================== --> {{Sister project links |wikt=no |n=no |q=no |s=no |commons=Category:MATLAB |b=MATLAB Programming |v=MATLAB essential }} * {{Official website|https://www.mathworks.com/products/matlab.html}} {{Numerical analysis software}} {{Computer algebra systems}} {{Statistical software}} {{Image Processing Software}} {{Linear algebra}} {{Programming languages}} {{DEFAULTSORT:Matlab}} [[Category:1970s software]] [[Category:Computer-related introductions in the 1970s]] [[Category:Array programming languages]] [[Category:Articles with example MATLAB/Octave code]] [[Category:Proprietary software programmed in C]] [[Category:Computer algebra system software for Linux]] [[Category:Computer algebra system software for macOS]] [[Category:Computer algebra system software for Windows]] [[Category:Computer algebra systems]] [[Category:Computer vision software]] [[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]] [[Category:Econometrics software]] [[Category:High-level programming languages]] [[Category:IRIX software]] [[Category:Linear algebra]] [[Category:Mathematical optimization software]] [[Category:Numerical analysis software for Linux]] [[Category:Numerical analysis software for macOS]] [[Category:Numerical analysis software for Windows]] [[Category:Numerical linear algebra]] [[Category:Numerical programming languages]] [[Category:Numerical software]] [[Category:Parallel computing]] [[Category:Plotting software]] [[Category:Proprietary commercial software for Linux]] [[Category:Proprietary cross-platform software]] [[Category:Regression and curve fitting software]] [[Category:Software modeling language]] [[Category:Statistical programming languages]] [[Category:Time series software]] [[Category:Domain-specific programming languages]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:As of
(
edit
)
Template:Cite book
(
edit
)
Template:Cite journal
(
edit
)
Template:Cite web
(
edit
)
Template:Computer algebra systems
(
edit
)
Template:Distinguish
(
edit
)
Template:Fact
(
edit
)
Template:For
(
edit
)
Template:Image Processing Software
(
edit
)
Template:Infobox
(
edit
)
Template:Infobox programming language
(
edit
)
Template:Infobox software
(
edit
)
Template:Linear algebra
(
edit
)
Template:Main other
(
edit
)
Template:Mvar
(
edit
)
Template:Navbox
(
edit
)
Template:Numerical analysis software
(
edit
)
Template:Official website
(
edit
)
Template:Programming languages
(
edit
)
Template:RP
(
edit
)
Template:Refbegin
(
edit
)
Template:Refend
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Sister project links
(
edit
)
Template:Statistical software
(
edit
)
Template:Sxhl
(
edit
)
Template:Template other
(
edit
)
Template:Tmath
(
edit
)
Template:Use mdy dates
(
edit
)