# Matrizenrechnung

Die folgenden Beispiele zeigen einige der in mathGUIde eingebauten Möglichkeiten der Matrizenrechnung.

## Vektoren

Die mathGUIde-Klasse `Vektor` ist von der Python-Klasse `list` abgeleitet. Einem `Vektor`-Objekt stehen also alle Listen-Methoden zur Verfügung, darüberhinaus aber weitere Methoden der Vektorrechnung.
Ein `Vektor` wird in mathGUIde definiert, indem man dem Konstruktor eine Liste der Vektorkomponenten übergibt.
Wir wollen das mit den rationalen Zahlen

\frac 1 7 \quad \frac 2 7 \quad \frac 3 7 \quad \ldots \quad \frac 8 7

testen. Dazu verwenden wir eine List Comprehension:

    v =  Vector([Rational(i,7) for i in fromTo(1,8)])

Um das Skalarprodukt von v mit sich selbst zu berechnen, geben Sie ein:

    v * v

Nun wollen wir die folgende Matrix definieren:

A = \pmatrix{\frac 2 3 & 1 & 1 & 0 \cr 3 & 5 & 0 & 1}

Oben links steht die rationale Zahl 2/3. Diese sollte in mathGUIde auch als rationale Zahl erhalten bleiben und nicht in eine Gleitkommazahl umgewandelt werden, denn nur so werden die Rechenergebnisse exakt.

Sie können die Matrix z. B. eingeben, indem Sie dem `Matrix`-Konstruktor eine Liste der Zeilen (wiederum Listen) übergeben. Hier sind (nur zur besseren Übersicht) die beiden Matrixzeilen auf zwei Textzeilen umbrochen und Leerzeichen eingefügt:

    A = Matrix([[Rational(2,3), 1, 1, 0],
                [     3,        5, 0, 1]])

Alternativ können Sie die Klassenmethode `Matrix.fromString` verwenden. Hier werden die Zeilen durch Semikolons, die einzelnen Elemente durch Kommas getrennt.
Ein Vorteil dieser Methode: Rationalen Zahlen können Sie einfach mit Bruchstrich schreiben. Auch hier dienen die Leerzeichen nur der besseren Übersicht. Sie könnten nach dem Semikolon auch wieder einen Zeilenumbruch einfügen:

    A = Matrix.fromString("2/3, 1, 1, 0;  3, 5, 0, 1")

Wir wollen nun testen, ob die linke 2x2-Teilmatrix dieser Matrix invertierbar ist:

    # Auswahl einer Untermatrix
    B = A.submatrix(0,0,2,2)

    # Inverse Matrix
    B.inverse()

Es folgen einige Beispiele für weitere `Matrix`-Methoden:

    # Einheitsmatrix
    I = Matrix.identity(2)
    print(I)

    # 2*3-Zufallsmatrix mit Werten im Bereich 0 bis 99
    R = Matrix.random(2, 3, 100)
    print(R)

    # Transponierte Matrix
    T = ~R # lässt sich auch als R.transpose() schreiben
    print(T)

    # Produktmatrix
    P = R * T
    print(P)

    # Determinante von P
    P.det()

Um weitere .... TODO