Octave-Tutorial/Grundlegende Operationen
Aufgaben für Lernende
Bearbeiten- (Räumliche Modellbildung) Erstellen Sie Matrix und einen Spaltenvektor in Octave und stellen Sie mit den Informationen zu Octave dar, wie man eine räumliche Verteilungen in einem diskretisierten Grundraum auf einem Schachbrettmuster durchführen kann. Vergleichen Sie Ihr vorgehen mit einer Implementation in R/R-Studio.
Erstellen von Vektoren und Matrizen
BearbeitenHier ist, wie wir einen Zeilenvektor in Octave spezifizieren:
Octave:1> x = [1 3 2 2] x = 1 3 2 2
Beachten Sie, dass
- der Vektor ist in eckige Klammern eingeschlossen;
- jeder Eintrag wird durch ein optionales Komma getrennt.
x = [1, 3, 2, 2]
ergibt den gleichen Zeilenvektor. - es wird empfohlen, die Komponenten in der Zeile durch Leerzeichen zu trennen, um Verwechselungen mit dem dem Semikolon für Spaltenvektoren zu vermeiden.
Um einen Spaltenvektor anzugeben, ersetzen wir einfach die Leerzeichen(Kommas) durch ein Semikolon:
Octave:2> x = [1; 3; 2] x = 1 3 2
Daraus können Sie ersehen, dass wir ein Leerzeichen (oder Komma) verwenden, um zur nächsten Spalte eines Vektors (oder einer Matrix) zu gelangen, und ein Semikolon am Ende einer Zeile, um zur nächsten Zeile zu gelangen. Insgesamt kann man über diese also eine Matrix anzugeben, geben Sie die Zeilen ein (trennen Sie jeden Eintrag durch ein Komma) und verwenden Sie ein Semikolon, um zur nächsten Zeile zu gehen.
Octave:3> A = [1 1 2; 3 5 8; 13 21 34] A = 1 1 2 3 5 8 13 21 34
Eine Matrix von Werten wird in Octave zu definieren. Die Größe der Matrix wird automatisch bestimmt, so dass es nicht notwendig ist, die Dimensionen explizit anzugeben. Der Ausdruck
A = [1, 2; 3, 4]
erzeugt als Ergebnis eine Matrix
Operatoren
BearbeitenSie können die Standardoperatoren verwenden, um
- add (
+
), - subtrahieren (
-
), und - mehrfach (
*
)
Matrizen, Vektoren und Skalare miteinander. Beachten Sie, dass die Matrizen übereinstimmende Dimensionen (innere Dimensionen im Falle der Multiplikation) haben müssen, damit diese Operatoren funktionieren.
Matrixmultikation
BearbeitenDas folgende Beispiel zeigt eine Matrixmultiplikation. Zunächst werden zwei Matrizen und
Octave:4> A = [2,1;3,2;-2,2] ans = 2 1 3 2 -2 2
Die zweite Matrix muss zwei Zeilen besitzen, damit die Matrixmultiplikation wohldefiniert ist.
Octave:4> B = [2,1,3,0;-2,2,1,-4] ans = 2 1 3 0 -2 2 1 -4
Octave:4> C=A*B ans = 2 4 7 -4 2 7 11 -8 -8 2 -4 -8
Transposition von Matrizen
BearbeitenOctave:4> A=[1 1 2; 3 5 8; 13 21 34] ans = 1 1 2 3 5 8 13 21 34
Der Transponierungsoperator ist das einfache Anführungszeichen: '
. Um mit dem Beispiel im vorigen Abschnitt fortzufahren,
Octave:4> A' ans = 1 3 13 1 5 21 2 8 34
(Hinweis: Dies ist eigentlich der komplexe konjugierte Transpositionsoperator, aber für echte Matrizen ist dies derselbe wie die Transponierung. Um die Transponierung einer komplexen Matrix zu berechnen, verwenden Sie den Punkt-Transponierungsoperator (.'
)).
Potenzen von Matrizen
BearbeitenDer Potenzoperator (^
) kann auch verwendet werden, um reelle Potenzen von quadratischen Matrizen zu inhalieren.
Elementoperationen
BearbeitenWenn Sie zwei Matrizen gleicher Größe haben, können Sie darauf Element für Element Operationen durchführen. Im folgenden wird z.B. jedes Element von A durch das entsprechende Element in B geteilt:
Octave:1> A = [1, 6, 3; 2, 7, 4] A = 1 6 3 2 7 4 Octave:2> B = [2, 7, 2; 7, 3, 9] B = 2 7 2 7 3 9 Octave:3> A ./ B ans = 0.50000 0.85714 1.50000 0.28571 2.33333 0.44444
Beachten Sie, dass Sie den Operator Punktdivision (./
) verwenden, um eine Element-für-Element-Division durchzuführen. Es gibt ähnliche Operatoren für Multiplikation (.*
) und Potenzierung (.^
).
Lassen Sie uns einen Skalar für die zukünftige Verwendung einführen.
a = 5;
Die Punkt-Dividier-Operatoren können auch zusammen mit Skalaren in der folgenden Weise verwendet werden.
C = a ./ B
gibt eine Matrix zurück, C wobei jeder Eintrag definiert ist durch
<Zentrum><Mathematik>C_{ij} = \frac{a}{B_{ij}}}</Mathematik></Zentrum>
d.h. a wird durch jeden Eintrag in B geteilt. Ähnlich
C = a .^ B
eine Matrix zurückgeben mit
<Mittelpunkt><Mathematik>C_{ij} = a^{B_{ij}}}</Mathematik></Mittelpunkt>
Indizierung
BearbeitenSie können mit Teilen von Matrizen und Vektoren arbeiten, indem Sie in diese indizieren. Sie verwenden einen Vektor aus ganzen Zahlen, um Octave mitzuteilen, welche Elemente eines Vektors oder einer Matrix verwendet werden sollen. Zum Beispiel erstellen wir einen Vektor
Octave:1> x = [1.2, 5, 7.6, 3, 8] x = 1.2000 5.0000 7.6000 3.0000 8.0000
Um nun das zweite Element von x zu sehen, geben Sie
Octave:2> x(2) ans = 5
Sie können eine Liste der Elemente auch wie folgt anzeigen.
Octave:3> x([1, 3, 4]) ans = 1.2000 7.6000 3.0000
Dieser letzte Befehl zeigt das 1., 3. und 4. Element des Vektors x an.
Um Zeilen und Spalten aus einer Matrix auszuwählen, verwenden wir dasselbe Prinzip. Definieren wir eine Matrix
Octave:4> A = [1, 2, 3; 4, 5, 6; 7, 8, 9] A = 1 2 3 4 5 6 7 8 9
und wählen Sie die 1. und 3. Zeile sowie die 2. und 3:
Octave:5> A([1, 3], [2, 3]) ans = 2 3 8 9
Der Doppelpunkt-Operator (:
) kann verwendet werden, um alle Zeilen oder Spalten aus einer Matrix auszuwählen. Um also alle Elemente aus der 2. Zeile auszuwählen, geben Sie
Octave:6> A(2, :) ans = 4 5 6
Sie können auch :
wie folgt verwenden, um alle Matrix-Elemente auszuwählen:
Octave:7> A(:,:) ans = 1 2 3 4 5 6 7 8 9
Bereiche
BearbeitenWir können auch einen Bereich von Zeilen oder Spalten aus einer Matrix auswählen. Wir spezifizieren einen Bereich mit
start:schritt:stopp
Sie können tatsächlich Bereiche an der Oktav-Eingabeaufforderung eingeben, um zu sehen, was die Ergebnisse sind. Zum Beispiel,
Octave:3> 1:3:10 ans = 1 4 7 10
Die erste angezeigte Zahl war start
, die zweite war start + Schritt
, die dritte start + (2 * Schritt)
. Und die letzte Zahl war kleiner oder gleich stop
.
Oft möchte man einfach nur, dass die Schrittweite 1 ist. In diesem Fall können Sie den Schrittparameter weglassen und
Octave:4> 1:10 ans = 1 2 3 4 5 6 7 8 9 10
Wie Sie sehen können, ist das Ergebnis eines Bereichsbefehls einfach ein Vektor von ganzen Zahlen. Wir können dies nun verwenden, um in einen Vektor oder eine Matrix zu indizieren. Um die Submatrix oben links von A auszuwählen, verwenden Sie
Octave:4> A(1:2, 1:2) ans = 1 2 4 5
Schließlich gibt es ein Schlüsselwort namens end
, das bei der Indizierung in eine Matrix oder einen Vektor verwendet werden kann. Es bezieht sich auf das letzte Element in der Zeile oder Spalte. Um zum Beispiel die letzte Spalte in einer Matrix zu sehen, können Sie
Octave:5> A(:,Ende) ans = 3 6 9
Funktionen für Matrizen und Vektoren
BearbeitenDie folgenden Funktionen können zum Erstellen und Manipulieren von Matrizen verwendet werden.
Matrizen erstellen == Erstellen von Matrizen ==
tril(A)
gibt den unteren dreieckigen Teil von A zurück.
triu(A)
gibt den oberen dreieckigen Teil von A zurück.
eye(n)
gibt die Identitätsmatrix zurück. Sie können aucheye(m, n)
verwenden, um rechteckige Identitätsmatrizen zurückzugeben.
ones(m, n)
gibt eine mit 1s gefüllte Matrix zurück. In ähnlicher Weise gibtones(n)
eine quadratische Matrix zurück.
zeros(m, n)
ergibt eine mit 0s gefüllte Matrix. In ähnlicher Weise gibtzeros(n)
eine quadratische Matrix zurück.
rand(m, n)
ergibt eine Matrix, die mit zufälligen Elementen gefüllt ist, die einheitlich aus gezogen werden. Ähnlich ergibtrand(n)
eine quadratische Matrix.
randn(m, n)
liefert eine Matrix, die mit normal verteilten Zufallselementen gefüllt ist.
randperm(n)
liefert einen Zeilenvektor, der eine zufällige Permutation der Zahlen enthält.
diag(x)
oderdiag(A)
liefert einen Zeilenvektor, der eine zufällige Permutation der Zahlen enthält. Für einen Vektor, x, ergibt dies eine quadratische Matrix mit den Elementen von x auf der Diagonale und 0s überall sonst. Für eine Matrix A ergibt sich ein Vektor mit den Diagonalelementen von A. Zum Beispiel,
Octave:16> A = [1, 2, 3; 4, 5, 6; 7, 8, 9] A = 1 2 3 4 5 6 7 8 9 Octave:17> x = diag(A) ans = 1 5 9 Octave:18> diag(x) ans = 1 0 0 0 5 0 0 0 9
linspace(a, b, n)
liefert einen Vektor mit n Werten, so dass das erste Element gleich a, das letzte Element gleich b und die Differenz zwischen aufeinanderfolgenden Elementen konstant ist. Das letzte Argument, n, ist optional mit dem Standardwert 100.
oktave:186> linspace(2, 4, 2) ans = 2 4 Octave:187> linspace(2, 4, 4) ans = 2.0000 2.6667 3.3333 4.0000 Octave:188> linspace(2, 4, 6) ans = 2.0000 2.4000 2.8000 3.2000 3.6000 4.0000
logspace(a, b, n)
liefert einen Vektor mit n Werten, so dass das erste Element gleich , das letzte Element gleich ist und das Verhältnis zwischen aufeinanderfolgenden Elementen konstant ist. Das letzte Argument, n, ist optional mit dem Standardwert 50.
Octave:189> Logspace(2, 4, 2) ans = 100 10000 Octave:190> Logspace(2, 4, 4) ans = 1.0000e+02 4.6416e+02 2.1544e+03 1.0000e+04 Octave:191> Logspace(2, 4, 5) ans = 1.0000e+02 3.1623e+02 1.0000e+03 3.1623e+03 1.0000e+04
Andere Matrizen
BearbeitenEs gibt einige weitere Funktionen zum Erstellen spezieller Matrizen. Diese sind
hankel
(Hankel-Matrix),hilb
(Hilbert-Matrix),invhilb
(Inverse einer Hilbert-Matrix),sylvester_matrix
(Sylvester matrix) - In v3.8.1 gibt es eine Warnung: sylvester_matrix ist veraltet und wird aus einer zukünftigen Version von Octave entfernt; bitte verwenden Sie stattdessen hadamard(2^k),toeplitz
(Toeplitz matrix),vander
(Vandermonde-Matrix).
Verwenden Sie help
, um mehr über die Verwendung dieser Funktionen zu erfahren.
Ändern von Matrizen
Bearbeitenfliplr(A)
liefert z.B. eine Kopie der Matrix A mit umgekehrter Reihenfolge der Spalten,
Octave:49> A = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12] A = 1 2 3 4 5 6 7 8 9 10 11 12 Octave:50> fliplr(A) ans = 4 3 2 1 8 7 6 5 12 11 10 9
flipud(A)
liefert z.B. eine Kopie der Matrix A mit umgekehrter Reihenfolge der Zeilen,
Octave:51> Flipud(A) ans = 9 10 11 12 5 6 7 8 1 2 3 4
rot90(A, n)
gibt eine Kopie der Matrix A zurück, die um (90n)° gegen den Uhrzeigersinn gedreht wurde. Das zweite Argument, , ist optional mit dem Standardwert 1, und es kann negativ sein.
oktave:52> rot90(A) ans = 4 8 12 3 7 11 2 6 10 1 5 9
reshape(A, m, n)
erzeugt eine Matrix mit Elementen aus A. Die Anzahl der Elemente in A muss gleich sein. Die Elemente werden in Spaltenhauptreihenfolge aus A entnommen, d.h. Werte in der ersten Spalte ( ) werden zuerst gelesen, dann die zweite Spalte ( ) usw.
Octave:53> umformen(A, 2, 6) ans = 1 9 6 3 11 8 5 2 10 7 4 12
sort(x)
liefert eine Kopie des Vektors x mit den Elementen in aufsteigender Reihenfolge sortiert.
oktave:54> x = rand(1, 6) x = 0.25500 0.33525 0.26586 0.92658 0.68799 0.69682 Octave:55> sortieren(x) ans = 0.25