Matrizen und magische Quadrate
Über Matrizen
In der MATLAB® Umgebung ist eine Matrix ein rechteckiges Zahlenarray. Eine Sonderbedeutung kommt manchmal 1x1-Matrizen zu, bei denen es sich um Skalare handelt, und Matrizen mit nur einer Zeile oder Spalte, bei denen es sich um Vektoren handelt. In MATLAB gibt es andere Möglichkeiten, numerische und nicht numerische Daten zu speichern, aber am Anfang sollte in der Regel alles als eine Matrix betrachtet werden. Die Operationen in MATLAB sind so natürlich wie möglich konzipiert. Wo andere Programmiersprachen jeweils mit einzelnen Zahlen arbeiten, können Sie in MATLAB schnell und einfach mit ganzen Matrizen arbeiten. Eine gute Beispielmatrix, die in diesem Dokument verwendet wird, ist in dem Kupferstich Melencolia I (Die Melancholie) des deutschen Künstlers und Amateurmathematikers Albrecht Dürer abgebildet.
Dieses Bild enthält eine Vielfalt mathematischer Symbolik und bei genauer Betrachtung entdecken Sie oben rechts eine Matrix. Diese Matrix ist als magisches Quadrat bekannt und wurde zu Dürers Zeiten tatsächlich mit magischen Eigenschaften in Verbindung gebracht. In der Tat weist es einige faszinierende Merkmale auf, die eine nähere Betrachtung wert sind.
Eingeben von Matrizen
Um sich in MATLAB einzuarbeiten, sollten Sie sich mit der Handhabung von Matrizen vertraut machen. Starten Sie MATLAB und befolgen Sie die Anweisungen für die einzelnen Beispiele.
Es gibt viele Möglichkeiten, Matrizen in MATLAB einzugeben:
Eingeben einer expliziten Liste von Elementen.
Laden von Matrizen aus externen Datendateien.
Generieren von Matrizen mithilfe integrierter Funktionen.
Erstellen von Matrizen mithilfe Ihrer eigenen Funktionen und Speichern dieser Matrizen in Dateien.
Beginnen Sie mit der Eingabe von Dürers Matrix als Liste ihrer Elemente. Sie müssen sich dabei nur an einige grundlegende Konventionen halten:
Trennen Sie die Elemente einer Zeile mit Leerzeichen oder Kommas.
Verwenden Sie einen Strichpunkt,
;
, um das Ende der einzelnen Zeilen festzulegen.Schließen Sie die gesamte Liste in eckige Klammern ein,
[ ]
.
Geben Sie Dürers Matrix einfach in das Befehlsfenster ein
A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
MATLAB zeigt die soeben eingegebene Matrix an:
A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1
Diese Matrix stimmt mit den Zahlen im Kupferstich überein. Sobald Sie die Matrix eingegeben haben, wird sie automatisch im MATLAB Arbeitsbereich gespeichert. Sie können sie einfach A
nennen. Da sich A
jetzt im Arbeitsbereich befindet, können Sie herausfinden, was sie so interessant macht. Warum ist sie magisch?
sum, transpose und diag
Möglicherweise wissen Sie bereits, dass die besonderen Eigenschaften eines magischen Quadrats auf die verschiedenen Möglichkeiten zum Summieren seiner Elemente zurückzuführen sind. Wenn Sie die Summe einer beliebigen Zeile oder Spalte oder einer der beiden Hauptdiagonalen bilden, ergibt sich stets dieselbe Zahl. Überprüfen Sie dieses mithilfe von MATLAB. Probieren Sie als erstes die folgende Anweisung aus:
sum(A)
MATLAB antwortet mit
ans = 34 34 34 34
Wenn Sie keine Ausgabevariable angeben, verwendet MATLAB die Variable ans
, die Abkürzung für answer (Antwort), um die Ergebnisse einer Berechnung zu speichern. Sie haben einen Zeilenvektor berechnet, der die Summen der Spalten von A
enthält. Jede der Spalten ergibt dieselbe Summe, die magische Summe, 34.
Doch wie sieht es mit den Summen der Zeilen aus? MATLAB arbeitet bevorzugt mit den Spalten einer Matrix, sodass eine Möglichkeit zum Ermitteln der Zeilensummen darin besteht, die Matrix zu transponieren, die Spaltensummen der Transponierten zu berechnen und anschließend das Ergebnis zu transponieren.
In MATLAB gibt es zwei Operatoren für das Transponieren. Der Apostrophoperator (zum Beispiel A'
) führt eine komplexe konjugierte Transposition aus. Er spiegelt die Matrix um ihre Hauptdiagonale und ändert das Vorzeichen der imaginären Komponente aller komplexen Elemente der Matrix. Der Punkt-Apostroph-Operator (A.'
), transponiert ohne Auswirkungen auf das Vorzeichen komplexer Elemente. Bei Matrizen, die ausschließlich reelle Elemente enthalten, führen beide Operatoren zum gleichen Ergebnis.
Daher ergibt
A'
Folgendes:
ans = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1
und
sum(A')'
ergibt einen Spaltenvektor, der die Zeilensummen enthält
ans = 34 34 34 34
Eine weitere Möglichkeit zum Summieren der Zeilen, bei der das doppelte Transponieren vermieden wird, ist die Verwendung des Dimensionsarguments für die Funktion sum
:
sum(A,2)
ergibt
ans = 34 34 34 34
Die Summe der Elemente der Hauptdiagonalen wird mit den Funktionen sum
und diag
ermittelt:
diag(A)
ergibt
ans = 16 10 7 1
und
sum(diag(A))
ergibt
ans = 34
Die andere Diagonale, die sogenannte Antidiagonale, ist aus mathematischer Sicht weniger wichtig, sodass es in MATLAB keine vordefinierten Funktionen dafür gibt. Doch eine Funktion, die ursprünglich für den Einsatz in Grafiken gedacht war, fliplr
, spiegelt eine Matrix von links nach rechts:
sum(diag(fliplr(A))) ans = 34
Jetzt haben Sie gesehen, dass die Matrix im Kupferstich von Dürer tatsächlich ein magisches Quadrat ist und dabei einige Matrixoperationen von MATLAB ausprobiert. Diese Matrix wird auch in den folgenden Abschnitten verwendet, um zusätzliche MATLAB Funktionen zu veranschaulichen.
Die Funktion magic
In MATLAB ist eine Funktion integriert, mit der magische Quadrate fast jeder Größe erstellt werden können. Es überrascht nicht, dass diese Funktion magic
genannt wird:
B = magic(4) B = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
Die Matrix ist nahezu mit der in Dürers Kupferstich identisch und weist dieselben „magischen“ Eigenschaften auf. Der einzige Unterschied ist, dass die beiden mittleren Spalten vertauscht sind.
Sie können die beiden mittleren Spalten von B
vertauschen, sodass sie aussehen wie Dürers A
. Ordnen Sie für jede Zeile von B
die Spalten in der durch 1, 3, 2, 4 angegebenen Reihenfolge neu an:
A = B(:,[1 3 2 4])
A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1
Generieren von Matrizen
Die Software MATLAB stellt vier Funktionen zur Verfügung, die grundlegende Matrizen generieren.
Ausschließlich Nullen | |
Ausschließlich Einsen | |
Gleichmäßig verteilte Zufallselemente | |
Normal verteilte Zufallselemente |
Hier einige Beispiele:
Z = zeros(2,4) Z = 0 0 0 0 0 0 0 0 F = 5*ones(3,3) F = 5 5 5 5 5 5 5 5 5 N = fix(10*rand(1,10)) N = 9 2 6 4 8 7 4 0 8 4 R = randn(4,4) R = 0.6353 0.0860 -0.3210 -1.2316 -0.6014 -2.0046 1.2366 1.0556 0.5512 -0.4931 -0.6313 -0.1132 -1.0998 0.4620 -2.3252 0.3792