2 Gnu Octave | |
→ | 2.6 Eingabe |
Eine Matrix bzw. ein Vektor wird durch "[" und "]" begrenzt.
Die Elemente einer Matrixzeile werden durch Leerzeichen bzw.
Leerzeichenfolgen voneinander getrennt.
Mit einem Zeilenwechsel oder einem Semikolon wird eine Matrixzeile
abgeschlossen.
Im Beispiel wird zweimal dieselbe Matrix auf unterschiedliche Weise
eingegeben:
M = [ 1 2 3 4 5 6 7 8 9 ]; N = [ 1 2 3 ; 4 5 6 ; 7 8 9 ];
Lange Matrixzeilen können auf mehrere Zeilen Eingabetext verteilt werden. Drei Punkte am Zeilenende ("...") markieren, dass die Matrixzeile in der nächsten Textzeile fortgesetzt wird.
Mit
zeros(Zeilen, Spalten) zeros(Matrix
wird eine Matrix angelegt, alle Elemente haben den Wert 0.
Große schwach besetzte Matrizen können angelegt werden, indem zunächst eine Nullmatrix angelegt wird. Anschließend werden die Werte für die besetzten Stellen angegeben.
Werden die Werte für eine Matrix erst berechnet, ist es aus
Performance-Gründen ebenfalls sinnvoll, zunächst eine Nullmatrix
der passenden Größe anzulegen und anschließend die berechneten
Werte einzutragen.
Anstelle von
M(1,1) = Term M(1,2) = Term M(2,1) = Term M(2,2) = Term
ist es besser,
M = zeros(2,2) M(1,1) = Term M(1,2) = Term M(2,1) = Term M(2,2) = Term
zu verwenden.
Andernfalls wird durch die erste Zeile für M eine Matrix 1x1
angelegt. Für Zeile 2 wird für M eine neue Matrix 1x2 angelegt, die
bisherigen Werte werden in die neue Matrix kopiert und das Ergebnis
der Variablen M zugewiesen. Für Zeile 3 wird wiederum eine neue
Matrix 2x2 angelegt, der bisherige Inhalt von M dahin kopiert.
Durch das Bereitstellen einer Nullmatrix mit passenden Abmessungen
vor den Berechnungen wird das mehrfache Objekt-Erstellen und
Kopieren vermieden.
Mit
ones(Zeilen, Spalten) ones(size(Matrix))
wird eine Matrix angelegt, alle Elemente haben den Wert 1.
Mit
eye(Zeilen, Spalten) eye(size(Matrix))
wird eine Einheitsmatrix angelegt.
Die Elemente der Hauptdiagonale haben den Wert 1, alle anderen Elemente haben den Wert 0.
Mit
diag(Vektor)
wird eine Matrix erzeugt, bei der nur die Hauptdiagonale besetzt ist. Die Werte werden dem Vektor entnommen.
Mit
diag(Matrix)
wird ein Vektor gebildet, der die Elemente der Hauptdiagonale enthält.
Vektoren sind Sonderfälle von Matrizen und werden genauso wie Matrizen eingebeben. Zur Eingabe von Spaltenvektoren kann ein Zeilenvektor transponiert werden (Operator ').
Z = [ 1 2 3 ]; S = [ 1 ; 2 ; 3 ]; S = [ 1 2 3 ]';
Sollen nicht alle Werte eines Vektors einzeln angegeben werden, können folgende Kurzformen bzw. Befehle benutzt werden:
[Startwert:Maximalwert] [Startwert:Schrittweite:Maximalwert] linspace(Startwert, Endwert, Anzahl) logspace(Startbasis, Endbasis, Anzahl)
Der Zugriff auf Elemente eines Vektors oder eine Matrix erfolgt mit
Vektor(Index) Matrix(Zeile, Spalte)
Die Index-Zählung beginnt mit 1.
Mit den folgenden Befehlen kann die Zeilen- bzw. Spaltenanzahl von Vektoren und Matrizen ermittelt werden:
[Zeilen, Spalten] = size(Matrix) Zeilen = size(Matrix, 1) Spalten = size(Matrix, 2)
Es existiert noch ein weiterer Befehl length(), dieser sollte jedoch nicht verwendet werden. Er gibt den größeren der beiden Werte Zeilenanzahl und Spaltenanzahl für Matrizen zurück.
GNU Octave ist von vornherein für die Arbeit mit Vektoren und Matrizen ausgelegt. Skalare sind ein Sonderfall, eine Matrix mit nur einer Zeile und einer Spalte.
Funktionen mit nur einem Argument (z.B. sin(x)) sind in
Octave i.d.R so gestaltet, dass auch ein Vektor bzw. eine Matrix
als Argument angegeben werden kann. In diesem Fall liefern die
Funktionen einen gleich großen Vektor bzw. eine gleich große Matrix
als Ergebnis, die Funktion wird auf jedes Element angewandt.
Dieser Vorgang der Vektorisierung (Ausweitung der Berechnung auf
alle Vektor- bzw. Matrixelemente) findet automatisch statt, auch
für andere Berechnungen mit Matrizen und Vektoren als
Operanden.
Berechnungen erfolgen mit Ausnutzung der automatischen
Vektorisierung wesentlich schneller, als wenn z.B. mit
verschachtelten for-Schleifen die Berechnung für jedes Element
einzeln erfolgt.