Matlab

Aus besserwiki.de
MATLAB (Programmiersprache)
ParadigmaMultiparadigma: funktional, imperativ, prozedural, objektorientiert, Array
Entworfen vonCleve Moler
EntwicklerMathWorks
Erstes ErscheinenEnde der 1970er Jahre
Disziplin der Typisierungdynamisch, schwach
Dateinamen-Erweiterungen.m, .p, .mex*, .mat, .fig, .mlx, .mlapp, .mltbx, .mlappinstall, .mlpkginstall
Websitemathworks.de
Beeinflusst durch
  • APL
  • EISPACK
  • LINPACK
  • PL/0
  • Speakeasy
Beeinflusst
  • Julia
  • Oktave
  • Scilab
  • INTLAB
  • MATLAB-Programmierung bei Wikibooks
MATLAB (Software)
Matlab Logo.png
L-förmiges Membran-Logo
Entwickler(innen)MathWorks
Erste Veröffentlichung1984; vor 39 Jahren
Geschrieben inC/C++, MATLAB
BetriebssystemWindows, macOS und Linux
PlattformIA-32, x86-64
TypNumerische Berechnungen
LizenzProprietäre kommerzielle Software
Websitemathworks.de

MATLAB (eine Abkürzung für "MATrix LABoratory") ist eine proprietäre Multi-Paradigma-Programmiersprache und numerische Rechenumgebung, die von MathWorks entwickelt wurde. MATLAB ermöglicht die Manipulation von Matrizen, die Darstellung von Funktionen und Daten, die Implementierung von Algorithmen, die Erstellung von Benutzeroberflächen und die Verknüpfung mit Programmen, die in anderen Sprachen geschrieben wurden.

Obwohl MATLAB in erster Linie für numerische Berechnungen gedacht ist, verwendet eine optionale Toolbox die symbolische MuPAD-Engine, die den Zugriff auf symbolische Berechnungen ermöglicht. Ein zusätzliches Paket, Simulink, ermöglicht grafische Mehrbereichssimulationen und modellbasierten Entwurf für dynamische und eingebettete Systeme.

Im Jahr 2020 hat MATLAB weltweit mehr als 4 Millionen Nutzer. Sie kommen aus den verschiedensten Bereichen der Technik, Wissenschaft und Wirtschaft.

Geschichte

Ursprünge

MATLAB wurde von dem Mathematiker und Computerprogrammierer Cleve Moler erfunden. Die Idee für MATLAB basierte auf seiner Doktorarbeit aus den 1960er Jahren. Moler wurde Mathematikprofessor an der University of New Mexico und begann als Hobby mit der Entwicklung von MATLAB für seine Studenten. Die erste lineare Algebra-Programmierung von MATLAB entwickelte er 1967 zusammen mit seinem damaligen Doktorvater George Forsythe. Im Jahr 1971 folgte dann der Fortran-Code für lineare Gleichungen.

In den Anfängen (vor Version 1.0) war MATLAB "keine Programmiersprache, sondern ein einfacher interaktiver Matrix-Rechner. Es gab keine Programme, keine Toolboxen, keine Grafiken. Und keine ODEs oder FFTs."

Die erste frühe Version von MATLAB wurde in den späten 1970er Jahren fertiggestellt. Die Software wurde im Februar 1979 an der Naval Postgraduate School in Kalifornien zum ersten Mal der Öffentlichkeit zugänglich gemacht. Frühe Versionen von MATLAB waren einfache Matrix-Rechner mit 71 vorgefertigten Funktionen. Zu dieser Zeit wurde MATLAB kostenlos an Universitäten verteilt. Moler hinterließ Kopien an den Universitäten, die er besuchte, und die Software entwickelte eine große Anhängerschaft in den mathematischen Abteilungen der Universitäten.

In den 1980er Jahren lernte Cleve Moler John N. Little kennen. Sie beschlossen, MATLAB in C umzuprogrammieren und für die IBM-Desktops zu vermarkten, die zu dieser Zeit die Großrechner ablösten. John Little und der Programmierer Steve Bangert programmierten MATLAB in C um, schufen die Programmiersprache MATLAB und entwickelten Funktionen für Toolboxen.

Kommerzielle Entwicklung

MATLAB wurde 1984 auf der Automatic Control Conference in Las Vegas erstmals als kommerzielles Produkt veröffentlicht. MathWorks, Inc. wurde gegründet, um die Software zu entwickeln, und die MATLAB-Programmiersprache wurde veröffentlicht. Der erste Verkauf von MATLAB erfolgte im darauf folgenden Jahr, als Nick Trefethen vom Massachusetts Institute of Technology zehn Kopien kaufte.

Bis Ende der 1980er Jahre wurden mehrere hundert Kopien von MATLAB an Universitäten für den Einsatz durch Studenten verkauft. Die Software wurde vor allem dank der Toolboxen populär, die von Experten aus verschiedenen Bereichen für die Durchführung spezieller mathematischer Aufgaben entwickelt wurden. Viele der Toolboxen wurden von Stanford-Studenten entwickelt, die MATLAB an der Universität einsetzten und die Software dann in die Privatwirtschaft mitnahmen.

Im Laufe der Zeit wurde MATLAB für die frühen Betriebssysteme von Digital Equipment Corporation, VAX, Sun Microsystems und für Unix-PCs neu geschrieben. Version 3 wurde 1987 veröffentlicht. Der erste MATLAB-Compiler wurde von Stephen C. Johnson in den 1990er Jahren entwickelt.

Im Jahr 2000 fügte MathWorks in MATLAB 6 eine Fortran-basierte Bibliothek für lineare Algebra hinzu und ersetzte damit die ursprünglichen LINPACK- und EISPACK-Subroutinen der Software, die in C geschrieben waren. Die MATLAB Parallel Computing Toolbox wurde 2004 auf der Supercomputing Conference veröffentlicht und 2010 um Unterstützung für Grafikprozessoren (GPUs) erweitert.

Jüngere Geschichte

Einige besonders große Änderungen an der Software wurden mit der Version 8 im Jahr 2012 vorgenommen. Die Benutzeroberfläche wurde überarbeitet und der Funktionsumfang von Simulink wurde erweitert. Bis 2016 führte MATLAB mehrere technische Verbesserungen und Verbesserungen der Benutzeroberfläche ein, darunter das MATLAB Live Editor-Notebook und andere Funktionen.

Syntax

Die MATLAB-Anwendung basiert auf der Programmiersprache MATLAB. Üblicherweise wird die MATLAB-Anwendung über das Befehlsfenster als interaktive mathematische Shell verwendet oder es werden Textdateien mit MATLAB-Code ausgeführt.

Variablen

Variablen werden mit dem Zuweisungsoperator = definiert. MATLAB ist eine schwach typisierte Programmiersprache, da Typen implizit konvertiert werden. Es ist eine inferred typed language, da Variablen zugewiesen werden können, ohne dass ihr Typ deklariert wird, es sei denn, sie werden als symbolische Objekte behandelt, und ihr Typ kann sich ändern. Werte können aus Konstanten, aus Berechnungen mit Werten anderer Variablen oder aus der Ausgabe einer Funktion stammen. Zum Beispiel:

>> x = 17
x =
 17 <span title="Aus: Englische Wikipedia, Abschnitt &quot;Variables&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/MATLAB#Variables <span style="color:#dddddd">ⓘ</span>]</span>

>> x = 'Hut'
x =
Hut <span title="Aus: Englische Wikipedia, Abschnitt &quot;Variables&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/MATLAB#Variables <span style="color:#dddddd">ⓘ</span>]</span>

>> x = [3*4, pi/2]
x =
   12.0000 1.5708 <span title="Aus: Englische Wikipedia, Abschnitt &quot;Variables&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/MATLAB#Variables <span style="color:#dddddd">ⓘ</span>]</span>

>> y = 3*sin(x)
y =
   -1.6097 3.0000

Vektoren und Matrizen

Ein einfaches Array wird mit der Doppelpunkt-Syntax definiert: initial:increment:terminator. Zum Beispiel:

>> array = 1:2:9
array =
 1 3 5 7 9

definiert eine Variable namens array (oder weist einer vorhandenen Variable mit dem Namen array einen neuen Wert zu), die ein Array ist, das aus den Werten 1, 3, 5, 7 und 9 besteht. Das heißt, das Array beginnt bei 1 (dem Anfangswert), erhöht sich bei jedem Schritt vom vorherigen Wert um 2 (dem Inkrementwert) und stoppt, sobald es 9 (den Terminatorwert) erreicht hat (oder kurz davor ist).

Der Inkrementwert kann in dieser Syntax auch weggelassen werden (zusammen mit einem der Doppelpunkte), um einen Standardwert von 1 zu verwenden.

>> ari = 1:5
ari =
 1 2 3 4 5

weist der Variablen mit dem Namen ari ein Array mit den Werten 1, 2, 3, 4 und 5 zu, da der Standardwert 1 als Inkrement verwendet wird.

Die Indizierung ist 1-basiert, was die übliche Konvention für Matrizen in der Mathematik ist, im Gegensatz zur Null-basierten Indizierung, die in anderen Programmiersprachen wie C, C++ und Java üblich ist.

Matrizen können definiert werden, indem die Elemente einer Zeile mit Leerzeichen oder Komma getrennt werden und jede Zeile mit einem Semikolon abgeschlossen wird. Die Liste der Elemente sollte von eckigen Klammern [] umgeben sein. Klammern () werden für den Zugriff auf Elemente und Subarrays verwendet (sie werden auch zur Kennzeichnung einer Liste von Funktionsargumenten verwendet).

>> 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 <span title="Aus: Englische Wikipedia, Abschnitt &quot;Vectors and matrices&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/MATLAB#Vectors_and_matrices <span style="color:#dddddd">ⓘ</span>]</span>

>> A(2,3)
ans =
 11

Gruppen von Indizes können durch Ausdrücke wie 2:4 angegeben werden, was zu [2, 3, 4] führt. Eine Untermatrix, die aus den Zeilen 2 bis 4 und den Spalten 3 bis 4 besteht, kann zum Beispiel wie folgt geschrieben werden:

>> A(2:4,3:4)
ans =
 11 8
 7 12
 14 1

Eine quadratische Identitätsmatrix der Größe n kann mit der Funktion eye erzeugt werden, und Matrizen beliebiger Größe mit Nullen oder Einsen können mit den Funktionen zeros bzw. ones erzeugt werden.

>> eye(3,3)
ans =
 1 0 0
 0 1 0
 0 0 1 <span title="Aus: Englische Wikipedia, Abschnitt &quot;Vectors and matrices&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/MATLAB#Vectors_and_matrices <span style="color:#dddddd">ⓘ</span>]</span>

>> Nullen(2,3)
ans =
 0 0 0
 0 0 0 <span title="Aus: Englische Wikipedia, Abschnitt &quot;Vectors and matrices&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/MATLAB#Vectors_and_matrices <span style="color:#dddddd">ⓘ</span>]</span>

>> Einsen(2,3)
ans =
 1 1 1
 1 1 1

Das Transponieren eines Vektors oder einer Matrix erfolgt entweder durch die Funktion transpose oder durch Hinzufügen von Punkt und Primzahl nach der Matrix (ohne Punkt führt prime eine konjugierte Transponierung für komplexe Arrays durch):

>> A = [1 ; 2], B = A.', C = transpose(A)
A =
     1
     2
B =
     1 2
C =
     1 2 <span title="Aus: Englische Wikipedia, Abschnitt &quot;Vectors and matrices&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/MATLAB#Vectors_and_matrices <span style="color:#dddddd">ⓘ</span>]</span>

>> D = [0, 3 ; 1, 5], D.'
D =
     0 3
     1 5
ans =
     0 1
     3 5

Die meisten Funktionen akzeptieren Arrays als Eingabe und arbeiten elementweise mit jedem Element. Zum Beispiel multipliziert mod(2*J,n) jedes Element in J mit 2 und reduziert dann jedes Element modulo n. MATLAB enthält standardmäßige for- und while-Schleifen, aber (wie in anderen ähnlichen Anwendungen wie R) wird die Verwendung der vektorisierten Notation empfohlen und ist oft schneller in der Ausführung. Der folgende Code, ein Auszug aus der Funktion magic.m, erzeugt ein magisches Quadrat M für ungerade Werte von n (die MATLAB-Funktion meshgrid wird hier verwendet, um quadratische Matrizen I und J mit 1:n zu erzeugen):

[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; <span title="Aus: Englische Wikipedia, Abschnitt &quot;Vectors and matrices&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/MATLAB#Vectors_and_matrices <span style="color:#dddddd">ⓘ</span>]</span>

Strukturen

MATLAB unterstützt Struktur-Datentypen. Da es sich bei allen Variablen in MATLAB um Arrays handelt, ist die Bezeichnung "Struktur-Array" angemessener, da jedes Element des Arrays denselben Feldnamen hat. Darüber hinaus unterstützt MATLAB dynamische Feldnamen (Feldsuche nach Namen, Feldmanipulationen usw.).

Funktionen

Beim Erstellen einer MATLAB-Funktion sollte der Name der Datei mit dem Namen der ersten Funktion in der Datei übereinstimmen. Gültige Funktionsnamen beginnen mit einem alphabetischen Zeichen und können Buchstaben, Zahlen oder Unterstriche enthalten. Bei Variablen und Funktionen wird zwischen Groß- und Kleinschreibung unterschieden.

gbImage = imread('ecg.png');
grayImage = rgb2gray(rgbImage); % für nicht indizierte Bilder
level = graythresh(grayImage); % Schwellenwert für die Umwandlung des Bildes in das Binärformat, 
binaryImage = im2bw(grayImage, level); 
% Extrahieren der einzelnen roten, grünen und blauen Farbkanäle.
redChannel = rgbImage(:, :, 1);
greenChannel = rgbImage(:, :, 2);
blueChannel = rgbImage(:, :, 3);
% Machen Sie die schwarzen Teile zu reinem Rot.
redChannel(~binaryImage) = 255;
greenChannel(~binaryImage) = 0;
blueChannel(~binaryImage) = 0;
% Jetzt rekombinieren, um das Ausgabebild zu bilden.
rgbImageOut = cat(3, redChannel, greenChannel, blueChannel);
imshow(rgbImageOut); <span title="Aus: Englische Wikipedia, Abschnitt &quot;Functions&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/MATLAB#Functions <span style="color:#dddddd">ⓘ</span>]</span>

Funktionsgriffe

MATLAB unterstützt Elemente des Lambda-Kalküls durch die Einführung von Funktionshandles oder Funktionsreferenzen, die entweder in .m-Dateien oder anonymen/verschachtelten Funktionen implementiert sind.

Klassen und objektorientierte Programmierung

MATLAB unterstützt die objektorientierte Programmierung mit Klassen, Vererbung, virtuellem Dispatch, Packages, Pass-by-Value-Semantik und Pass-by-Reference-Semantik. Die Syntax und die Aufrufkonventionen unterscheiden sich jedoch deutlich von denen anderer Sprachen. MATLAB hat Wertklassen und Referenzklassen, je nachdem, ob die Klasse Handle als Superklasse hat (bei Referenzklassen) oder nicht (bei Wertklassen).

Das Verhalten von Methodenaufrufen ist bei Wert- und Referenzklassen unterschiedlich. Zum Beispiel, ein Aufruf einer Methode:

object.method();

kann ein beliebiges Element von object nur dann ändern, wenn object eine Instanz einer Referenzklasse ist, andernfalls müssen Wertklassenmethoden eine neue Instanz zurückgeben, wenn sie das Objekt ändern müssen.

Im Folgenden wird ein Beispiel für eine einfache Klasse gegeben:

classdef Hallo
    Methoden
        function greet(obj)
            disp('Hallo!')
        end
    end
end <span title="Aus: Englische Wikipedia, Abschnitt &quot;Classes and object-oriented programming&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/MATLAB#Classes_and_object-oriented_programming <span style="color:#dddddd">ⓘ</span>]</span>

In eine Datei mit dem Namen hello.m eingefügt, kann dies mit folgenden Befehlen ausgeführt werden:

>> x = Hallo();
>> x.greet();
Hallo! <span title="Aus: Englische Wikipedia, Abschnitt &quot;Classes and object-oriented programming&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/MATLAB#Classes_and_object-oriented_programming <span style="color:#dddddd">ⓘ</span>]</span>

Grafiken und Programmierung von grafischen Benutzeroberflächen

Syntax-Fehler

MATLAB verfügt über fest integrierte Funktionen zur Erstellung von Grafiken. Beispielsweise kann die Funktion plot verwendet werden, um einen Graphen aus zwei Vektoren x und y zu erzeugen. Der Code:

x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)

ergibt die folgende Abbildung der Sinusfunktion: Matlab plot sin.svg

MATLAB unterstützt auch dreidimensionale Grafiken:

[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})')
Ausgeblendet
   
[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})') <span title="Aus: Englische Wikipedia, Abschnitt &quot;Graphics and graphical user interface programming&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/MATLAB#Graphics_and_graphical_user_interface_programming <span style="color:#dddddd">ⓘ</span>]</span>
Dieser Code erzeugt eine 3D-Darstellung der zweidimensionalen unnormalisierten sinc-Funktion in Form eines Drahtgitters:     Dieser Code erzeugt eine 3D-Oberflächendarstellung der zweidimensionalen unnormalisierten sinc-Funktion:
MATLAB mesh sinc3D.svg     MATLAB surf sinc3D.svg

MATLAB unterstützt die Entwicklung von Anwendungen mit grafischer Benutzeroberfläche (GUI). UIs können entweder programmatisch oder mit visuellen Designumgebungen wie GUIDE und App Designer erstellt werden.

MATLAB und andere Sprachen

MATLAB kann Funktionen und Subroutinen aufrufen, die in den Programmiersprachen C oder Fortran geschrieben wurden. Es wird eine Wrapper-Funktion erstellt, die die Übergabe und Rückgabe von MATLAB-Datentypen ermöglicht. MEX-Dateien (MATLAB Executables) sind die dynamisch ladbaren Objektdateien, die durch Kompilieren solcher Funktionen entstehen. Seit 2014 wurde eine zunehmende bidirektionale Schnittstelle zu Python eingerichtet.

In Perl, Java, ActiveX oder .NET geschriebene Bibliotheken können direkt von MATLAB aus aufgerufen werden, und viele MATLAB-Bibliotheken (zum Beispiel XML- oder SQL-Unterstützung) sind als Wrapper um Java- oder ActiveX-Bibliotheken herum implementiert. Der Aufruf von MATLAB aus Java ist komplizierter, kann aber mit einer MATLAB-Toolbox erfolgen, die separat von MathWorks vertrieben wird, oder über einen undokumentierten Mechanismus namens JMI (Java-to-MATLAB Interface) (nicht zu verwechseln mit dem nicht verwandten Java Metadata Interface, das ebenfalls JMI heißt). Die offizielle MATLAB-API für Java wurde 2016 hinzugefügt.

Als Alternative zur MuPAD-basierten Symbolic Math Toolbox von MathWorks kann MATLAB mit Maple oder Mathematica verbunden werden.

Es gibt auch Bibliotheken für den Import und Export von MathML.

MATLAB ist zwar das beliebteste kommerzielle Softwarepaket für numerische Berechnungen, es gibt jedoch auch andere Alternativen wie die Open-Source-Berechnungssprache GNU Octave, die Statistikprogrammiersprache R, die Rechenumgebung Maple und die Berechnungssprache Julia.

Rückzug aus China

Im Jahr 2020 berichteten chinesische Staatsmedien, dass MATLAB aufgrund von US-Sanktionen seine Dienste von zwei chinesischen Universitäten zurückgezogen hat. Als Reaktion darauf sollen verstärkt Open-Source-Alternativen genutzt und inländische Alternativen entwickelt werden.

Release-Historie

MATLAB wird zweimal pro Jahr aktualisiert. Zusätzlich zu neuen Funktionen und anderen Verbesserungen enthält jede Version neue Fehlerkorrekturen und kleinere Änderungen.

Version Name der Version Nummer Gebündelte JVM Jahr Datum der Freigabe Anmerkungen
1.0 1984
2 1986
3 1987 Die erste Matlab-Toolbox wird eingeführt; Unterstützung für gewöhnliche Differentialgleichungen wird hinzugefügt.
3.5 1990 Lief unter DOS, benötigte aber mindestens einen 386er Prozessor; benötigte einen mathematischen Coprozessor.
4 1992 Lief unter Windows 3.1x und Macintosh.
4.2c 1994 Lief unter Windows 3.1x; benötigte einen mathematischen Koprozessor.
5.0 Band 8 1996 Dezember 1996 Vereinheitlichte Versionen für alle Plattformen.
5.1 Band 9 1997 Mai 1997
5.1.1 R9.1
5.2 R10 1998 März 1998 Letzte Version, die auf klassischen Macs funktioniert.
5.2.1 R10.1
5.3 R11 1999 Januar 1999
5.3.1 R11.1 November 1999
6.0 R12 12 1.1.8 2000 November 2000 Erste Version mit gebündelter virtueller Java-Maschine (JVM).
6.1 R12.1 1.3.0 2001 Juni 2001 Letzte Version für Windows 95.
6.5 R13 13 1.3.1 2002 Juli 2002
6.5.1 R13SP1 2003
6.5.2 R13SP2 Letzte Veröffentlichung für Windows 98, Windows ME, IBM/AIX, Alpha/TRU64 und SGI/IRIX.
7 R14 14 1.4.2 2004 Juni 2004 Einführung von anonymen und verschachtelten Funktionen; Wiedereinführung für Mac (unter Mac OS X).
7.0.1 R14SP1 Oktober 2004
R14SP1+ 2004 November 2004 Einführung der Parallel Computing Toolbox.
7.0.4 R14SP2 1.5.0 2005 7. März 2005 Unterstützung für memory-mapped Dateien hinzugefügt.
7.1 R14SP3 1.5.0 1. September 2005 Erste 64-Bit-Version für Windows XP 64-Bit verfügbar.
7.2 R2006a 15 1.5.0 2006 1. März 2006
7.3 R2006b 16 1.5.0 1. September 2006 Unterstützung für HDF5-basierte MAT-Dateien hinzugefügt.
7.4 R2007a 17 1.5.0_07 2007 1. März 2007 Neue Funktion bsxfun hinzugefügt, um Element-für-Element-Binäroperationen mit aktivierter Singleton-Expansion durchzuführen.
7.5 R2007b 18 1.6.0 1. September 2007 Letzte Version für Windows 2000 und PowerPC Mac; Lizenzserver-Unterstützung für Windows Vista; neues internes Format für P-Code.
7.6 R2008a 19 1.6.0 2008 1. März 2008 Wesentliche Verbesserungen der objektorientierten Programmierfähigkeiten mit einer neuen Klassendefinitionssyntax; Möglichkeit, Namespaces mit Paketen zu verwalten.
7.7 R2008b 20 1.6.0_04 9. Oktober 2008 Letzte Version für Prozessoren ohne SSE2; Neue Map-Datenstruktur; Verbesserungen bei den Zufallszahlengeneratoren.
7.8 R2009a 21 1.6.0_04 2009 6. März 2009 Erste Version für Microsoft 32-bit & 64-bit Windows 7; neue externe Schnittstelle zum .NET Framework.
7.9 R2009b 22 1.6.0_12 4. September 2009 Erste Version für Intel 64-Bit Mac und letzte Version für Solaris SPARC; neue Verwendung des Tilde-Operators (~), um Argumente in Funktionsaufrufen zu ignorieren.
7.9.1 R2009bSP1 1.6.0_12 2010 1. April 2010 Fehlerbehebungen.
7.10 R2010a 23 1.6.0_12 5. März 2010 Letzte Version für Intel 32-bit Mac.
7.11 R2010b 24 1.6.0_17 3. September 2010 Unterstützung für Aufzählungen hinzugefügt; zusätzliche Funktionen für die Ausführung von MATLAB-Code auf NVIDIA CUDA-basierten Grafikprozessoren.
7.11.1 R2010bSP1 1.6.0_17 2011 17. März 2011 Fehlerkorrekturen und Aktualisierungen.
7.11.2 R2010bSP2 1.6.0_17 5. April 2012 Fehlerbehebungen.
7.12 R2011a 25 1.6.0_17 8. April 2011 Neue rng-Funktion zur Steuerung der Zufallszahlengenerierung.
7.13 R2011b 26 1.6.0_17 1. September 2011 Es wurde die Möglichkeit hinzugefügt, auf Teile von Variablen direkt in MAT-Dateien zuzugreifen und diese zu ändern, ohne sie in den Speicher zu laden; die maximale Anzahl lokaler Arbeiter mit der Parallel Computing Toolbox wurde von 8 auf 12 erhöht.
7.14 R2012a 27 1.6.0_17 2012 1. März 2012 Letzte Version mit 32-bit Linux Unterstützung.
8 R2012b 28 1.6.0_17 11. September 2012 Erste Version mit Toolstrip-Oberfläche; Einführung von MATLAB Apps; überarbeitetes Dokumentationssystem.
8.1 R2013a 29 1.6.0_17 2013 7. März 2013 Neues Unit-Testing-Framework.
8.2 R2013b 30 1.7.0_11 6. September 2013 Integrierte Java-Laufzeitumgebung (JRE) auf Version 7 aktualisiert; neuer Tabellendatentyp.
8.3 R2014a 31 1.7.0_11 2014 7. März 2014 Vereinfachtes Compiler-Setup für die Erstellung von MEX-Dateien; Unterstützung von USB-Webcams im MATLAB-Kern; Anzahl der lokalen Worker nicht mehr auf 12 mit der Parallel Computing Toolbox begrenzt.
8.4 R2014b 32 1.7.0_11 3. Oktober 2014 Neue klassenbasierte Grafik-Engine (a.k.a. HG2); Tabbing-Funktion in der GUI; verbessertes User Toolbox Packaging und Hilfedateien; neue Objekte für Zeit-Datum-Manipulationen; Git-Subversion-Integration in IDE; Big Data-Fähigkeiten mit MapReduce (skalierbar zu Hadoop); neues py-Paket für die Nutzung von Python innerhalb von MATLAB; neue Engine-Schnittstelle zum Aufruf von MATLAB aus Python; verschiedene neue und verbesserte Funktionen: webread (RESTful Web Services mit JSON/XML-Unterstützung), tcpclient (socket-basierte Verbindungen), histcounts, histogram, animatedline und andere.
8.5 R2015a 33 1.7.0_60 2015 5. März 2015
8.5 R2015aSP1 1.7.0_60 14. Oktober 2015 Letzte Version mit Unterstützung für Windows XP und Windows Vista.
8.6 R2015b 34 1.7.0_60 3. September 2015 Neue MATLAB-Ausführungsengine (auch bekannt als LXE); Graph- und Digraphenklassen für die Arbeit mit Graphen und Netzwerken; MinGW-w64 als unterstützter Compiler unter Windows; letzte Version mit 32-Bit-Unterstützung.
9.0 R2016a 35 1.7.0_60 2016 3. März 2016 Veröffentlichung von Live Scripts: interaktive Dokumente, die Text, Code und Ausgabe kombinieren (im Stil von Literate Programming); Einführung des App Designers: eine neue Entwicklungsumgebung für die Erstellung von Apps (mit neuartigen UI-Figuren, Achsen und Komponenten); Anhalten der Ausführung laufender Programme über einen Pause-Button.
9.1 R2016b 36 1.7.0_60 15. September 2016 Möglichkeit zur Definition lokaler Funktionen in Skripten; automatische Erweiterung von Dimensionen (bisher über expliziten Aufruf von bsxfun); große Arrays für Big Data; neuer String-Typ; neue Funktionen zur Kodierung/Dekodierung von JSON; offizielle MATLAB Engine API für Java.
9.2 R2017a 37 1.7.0_60 2017 9. März 2017 MATLAB Online veröffentlicht: Cloud-basierter MATLAB-Desktop, auf den über einen Webbrowser zugegriffen werden kann; Strings in doppelten Anführungszeichen; neue Memoize-Funktion für Memoization; erweiterte Validierung von Objekteigenschaften; Mocking-Framework für Unit-Tests; MEX zielt standardmäßig auf 64-Bit; neue Heatmap-Funktion zur Erstellung von Heatmap-Diagrammen.
9.3 R2017b 38 1.8.0_121 21. September 2017 Einführung eines GPU Coders, der MATLAB-Code in CUDA-Code für Nvidia konvertiert.
9.4 R2018a 39 1.8.0_144 2018 15. März 2018 Verbesserungen am Live-Editor; Einführung der C++ MEX-Schnittstelle; Möglichkeit zur Anpassung der Registerkartenvervollständigung; Webanwendungen.
9.5 R2018b 40 1.8.0_152 12. September 2018 Unterstützung für Cloud-Anbieter, wie Amazon Web Services, hinzugefügt; Neural Network Toolbox durch Deep Learning Toolbox ersetzt.
9.6 R2019a 41 1.8.0_181 2019 20. März 2019 MATLAB Projects veröffentlicht; Zustandsmaschinenprogrammierung mit Stateflow hinzugefügt.
9.7 R2019b 42 1.8.0_202 11. September 2019 Einführung des 'arguments'-Blocks zur Eingabevalidierung; Aktivierung der Punktindizierung in Funktionsausgaben; Einführung von Live Editor Tasks.
9.8 R2020a 43 2020 19. März 2020 Entfernung des Mupad-Notebooks; verbesserte Unterstützung für AMD-CPUs (AVX2); standardmäßige UTF-8-Kodierung für MATLAB-Codedateien; Möglichkeit zur Erstellung eigenständiger Anwendungen mit Simulink.
9.9 R2020b 44 17. September 2020 Verbesserte Unterstützung für AMD-CPUs (AVX2); Online-Version von Simulink.
9.10 R2021a 45 2021 11. März 2021
9.11 R2021b 46 22. September 2021
9.12.0 R2022a 47 2022 9. März 2022

Die Nummer (oder Versionsnummer) ist die vom Concurrent License Manager Programm FLEXlm gemeldete Version. Eine vollständige Liste der Änderungen sowohl an MATLAB als auch an den offiziellen Toolboxen finden Sie in den MATLAB Release Notes.

Einsatz

Matlab dient im Gegensatz zu Computeralgebrasystemen nicht der symbolischen, sondern vorrangig der numerischen (zahlenmäßigen) Lösung von Problemen. Die Software wird in der Industrie und an Hochschulen vor allem für numerische Simulation sowie Datenerfassung, Datenanalyse und -auswertung eingesetzt. Ein weiterer Anwendungsschwerpunkt sind die Wirtschaftswissenschaften, für die Mathworks Erweiterungspakete (z. B. Ökonometrie und Finanzmarkttheorie) bereitstellt.

Matlab ist auch die Basis für Simulink, ein anderes Produkt des Unternehmens The MathWorks, das zur zeitgesteuerten Simulation dient, und Stateflow, das für die ereignisorientierte Simulation benutzt wird, sowie für zahlreiche anwendungs- und domänenspezifische Erweiterungen.

Struktur und Toolboxes

Programmiert wird unter Matlab in einer proprietären Programmiersprache, die auf der jeweiligen Maschine (Computer) interpretiert wird. Kleinere Programme können als sogenannte Skripte oder Funktionen zu geschlossenen Einheiten verpackt werden, was das Erstellen von anwendungsorientierten „Werkzeugkisten“ (Toolboxes) erlaubt.

Viele solcher Pakete sind auch kommerziell erhältlich. Durch die vereinfachte, mathematisch orientierte Syntax der Matlab-Skriptsprache und die umfangreichen Funktionsbibliotheken für zum Beispiel Statistik, Signal- und Bildverarbeitung ist die Erstellung entsprechender Programme wesentlich einfacher möglich als z. B. unter C. Ein Beispiel ist die Symbolic Toolbox zur Nutzung symbolischer Ausdrücke im Gegensatz zu mit Zahlen belegten Variablen. Ferner gibt es Schnittstellen, um C-Code einzubinden, sowie einen Compiler, mit dem aus einem Skript unabhängig von Matlab lauffähiger C-Code erstellt werden kann. Damit können mathematisch aufwendige Module für C-Projekte in der Matlab-Umgebung entwickelt und getestet werden.

Matlab bietet aus der objektorientierten Programmierung die Konzepte von Klassen, Vererbung, Pakete und Call-by-value-Aufrufen.

Matlab besteht neben der Sprache Matlab aus einer grafischen Desktop-Umgebung, um verschiedene Ansichten wie Variablen, Plots und Code auf einen Blick sehen und viele Aufgaben durch Mausinteraktion und Tastaturkürzel bewältigen zu können.