Serie 4
Martina Musterfrau, Max Mustermann 2. April 2013
Inhaltsverzeichnis
1 Theorie 1
2 Algorithmus 2
3 Implementierung 3
3.1 Main.java . . . 3
3.2 statischeMethoden.java . . . 3
3.2.1 determinante . . . 3
3.2.2 inverse . . . 3
4 Beispiele/Experimente 4
Ziel der Aufgabe war es, eine vom Nutzer eingegebene 2×2-Matrix zu invertieren. Hierbei sollten Fehler abgefangen werden und die Ausgabe in der Konsole erfolgen.
1 Theorie
Satz 1.1 Es sei K ein K¨orper und M sei eine n×n-Matrix mit Eintr¨agen aus dem K¨orperK. Dann gilt: M ist genau dann invertierbar, wenn eine der folgenden ¨aquivalenten Bedingungen erf¨ullt ist:
• Es gibt eine Matrix N mit M·N =En=N ·M, wobei
En:= diag(1, . . . ,1
| {z }
n-mal
) =
1 0 · · · 0
0 . .. ... ...
... . .. ... 0
0 · · · 0 1
• Die Determinante vonM ist ungleich0.(Bemerkung: Auf die Definition der Determinanten wird an dieser Stelle verzichtet.)
Man bezeichnet die Inverse einer Matrix M mit M−1.
Zur Berechnung der Inversen nutzen wir hier die Hilfe der Adjunkten Matrix und nicht den Gauß-Jordan-Algorithmus. Diese Methode ist zwar im Allge- meinen, d.h. f¨ur hohe Dimensionen der Matrix, zu umfangreich, um effizient eingesetzt werden zu k¨onnen, hier liegt uns allerdings nur eine 2×2-Matrizen vor, f¨ur welche dies nicht gilt.
Dabei ist die Adjunkte adj(M) einer Matrix M wie folgt definiert:
adj(M) =
me11 me12 · · · me1n
me21 . .. . .. ... ... . .. . ..
me(n−1)n
men1 · · · men(n−1) menn
T
mit
meij := (−1)i+j·Mij
und den Minoren Mij
Mij :=
m11 · · · m1(j−1) m1(j+1) · · ·m1n
... . .. ... ... . .. ...
mi−11 · · · m(i−1)(j−1) m(i−1)(j+1) · · · m(i−1)n
mi+11 · · · m(i+1)(j−1) m(i+1)(j+1) · · · m(i+1)n
... . .. ... ... . .. ...
mn1 · · · mn(j−1) mn(j+1) · · ·mnn
,
welche entstehen, wenn man die Determinante der Matrix berechnet, die aus der MatrixM entsteht, wenn man diei-te Zeile undj-te Spalte streicht.
Mit Hilfe der Adjunkten berechnet sich die Inverse einer Matrix folgender- maßen:
M−1 = 1
det(M) ·adj(M) Speziell im Fall einer 2×2-Matrix M der Form
M = a b
c d
heißt das
M−1 = 1 det(M)
d −b
−c a
(1) mit
det(M) = |M|=ad−bc, (2)
da die Minoren Mij hier nur die entsprechend modifizierten (sprich: mit (−1)i+j multiplizierten) Eintr¨age sind. (Die Determinante einer 1×1-Matrix, d.h. einer reellen Zahl, ist die Zahl selbst.)
2 Algorithmus
(Bemerkung: In diesem Abschnitt werden normalerweise Besonderheiten des Algorithmus bei der Implementierung beschrieben.
Beispiel: Fl¨achenberechnung eines Dreiecks mittels a*b/2 und nicht (1/2)*a*b anderes Beispiel: wie werden Gleichungsysteme gel¨ost? Mittels Inversenbe- rechnung oder L¨osen eines Gleichungssystems?
3 Implementierung
Zu diesem Zweck wurden drei java-Files erstellt:
a) Main.java:
unsere main-Methode, b) statischeMethoden.java:
mit Hilfe der Methoden aus dieser Klasse wird eine 2×2-Matrix inver- tiert oder deren Determinante berechnet
c) InvertierException.java:
Klasse, in welcher wir uns das Objekt/ den Fehler InvertierException konstruieren. Dieses Objekt bedarf keiner Erlaeuterung.
3.1 Main.java
Hierin wird die Kommunikation mit dem Nutzer ¨ubernommen, d.h. Ein- und Ausgabe der Daten, Abfangen der Fehler (siehe 1.1) sowie die ¨Ubergabe derer an die Untermethoden.
3.2 statischeMethoden.java
Wie oben beschrieben, befinden sich in dieser Klasse zwei Methoden, die wir im Folgenden beschreiben:
3.2.1 determinante
public static doubledeterminante(double[][] matrix)
Diese Methoden berechnet, wie es der Name verr¨at, die Determinante der Matrix, die als double[][]-Array ’matrix’ vorliegt, sofern diese eine 2 × 2- Matrix ist und gibt sie zur¨uck. Wir nutzen dabei zur Berechnung die Formel aus (2).
3.2.2 inverse
public static double[][]inverse( double[][] matrix)
Hierin wird die Inverse der Matrix ’matrix’ mittels der Adjunkten und der Determinante mittels (1) und (2) berechnet und zur¨uckgegeben.
4 Beispiele/Experimente
Geben wir nun die invertierbare Matrix
2 4 5 6
ein, so erhalten wir als Aus- gabe:
Die eingegebene Matrix ist:
2 4
5 6
Die Inverse ihrer Matrix ist:
-0.7500000000000000 0.5000000000000000 0.6250000000000000 -0.2500000000000000
Diese entspricht der exakten Inversen. Betrachten wir den Fall einer nicht invertierbaren Matrix:
Die eingegebene Matrix ist:
0 1
0 1
Die eingebene Matrix ist nicht invertierbar
Wie man sieht, funktioniert das Programm hier einwandfrei.