Mehr von Vektoren und Matrizen

Skripte

Aufgabe 1

Zur Repetition wiederholen wir als erstes die Aufgabe 6 der letzten Serie. Für z1 verwenden wir dieses mal aber z1 = 4+3i.

Ist dir diese Aufgabe zu blöd? Gut so. Aber sobald du wirkliche Probleme zu lösen versuchst, wirst du rasch in ähnliche Situationen geraten, in denen du eine längere Rechnung wiederholen sollst, dabei aber etwas kleines anpassen musst.

Skripte verwenden

Um für solche Fälle vorbereitet zu sein, empfiehlt es sich wenn du alle Rechnungen, die mehr als ein paar wenige Zeilen benötigen in ein Skript schreibst. Ein Skript ist eine Datei die eine Abfolge von Befehlen enthält. Wenn du diese Datei dann ausführen lässt, werden die Befehle der Reihe nach abgearbeitet.

Musst du in einem Skript etwas kleines ändern, so reicht es die Datei anzupassen und du kannst dann deine ganze Rechnung wiederholen lassen. Ich empfehle dir deshalb von jetzt an alle Aufgaben mit Skripten zu lösen.

Als Beispiel erledigen wir die Aufgabe oben. Wechsle in die Shell und öffne mit kate block03a01.m einen Editor. (Mehr zu Editoren im Unix-Teil dieses Blockes.) Gehe anschliessend zu Block 2 und kopiere von dort die Lösung zu Aufgabe 5 und 6 in die neue Datei. Wenn du das erledigt hast, musst du z1 noch anpassen und die Datei speichern.

Du kannst die Datei nun ausführen indem du in Octave bzw. Matlab den Dateinamen ohne Endung eintippst

block03a01

Tipps zu Skripten

Runden

Bevor wir uns wieder Matrizen zuwenden, schauen wir kurz das Thema Runden an. Dafür gibt es die Befehle: fix, floor, ceil, round und sign.

Aufgabe 2

Gib folgende Variablen im Command Window ein: a=-1.45, b=2.45 und c=3.55

  1. Runde a und b in Richtung 0.
  2. Runde a, b und c ab.
  3. Runde a, b und c auf.
  4. Runde a, b und c.
  5. Bestimme die Vorzeichen von a und b.

Lösung Anzeigen

a=-1.45; b=2.45; c=3.55; fix(a), fix(b) floor(a), floor(b), floor(c) ceil(a), ceil(b), ceil(c) round(a), round(b), round(c) sign(a), sign(b)

Vektoren & Matrizen - Teil 2

Wir kehren nun zum Thema Matrizen zurück. Falls du dich nicht mehr erinnerst, wie du Matrizen eingeben kannst, hilft dir Block 2 weiter.

Eigenschaften von Matrizen

Wie du aus der LinAlg wissen solltest, sind diverse Eigenschaften von Matrizen interessant. Für die folgende Aufgabe brauchst du die Funktionen size, det, rank, norm und orth.

Aufgabe 3

Gib die Matrizen D, E und F ein und bestimme ihre Determinante, ihre Dimensionen, ihre Norm, ihren Rang und berechne die dazugehörende orthogonale Basis.

Lösung Anzeigen

D = eye(2); E = [0.1 -1;100 0.1]; F = [1 0 -5;-3 7 -2;4 -9 6]; % Determinanten det(D) det(E) det(F) % Dimensionen size(D) size(E) size(F) % Norm norm(D) norm(E) norm(F) % Rang rank(D) rank(E) rank(F) % Orthogonale Basis orth(D) orth(E) orth(F)

Aufgabe 4

Berechne für das unten stehende Fachwerk die Lagerkräfte. Die Bewegungsgleichungen für das Fachwerk findest du unten. Drücke dieses Gleichungssystem als Matrizengleichung aus und löse diese.

mit
F1 = 2 [kN], F2 = 1 [kN]
= 45° und = 30°
a = 1 [m], b = a/tan()

Lösung Anzeigen

A=[1 0 1;0 1 0;0 0 1]; b=[sqrt(3)/2*1000;2500;-(1+1/tan(pi/6))*2000] F=A\b

Vektoren (und Matrizen) als Datenspeicher

Bisher haben wir Matrizen und Vektoren als mathematische Objekte verwendet. Daneben kannst du sie aber auch einfach als Listen oder Tabellen von Daten-Werten nutzen. Diese Verwendung wollen wir im weiteren genauer anschauen.

Zahlensequenzen

a = [1 2 3 4 5 6]; b = [2 4 6 8 10 12]; c = [0 0.75 1.5 2.25 3];

Oft wirst du Vektoren wie die oben benötigen. Natürlich kannst du diese einfach eintippen. Spätestens aber wenn deine Vektoren 100 Elemente enthalten, wird das mühsam. Es gibt deshalb einfachere Möglichkeiten diese Vektoren zu erstellen.

a = [1:6] b = [2:2:12] c = linspace(0,3,5)

Was machen diese Befehle?
Die Notation mit eckigen Klammern ist [start:step:end]. start ist der erste Wert der Sequenz, end grösser oder gleich dem letzten. step ist bezeichnet die Schrittlänge. Sie kann weggelassen werden, dann wird 1 verwendet.
linspace(start,end,N) erzeugt eine Zahlensequenz mit start und end als Grenzen und mit N Einträgen. Wird N weggelassen, bekommt der Vektor 100 Einträge.

Aufgabe 5

Definiere im Workspace folgenden Variablen:

Welche Längen haben die Vektoren x1, x2 und y1?

Lösung Anzeigen

x1=0:10 x2=linspace(0,10,80) y1=-10:2:10 length(x1) length(x2) length(y1)

Vektor- und Elementoperationen

Wenn du Vektoren nicht als mathematische Objekte sondern einfach als Listen von Zahlen verwendest, wirst du wohl auch mit den einzelnen Einträgen arbeiten wollen. So möchtest du vielleicht von jedem Eintrag die Quadratzahl bestimmen. Die naheliegendste Art funktioniert nicht:

a = [1:5] a^2

Das macht auch Sinn, denn das ist keine sinnvolle Matrizen-Operation. Um eine Operation auf die Elemente eines Vektors oder einer Matrix anzuwenden, musst du ihr einen . (Punkt) voranstellen.

a.^2

Dies kannst du mit allen Operatoren machen, auch bei solchen wie der Addition die sowieso nur elementweise ausgeführt werden können.

Aufgabe 6

Definiere die Vektoren a = [1 2 3] und b = [2 2 2]. Überlege dir dann für jede der folgende Operationen was sie macht und überprüfe deine Antwort indem du sie ausführst.

  1. a+2, a.+2
  2. a.+b, a+b
  3. a/b, a./b
  4. b^-1, b.^-1

Lösung Anzeigen

Du siehst, die Punkt-Operationen funktionieren in jedem Fall. Die Operationen ohne Punkt funktionieren nur, wenn das sinnvolle Vektor-Operationen sind.

Tipp: Setze immer einen Punkt, wenn du mit einzelnen Einträge arbeiten möchtest. Auch dann, wenn dies gar nicht nötig wäre. Damit verhinderst du sehr viel Verwirrung

Direktzugriff auf Vektorelemente

Manchmal wirst du auf ein einzelnes Element eines Vektors oder einer Matrix zugreifen wollen. Bei einem Vektor brauchst du dafür die Notation a(3), bei einer Matrix A(2,3). Dabei bezeichnet der erste Wert die gewünschte Zeile, der zweite die gewünschte Spalte.

A = eye(3) A(1,3) = 2 A(2,2)

Um auf einen Bereich der Elemente zuzugreifen, kannst du : verwenden. Alleine steht : für alle Elemente dieser Dimension. Setzt du vor und nach : je eine Zahl, so sind das die Grenzen. Mit A(:,2:3) bekommst du deshalb die 2. und 3. Spalte von A.

Eine weiteres, relativ häufiges Problem ist es, weitere Elemente zu einem bestehenden Vektor hinzuzufügen. Das kannst du erreichen, indem du auf direkt auf ein neues Element zugreifst

a = 1:7 a(8) = 8

Einfacher geht das aber wie folgt

a = [ a 9 10 ]

Schliesslich kannst du mit dem Direktzugriff auch einzelne Werte eines Vektors löschen:

a(5:6) = []

Aufgabe 7

Kopiere folgende Matrix in dein Eingabefenster M = [ 1 1 2 3; 1 2 2 3; 0 0 3 3; 4 4 4 4]. Verwende nun die Zugriffstechnik oben um daraus die folgende Matrix zu machen

1 1 2 3 1 1 2 3 4 4 3 3

Lösung Anzeigen

M = [ 1 1 2 3; 1 2 2 3; 0 0 3 3; 4 4 4 4] M(4,:) = [] M(2,2) = 1 M(3,1:2) = 4