Octave-Tutorial/Grundlegende Operationen

Aus Wikiversity
Zur Navigation springen Zur Suche springen

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[Bearbeiten]

Hier 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[Bearbeiten]

Sie 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[Bearbeiten]

Das 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[Bearbeiten]

Octave: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[Bearbeiten]

Der Potenzoperator (^) kann auch verwendet werden, um reelle Potenzen von quadratischen Matrizen zu berechnen.

Elementoperationen[Bearbeiten]

Wenn 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[Bearbeiten]

Sie 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[Bearbeiten]

Wir 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[Bearbeiten]

Die 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 auch eye(m, n) verwenden, um rechteckige Identitätsmatrizen zurückzugeben.
  • ones(m, n) gibt eine mit 1s gefüllte Matrix zurück. In ähnlicher Weise gibt ones(n) eine quadratische Matrix zurück.
  • zeros(m, n) ergibt eine mit 0s gefüllte Matrix. In ähnlicher Weise gibt zeros(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 ergibt rand(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) oder diag(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[Bearbeiten]

Es gibt einige weitere Funktionen zum Erstellen spezieller Matrizen. Diese sind

Verwenden Sie help, um mehr über die Verwendung dieser Funktionen zu erfahren.

Ändern von Matrizen[Bearbeiten]

  • fliplr(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


Siehe auch[Bearbeiten]