MATLAB: Difference between revisions

Content deleted Content added
Reverted 8 edits by DimitrisAthens (talk): COI / book promo
 
(7 intermediate revisions by 5 users not shown)
Line 7:
| 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
Line 17:
| 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]]
Line 52:
| 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 = {{url|https://www.mathworks.com/products/matlab.html|mathworks.com}}
| wikibooks = MATLAB Programming
}}
 
'''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==
Line 344:
|24.2
|-
!R2025a
|25.1
|25.1
|2025
|-
|
|}
 
Line 349 ⟶ 355:
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 367 ⟶ 373:
[[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|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]].
Line 407 ⟶ 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 481 ⟶ 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 504 ⟶ 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 671 ⟶ 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 758 ⟶ 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]]