Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:software:matlab:intro:sprachkonzepte:index

Grundlegende Sprachkonzepte

Generell gilt: Matlab ist eine Sprache für numerische, nicht für symbolische Mathematik. Eine Sprache für symbolische Mathematik (genauer gesagt das Programm dafür) wäre Mathematica von Wolfram Research.

Im Folgenden werden erst einmal die grundlegenden Sprachkonzepte von Matlab vorgestellt. Das mag erstmal sehr theoretisch erscheinen, versteht sich aber als etwas allgemeinere Einführung, die auch demjenigen, der noch keinerlei Erfahrung mit Programmiersprachen hat, einen kleinen Überblick verschafft.

Datentypen in Matlab

Als Menschen können wir intuitiv recht einfach zwischen einem Wort und einer Zahl unterscheiden. Eine Programmiersprache kann das nicht notwendigerweise. Wenn eine Funktion aber z.B. eine Zahl erwartet und ein Wort bekommt, wird sie entweder (idealerweise) einen Fehler ausgeben und abbrechen oder seltsame Dinge machen.

Matlab gehört zur Gruppe von Programmiersprachen, bei denen es einen Unterschied zwischen Text, Zahlen und logischen Ausdrücken („wahr“/„falsch“), also unterschiedliche Datentypen gibt. Die unterschiedlichen Datentypen werden im Folgenden kurz vorgestellt.

Hinweis: Die Einteilung in grundlegende und erweiterte Datentypen ist willkürlich und dient hier nur der Didaktik, insbesondere für diejenigen, die noch keine anderweitige Programmiererfahrung haben.

grundlegende Datentypen

Zu den grundlegenden Datentypen zählen numerische Datentypen, Strings (Texte) und Boolesche Variablen („wahr“/„falsch“).

numerische Datentypen

Numerische Datentypen sind im einfachsten Fall ganze Zahlen (integer), im Normalfall in Matlab allerdings Zahlen mit beliebig vielen Nachkommastellen (double)1). Ferner unterscheidet man zwischen einzelnen Zahlen (Skalare), Vektoren und Matrizen. Matlab „denkt“ in Matritzen - darin ist es gut2). So gesehen ist für Matlab auch ein Skalar einfach nur eine 1×1-Matrix.

Zur Praxis: Definineren wir eine Variable „a“ und weisen ihr eine Zahl zu:

a = 1

Der Typ der Variable „a“ ist hier „double“. Wollen wir nun einen Vektor erzeugen, geht das ebenfalls einfach und intuitiv:

b = [1 2 3 4 5]

Wenn man einen Vektor erzeugen möchte, der aus einer Reihe gleich verteilter (äquidistanter) Zahlen besteht (z.B. ein Vektor für eine Achse), kann man sich sehr viel Schreibarbeit sparen:

c = 1:5

An dieser Stelle kann man die eckigen Klammern weglassen, sie stören aber auch nicht, wenn man sie schreibt. Äquivalent zu obiger Angabe wäre also:

c = [1:5]

Soll die Schrittweite eine andere sein, ist das auch kein Problem:

d = 1:0.2:5

Hinweis: Wenn man die Ausgabe des Vektors auf der Kommandozeile unterdrücken will, einfach ein Semikolon ans Ende der Zeile setzen:

d = 1:0.2:5;

Matlab erzeugt an solchen Stellen immer einen Zeilenvektor. Will man einen Spaltenvektor erzeugen, gibt es mehrere Möglichkeiten. Direkte Definition eines Spaltenvektors:

e = [1; 2; 3; 4; 5]

Alternativ kann man auch einfach einen Zeilenvektor transponieren:

e = [1:5]'

Matrizen lassen sich allgemein ebenfalls entsprechend definieren:

f = [1 2 3; 2 3 4; 3 4 5]

An dieser Stelle wäre „f“ eine 3×3-Matrix.

Will man in einem Vektor oder einer Matrix ein Element oder einen bestimmten Bereich ansprechen, geht das natürlich auch. Um das dritte Element des oben definierten Vektors „e“ anzusprechen, sieht das z.B. so aus:

e(3)

Einen Bereich kann man ebenfalls ansprechen:

e(2:4)

Gleiches gilt für Matrizen:

f(2,1)

liefert das Element der zweiten Reihe, ersten Spalte.

Hinweis: Matlab hat die (etwas unintuitive) Angewohnheit, erst die Reihe und dann die Spalte anzusprechen.

Bereiche einer Matrix lassen sich genauso ansprechen:

f(2:3,2)

Ein paar speziellere Varianten, die besonders bei Matrizen von großem Nutzen sind, sind die Verwendung des Doppelpunkt-Operators „:“ und des Schlüsselwortes „end“:

f(:,2)

liefert z. B. die gesamte zweite Spalte. Möchte man beispielsweise die zweite und dritte komplette Spalte der Matrix „f“ ansprechen, sähe das so aus:

f(:,2:3)

Hilfreich ist das Schlüsselwort „end“. Es spricht das letzte Element, bzw. die letzte Reihe oder Spalte, an. Um die letzte Spalte der Matrix „f“ zu erhalten:

f(:,end)

Netterweise kann man das Pferd auch „von hinten“ aufzäumen. Die letzten drei Werte des Vektors „e“ erhält man beispielsweise durch:

e(end-3:end)

Strings

Zeichenketten jeglicher Form wird in Programmiersprachen für gewöhnlich als „string“ bezeichnet. In Matlab werden Strings immer in Hochkommata (') eingeschlossen:

foo = 'Hello World!'

Boolesche Variablen

Ein dritter wichtiger grundlegender Datentyp sind boolesche Variablen, die grundsätzlich nur zwei Werte annehmen können: „true“ oder „false“.

Ein wichtiger Anwendungsfall sind if-Abfragen, bei denen eine Bedingung abgefragt wird. Für Details siehe weiter unten.

"Erweiterte" Datentypen

Matlab kennt zwei „erweiterte“ Datentypen, structs und cell arrays.

Diese Datentypen werden schnell wichtig, wenn man mit Toolboxen (z.B. EasySpin für die EPR) arbeitet, da Funktionen dort von diesen Datentypen Gebrauch machen. Deshalb sollen sie hier ebenfalls kurz eingeführt werden.

  • structs
  • cell arrays

Variablennamen

  • Konventionen
  • Bedingungen in Matlab (Buchstabe am Anfang, alphanumerisch und „_“ erlaubt)
  • vordefinierte Variablen nicht überschreiben (i, pi, …)

Noch einmal: Matrizen

  • Zugriffe auf einzelne Elemente
    • spezielle Befehle: :, end
    • Indices fangen bei 1 an
  • „spezielle“ Matrizen
    • zeros, ones, rand
  • Matrixmanipulationen
    • Transponieren
    • reshape
    • inv
    • array-Funktionen

Operatoren

  • arithmetische Operatoren
    • +, -, *, /, ^, .*, ./, .^
    • elementweise und matrixweit
  • Transponieren etc. (', flipud, fliplr)
  • Vergleichsoperatoren (<, >, , >=, ==, ~=)
  • logische Operatoren
    • &, |, ~
    • any, all, find
    • „short-circuit“: &&, ||
  • Operatorrangfolge (vgl. Matlab-Hilfe)
    • wichtig in der Praxis: Matlab beherrscht Punkt vor Strich
    • im Zweifel einfach runde Klammern einsetzen

vordefinierte Funktionen

  • abs, sqrt, exp, sin, …

Grundlegende Konstrukte

  • if-elseif-else
  • switch-case
  • for, while

if-elseif-else

switch-case

for, while

Unterschied Script/Funktion

  • Reichweite definierter Variablen: local/global
  • grundsätzliche Konzeption: Funktionen für wiederkehrende Aufgaben, Skripte für eine Sammlung von Funktionsaufrufen für einen speziellen Anwendungsfall
1)
Integer-Variablen werden in Matlab fast nie benötigt. Auch Indices von Vektoren/Matrizen lassen sich über „double“-Werte ansteuern, solange sie ganzzahlig sind. D.h. man muß für Indices keine Variablen als integer-Variablen definieren. Das ist ein Beispiel dafür, warum Matlab eine „schwach typisierte“ Sprache ist, da an dieser Stelle implizit die Zahl in einen Integerwert umgesetzt wird.
2)
Das bedeutet, daß man, wo immer möglich, auf Schleifen zugunsten spezieller Funktionen für Matrizen verzichten sollte. Zu Schleifen und Matrixfunktionen s.u.
de/software/matlab/intro/sprachkonzepte/index.txt · Zuletzt geändert: 2020/09/30 21:35 von 127.0.0.1