Matrizenmultiplikation



  • Hallo,

    ich beschäftige mich gerade damit zwei Matrizen zu multiplizieren. Das einlesen in ein mehrdimensionales Array und die Überprüfung auf mathematiche Korrektheit funktioniert soweit. Jedoch komme ich gerade bei der Multiplikation der beiden Matrizen mächtig ins Stocken.
    Ich hab hier im Forum auch schon ein Thread dazu gelesen, jedoch ist der dort gepostete Quellcode etwas verwirrende. Zumindest für mich 😉
    Anbei ein kleiner Codeausschnitt, vielleicht sticht ja einem von Euch der Fehler direkt ins Auge.

    // Ergebnis berechnen -> Matrix C
        for(p=0; p<as; p++)
        { 
             for(q=0; q<bz; q++) 
             {      
                 matC[p][q] += matA[p][q] * matB[p][q];
             }
        }
    

    Der oben gepostete Code soll die Berechnung darstellen, jedoch wird mir das falsche Ergebnis geliefert.
    Hat jemand eine Idee?

    xAmp



  • Hi,

    also meiner Meinung nach fehlt da eine for-Schleife.

    Versuchs mal so:

    for(int x=0;x<zeilen;x++){
    	for(int j=0;j<zeilen;j++){	
    		int result = 0;
    		for(int y=0;y<spalten;y++){			
    				result += matrixA[x][y] * matrixB[y][j];
    		}
    		matrixC[x][j] = result;
    	}		
    }
    

    gruß smilingman



  • Wow, super! Jetzt stimmt die Lösung!
    Hmm jetzt muss ich nur noch ganz die Schleifen verstehen 😉



  • Ich glaube, der Code von smilingman stimmt nur für quadratische Matrizen. Du könntest bei der zweiten Schleife Zeilen durch Spalten ersetzen. Das ist dann ja dasselbe. Der Code wird dadurch etwas offensichtlicher.

    Man kann auch nichtquadratische Matrizen multiplizieren. Bei nichtquadratischen Matrizen müsstest du in der innersten Schleife die Spaltenzahl der ersten Matrix nehmen (=Zeilenzahl der zweiten Matrix. Das ist die Bedingung) Aber das weißt du sicher. 🙂



  • matrize schrieb:

    Ich glaube, der Code von smilingman stimmt nur für quadratische Matrizen. Du könntest bei der zweiten Schleife Zeilen durch Spalten ersetzen. Das ist dann ja dasselbe. Der Code wird dadurch etwas offensichtlicher.

    Man kann auch nichtquadratische Matrizen multiplizieren. Bei nichtquadratischen Matrizen müsstest du in der innersten Schleife die Spaltenzahl der ersten Matrix nehmen (=Zeilenzahl der zweiten Matrix. Das ist die Bedingung) Aber das weißt du sicher. 🙂

    das funktioniert extrem gut, aber wie kommt man auf das ergebniss? es ist für mich nicht so selbsverständlich. ich habe sogar nur 2x2 matrix aufgeschrieben, nummeriert, aber auf diese Algorithmus wurde ich niemals kommen


  • Mod

    Glaubst du, dass irgendein Unregistrierter von vor 4 Jahren hier jetzt zufällig deine Frage liest?

    Der Algorithmus ist naive Matrizenmultiplikation wie in der Schule, da ist gar nichts geheimnisvolles dran. Wenn du da auf dem Papier nicht drauf gekommen bist, solltest du hier oder im Matheforum (je nach Schwerpunkt deiner Frage) nochmal nachhaken, denn dann hast du höchstwahrscheinlich Matrizenmultiplikation nicht verstanden.



  • o ja Matrixenmultiplikation verstehe ich schon, aber wie man auf diese schleifen kommt, dazu komme ich irgendwie nicht. Irgendwann werde ich vieleicht kapieren

    tut mir leid, dass ich so viel in forum schreibe und euch nerve. Ich habe nur der Stoff und habe mir viele beispele besorgt und programmiere ich jede, damit ich vieleicht die Prüfung in Oktober schaffe. Ausser euch habe ich niemanden den ich fragen konnte oder meine codes zeigen konnte


Anmelden zum Antworten