Matrixmultiplikation und die Inverse daraus



  • Moin moin,

    ich würde gerne in Java eine Matrixmultiplikation von N x M Matrizen realisieren.
    Für die Eingabe würde ich einfach Zufallszahlen einsetzen.

    Mein Problem nun: Wie bekomme ich das Ergebnis getestet?

    Mir fehlt die Theorie dahinter, wie ich nun von meinem Ergebnis heraus darauf komme, ob das Ergebnis auch wirklich stimmt.

    Hat jemand einen Ansatz für mich?

    MfG
    craiten



  • Die Matrizenmultiplikation ist ja definiert. Verifziere einfach, dass dein Algorithmus sich an diese Definition hält. Das kannst du ja noch gegen ein paar Testfälle prüfen, wenn du dir nicht traust.

    Für die Inverse kannst du den Gauß-Algorithmus implementieren.



  • Also mit dem Gaußschen-Algortihmus, kann ich überprüfen, ob mein Ergebnis stimmt?
    Ich verstehe das Vorgehen und den Algorithmus, aber ich muss sagen das leuchtet mir noch nicht ganz ein.

    Mal Anhand dieses Beispiels von Wiki:
    http://de.wikipedia.org/wiki/Matrix_(Mathematik)#Matrizenmultiplikation

    Wie kann ich da nun mit dem Algorithmus herausfinden, ob

    | 12 -6  |
    | 39 -12 |
    

    wirklich stimmt?



  • Mach es dir nicht so kompliziert. Alles was du da jetzt programmierst um das zu testen, ist wesentlich Fehleranfälliger als die einfache Matrixmulti. Schau dir den Code genau an, gehe ihn Schritt für Schritt durch und teste ihn an ein paar Beispielen, fertig.

    craiten schrieb:

    Wie kann ich da nun mit dem Algorithmus herausfinden, ob

    | 12 -6  |
    | 39 -12 |
    

    wirklich stimmt?

    Via Zettel und Stift nachrechnen, vllt?



  • ScottZhang schrieb:

    Via Zettel und Stift nachrechnen, vllt?

    Die Frage war ja, wie ich das Ergebnis einer Multiplikation von zwei beliebi großen Matritzen auf richtigkeit überprüfen lassen kann, wenn ich dei zufallswerte nicht weiß.



  • Indem du es nochmal nachrechnest. Im Ernst, wie soll das einfacher gehen? Du kannst ein paar Plausibilitätstests machen, indem du mit speziellen Matrizen multiplizierst: Nullmatrix, Einheitsmatrix, Diagonalmatrix, Permutationsmatrix. Du kannst auch überprüfen, ob die Determinante des Produkts gleich dem Produkt der Determinanten der Faktoren ist.



  • craiten schrieb:

    ScottZhang schrieb:

    Via Zettel und Stift nachrechnen, vllt?

    Die Frage war ja, wie ich das Ergebnis einer Multiplikation von zwei beliebi großen Matritzen auf richtigkeit überprüfen lassen kann, wenn ich dei zufallswerte nicht weiß.

    1. Ich wuerde zum Testen keine besonders grossen Matrizen nehmen. 2x3 Matrizen und aehnliche Groessen reichen voellig aus.

    2. Ich wuerde zum Testen keine Zahlen zufaellig generieren. Du kannst Dir Zufallstests ueberlegen, aber die Zahlen sollten vorher feststehen und Du solltest das erwuenschte Ergebnis vorher auf eine andere Weise bestimmen. Zum Beispiel per Hand oder mit einem CAS.

    Testfaelle sollten ueberschaubar sein. Ich meine, was fuer Informationen kannst Du bei einem Test aus der Multiplikation zweier riesiger Matrizen entnehmen. Eigentlich doch nur "klappt nicht" oder "klappt". Du hast vielleicht die Hoffnung, dass bei genuegend grossen Daten einfach jeder moegliche Fehler auftreten wird. Das halte ich aber nicht unbedingt fuer Richtig. Ich wuerde eher explizit das Verhalten fuer "normale Faelle" testen und zusaetzlich ueberlegen, was es fuer Extremfaelle geben kann und die auch testen.

    Wenn Du Daten und Algorithmen hast, die Du nicht "im Kleinen" testen kannst, so dass Du Testresultate bekommst, mit denen Du etwas anfangen kannst, dann solltest Du das Verfahren auf unterschiedliche Weisen implementieren und die Implementationen gegeneinander testen.



  • Ich verstehe nicht ganz was du meinst, wenn du sagst das du die Zufallswerte nicht kennst.

    Du gibst zwei Matrizen rein und bekommst das Produkt, dazu musst die zwei Matrizen kennen. Das einfachste wäre wirklich das mit ner alternative hinterherzurechnen. Wenn deine Hand dazu kein Bock hat, nimm sowas wie Matlab oder Maple.

    Wenn du da jetzt anfängst, ein Algorithmus zu implementieren der dir die Pseudoinverse bestimmt, dann ist das tausendmal fehleranfälliger als die Matrizenmultiplikation. Im Gegenteil, du bräuchten diese um deinen Algorithmus zu überprüfen. Und du müssten auch erstemal ein Implementation finden die ohne Matrizenmultiplaktion auskommt. Das beißt sich einfach in den Schwanz ...



  • DU testest die Implementation deines Algorithmuses in dem du einfach mal ein paar 2x2 und 3x3 matrizen multiplizierst und das ergebnis per hand oder einem anderen programm verifizierst.
    Es ist anzunehmen, dass dein Code dann auch für beliebige Matrizen funktioniert, da sich das Vorgehen nicht ändert.


Anmelden zum Antworten