Multiplikation zweier Matrizen

kantolyo123

Mitglied
Ich bin gerade dabei ein Programm zu programmieren, das zwei Matrizen multiplizieren soll. Mein Problem ist nur, dass ein völlig falsches Ergebnis rauskommt. Hat jemand einen Tipp für mich? Wäre echt super. Hier mein bisheriges Vorgehen:

public class Matrix12 {



public static void main(String[] args) {

//Definition der 1.Matrix

int z1 = Integer.parseInt(args[0]);

int s1 = Integer.parseInt(args[1]);

int[][] matrix1 = new int [z1][s1];



//Füllen der 1.Matrix

for(int i = 0; i < matrix1.length; i++) {

for(int j = 0; j < matrix1.length; j++) {

matrix1[j] = (int)(z1*s1);

}

}

//Definition der 2.Matrix

int z2 = Integer.parseInt(args[2]);

int s2 = Integer.parseInt(args[3]);

int[][] matrix2 = new int [z2][s2];



//Füllen der 2.Matrix

for(int i = 0; i < matrix2.length; i++) {

for(int j = 0; j < matrix2.length; j++) {

matrix2[j] = (int)(z2*s2);

}

}

//Multiplikation der beiden Matrizen



int[][] ergebnismatrix = new int[z1][s1];

for(int i = 0; i < z1; i++) {

for(int j = 0; j < s1; j++) {













//Formt die neue Matrix

for(int p = 0; p < z1; p++)

ergebnismatrix[j] += matrix1[p] * matrix2[p][j];





}}





//Ausgabe der ergebnismatrix

for(int i = 0; i < z1; i++) {

for(int j = 0; j < s1; j++) {













System.out.print(ergebnismatrix[j] + "\t");

}



}}



}
 

klauskarambulut

Bekanntes Mitglied
Das mußt du nochmal posten in
Code:
[code=JAVA]Programmcode
[/code]

da
Code:
[i]
rekursiv wird, weil die Forensoftware dazu zu dämlich ist.
 

kantolyo123

Mitglied
public class Matrix12 {

public static void main(String[] args) {
//Definition der 1.Matrix
int z1 = Integer.parseInt(args[0]);
int s1 = Integer.parseInt(args[1]);
int[][] matrix1 = new int [z1][s1];

//Füllen der 1.Matrix
for(int i = 0; i < matrix1.length; i++) {
for(int j = 0; j < matrix1.length; j++) {
matrix1[j] = (int)(z1*s1);
}
}
//Definition der 2.Matrix
int z2 = Integer.parseInt(args[2]);
int s2 = Integer.parseInt(args[3]);
int[][] matrix2 = new int [z2][s2];

//Füllen der 2.Matrix
for(int i = 0; i < matrix2.length; i++) {
for(int j = 0; j < matrix2.length; j++) {
matrix2[j] = (int)(z2*s2);
}
}
//Multiplikation der beiden Matrizen

int[][] ergebnismatrix = new int[z1][s1];
for(int i = 0; i < z1; i++) {
for(int j = 0; j < s1; j++) {






//Formt die neue Matrix
for(int p = 0; p < z1; p++)
ergebnismatrix[j] += matrix1[p] * matrix2[p][j];


}}


//Ausgabe der ergebnismatrix
for(int i = 0; i < z1; i++) {
for(int j = 0; j < s1; j++) {






System.out.print(ergebnismatrix[j] + "\t");
}

}}

}
 

kantolyo123

Mitglied
Java:
public class Matrix12 {
           
            public static void main(String[] args) {
                //1.Matrix
                int z1 = Integer.parseInt(args[0]);
                int s1 = Integer.parseInt(args[1]);
                int[][] matrix1 = new int [z1][s1];
                for(int i = 0; i < matrix1.length; i++) {
                    for(int j = 0; j < matrix1[i].length; j++) {
                        matrix1[i][j] = (int)(z1*s1);
                    }
                }
                        //2.Matrix
                        int z2 = Integer.parseInt(args[2]);
                        int s2 = Integer.parseInt(args[3]);
                        int[][] matrix2 = new int [z2][s2];
                        for(int i = 0; i < matrix2.length; i++) {
                            for(int j = 0; j < matrix2[i].length; j++) {
                                matrix2[i][j] = (int)(z2*s2);
                            }
                        }
                    //Multiplikation
                       
                        int[][] ergebnismatrix = new int[z1][s1];
                        for(int i = 0; i < z1; i++) {
                            for(int j = 0; j < s1; j++) {
                                for(int k = 0; k < z1; k++)
                                    ergebnismatrix[i][j] += matrix1[i][k] * matrix2[k][j];
                                   
                               
                            }}
                       
                       
                        //Ausgabe der ergebnismatrix
                        for(int i = 0; i < z1; i++) {
                            for(int j = 0; j < s1; j++) {
                               
                System.out.print(ergebnismatrix[i][j] + "\t");
                        }
               
        }}

    }
 

InfectedBytes

Top Contributor
sieht doch schon viel besser aus^^
jetzt wäre es noch gut, wenn du schreibst was denn rauskommen sollte und was tatsächlich rauskommt.
Was gibst du dem Programm denn für Parameter mit?
Eine Sache fällt mir direkt auf, du setzt jedes einzelne Feld deiner ersten Matrix auf den wert z1*s1
und bei der zweiten matrix auf z2*s2. Ist das gewollt? oder sollen die Matrizen mit den weiteren Startparametern gefüllt werden?
Ansonsten solltest du noch deine Ausgabe anpassen. Bisher schreibst du nämlich alles in eine Zeile
Java:
for(int i =0; i < z1; i++){
  for(int j =0; j < s1; j++){
    System.out.print(ergebnismatrix[i][j]+"\t");
  }
  System.out.println();
}
 

kantolyo123

Mitglied
Danke für deine Antwort. Ich übergebe dem Programm einen Wert z1 für die Zeilenzahl der ersten Matrix, s1 für die Spaltenzahl, dann folgen die Werte der Matrix und dann das gleiche mit der zweiten Matrix. Es soll alles in einer Zeile auf der Konsole eingegeben werden, also zum Beispiel für die Matrix
2 4
5 6
folgt die Eingabe 2 2 2 4 5 6

Die Bezeichnungen z1 und z2 bzw. s1 und s2 habe ich gewählt, um die Matrizen auseinander halten zu können
 

klauskarambulut

Bekanntes Mitglied
Das Format des Ergebnisses pass bei einer Matrix Multiplikation nicht:
(z1 x s1) * (z2 x s2) ist (z1 x s2)

Java:
if(s1 != z2) {
  System.out.println("Falsches Format");
} else {
int[][] ergebnismatrix =newint[z1][s2];
  for(int i =0; i < z1; i++){
    for(int j =0; j < s2; j++){
      for(int k =0; k < s1; k++) {
        ergebnismatrix[i][j]+= matrix1[i][k]* matrix2[k][j];
}
 

InfectedBytes

Top Contributor
du liest die matrix halt nicht richtig ein.
bei der eingabe 2 2 2 4 5 6
erzeugst du eine matrix der größe 2*2 (korrekt) und setzt jeden einzelnen wert darin auf 2*2
=>
4 4
4 4
Die zweite Matrix hat dann die größe 2*4 und wird mit dem wert 2*4 gefüllt.
Du benutzt halt IMMER die ersten vier parameter als matrix dimensionen:
Java:
int z1 = Integer.parseInt(args[0]);
int s1 = Integer.parseInt(args[1]);
int[][] matrix1 = new int [z1][s1];
// ...
int z2 = Integer.parseInt(args[2]);
int s2 = Integer.parseInt(args[3]);
 

InfectedBytes

Top Contributor
die ersten beiden parameter einlesen und als dimension der ersten Matrix zu nutzen ist korrekt.
Danach solltest du aber die Matrix auch erstmal richtig befüllen und nicht einfach alle Einträge auf z1*s1 setzen.
Eine simple Lösung wäre diese hier:
Java:
int pos = 0; // position innerhalb deines parameter arrays
int z1 = Integer.parseInt(args[pos++]); // args[pos] holen und danach pos um eins erhöhen
int s1 = Integer.parseInt(args[pos++]);
int[][] matrix1 = new int[z1][s1];
for(int y=0;y<z1;y++) { // zeilen durchgehen
  for(int x=0;x<s1;x++) { // spalten durchgehen
    matrix1[y][x] = Integer.parseInt(args[pos++]);
  }
}
Analog für die zweite Matrix
 

kantolyo123

Mitglied
Code:
//1.Matrix
                int pos = 0;
                int z1 = Integer.parseInt(args[pos++]);
                int s1 = Integer.parseInt(args[pos++]);
                int[][] matrix1 = new int [z1][s1];
               
                for(int y=0;y<z1;y++) {
                    for(int x=0;x<s1;x++) {
                        matrix1[y][x] = Integer.parseInt(args[pos++]);
                       
                    }
                    }
                }
            //2.Matrix
            int pos1 = 0;
            int z2 = Integer.parseInt(args[pos++]);
            int s2 = Integer.parseInt(args[pos1++]);
            int[][] matrix2 = new int [z2][s2];
}
            for(int y=0;y<z2;y++) {
                for(int x=0;x<s2;x++) {
                    matrix2[y][x] = Integer.parseInt(args[pos++]);
                       
                            }
                        }
 

InfectedBytes

Top Contributor
du hast da irgendwie deine Klammern durcheinander gebracht. geh deinen code einfach mal durch und korrigiere die Klammern.
Tipp: bei der ersten Matrix öffnest du zwei Klammern, schließt danach aber drei...
 

InfectedBytes

Top Contributor
ganz offensichtlich sind sie noch nicht ganz in Ordnung.
Allein in dem obigen Code befindet sich noch eine weitere Klammer die einfach zu geht, ohne vorher geöffnet worden zu sein.
Rück deinen Code einfach mal ordentlich ein, dann sieht man sofort wo Klammer fehler sind
 

kantolyo123

Mitglied
Code:
public static void main(String[] args) {
                //1.Matrix
                int pos = 0;
                int z1 = Integer.parseInt(args[pos++]);
                int s1 = Integer.parseInt(args[pos++]);
                int[][] matrix1 = new int [z1][s1];
               
                for(int y=0;y<z1;y++) {
                    for(int x=0;x<s1;x++) {
                        matrix1[y][x] = Integer.parseInt(args[pos++]);
                       
                    }
                    }
                }
            //2.Matrix
            int pos1 = 0;
            int z2 = Integer.parseInt(args[pos++]);
            int s2 = Integer.parseInt(args[pos1++]);
            int[][] matrix2 = new int [z2][s2];{

            for(int y=0;y<z2;y++) {
                for(int x=0;x<s2;x++) {
                    matrix2[y][x] = Integer.parseInt(args[pos++]);
                }
            }
            }
}
 

InfectedBytes

Top Contributor
sogar der Klammerfehler den ich eben genannt habe ist dort noch vorhanden...zweimal sogar

Ich will jetzt nicht gemein klingen, aber ein bisschen Eigeninitiative musst du schon erbringen. Und Klammerfehler zu korrigieren ist jetzt nicht unbedingt eine komplexe angelegenheit
 

JStein52

Top Contributor
Vorschlag: Die ersten drei Aufrufparameter geben die Dimensionen der beiden Matrizen an die du multiplizieren willst. Denn du kannst nur eine mxn mit einer nxk - Matrix multiplizieren. Mit diesen werten
kannst du dann deine Eingabematrizen und die Ergebnismatrix dimensionieren (die ist dann nämlich mxk).
Und die nächsten Parameter sind dann die Inhalte der Matrizen. Etwa so:

Java:
public class MatrixMult {

    public static void main(String[] args) {

        if (args.length < 3) {
            System.out.println("Falsche Anzahl von Parametern");
            return;
        }
        int n = Integer.parseInt(args[0]);
        int m = Integer.parseInt(args[1]);
        int k = Integer.parseInt(args[2]);

        int[][] a = new int[n][m];
        int[][] b = new int[m][k];
        int[][] c = new int[n][k];

        if (args.length < (3 + n * m + m * k)) {
            System.out.println("Falsche Anzahl von Parametern");
            return;
        }
        for (int z = 0; z < n; z++) {
            for (int s = 0; s < m; s++) {
                a[z][s] = Integer.parseInt(args[3 + (z * n + s)]);
            }
        }
        for (int z = 0; z < m; z++) {
            for (int s = 0; s < k; s++) {
                b[z][s] = Integer.parseInt(args[3 + (n * m) + (z * n + s)]);
            }
        }
        // hier kommt jetzt die Multiplikation hin du du ja im Prinzip schon hattest.
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
S Multiplikation von zwei Labels Java Basics - Anfänger-Themen 7
F Matrix Multiplikation Java Basics - Anfänger-Themen 3
G Java Bruchrechner Addition, Multiplikation... Java Basics - Anfänger-Themen 12
Z Matrix Klasse mit Mehrdimensionalen Array (Addition, Multiplikation, to String) Java Basics - Anfänger-Themen 57
O Erstes Programm: Matrizen Multiplikation Java Basics - Anfänger-Themen 10
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
D Methoden Matrix Multiplikation Java Basics - Anfänger-Themen 27
J Funktionsaufrufe Multiplikation von Arrays Java Basics - Anfänger-Themen 3
Joker4632 Klassen BigDecimal Multiplikation liefert nicht erwarteten Wert Java Basics - Anfänger-Themen 6
TomatenBrot447 Adapter für eine optimierte Multiplikation Java Basics - Anfänger-Themen 5
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
P Variablen Negatives Ergebnis bei Multiplikation von großen Zahlen Java Basics - Anfänger-Themen 2
R Matrix-Vektor-Multiplikation Java Basics - Anfänger-Themen 13
K Seltsames Ergebnis in Netbeans bei einfacher Multiplikation Java Basics - Anfänger-Themen 5
T Operatoren Multiplikation nur mit Addition, Subtraktion und Vergleich Java Basics - Anfänger-Themen 29
S Multiplikation durch Addition, Subtraktion und Vergleich von Zahlen Java Basics - Anfänger-Themen 14
V Vor jeder Multiplikation den linken Multiplikator abrunden Java Basics - Anfänger-Themen 4
M Matrix Matrix Multiplikation Java Basics - Anfänger-Themen 6
W Multiplikation mit rekursivem Aufruf Java Basics - Anfänger-Themen 17
S Multiplikation von großen Zahlen, ohne BigInt uä Java Basics - Anfänger-Themen 7
F.S.WhiTeY Multiplikation nach der Schulmethode Java Basics - Anfänger-Themen 6
K Matrizen Multiplikation Java Basics - Anfänger-Themen 3
B Multiplikation bei Generics Java Basics - Anfänger-Themen 9
G Multiplikation falsches Ergebnis Java Basics - Anfänger-Themen 5
K double Multiplikation Java Basics - Anfänger-Themen 2
K einfache Multiplikation Java Basics - Anfänger-Themen 6
2 Variablenüberlauf bei Addition, Multiplikation Java Basics - Anfänger-Themen 2
O Überlauf durch Multiplikation Java Basics - Anfänger-Themen 7
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
C Kollision zweier Rechtecke, Schnittpunkte bestimmen Java Basics - Anfänger-Themen 25
C alle möglichen Kombinationen zweier Ziffern auf drei / vier / und 'n" Stellen Java Basics - Anfänger-Themen 11
D Interaktion zweier Objekte Java Basics - Anfänger-Themen 5
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
H Gemeinsame Schnittmenge zweier Arrays ausgeben Java Basics - Anfänger-Themen 12
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
K Datentypen Einträge zweier Matrizen vergleichen Java Basics - Anfänger-Themen 4
K Erste Schritte Berechnung der Summe zweier Arrays Java Basics - Anfänger-Themen 15
S Vergleich zweier ArrayLists mit Ausgabe an dritte ArrayList Java Basics - Anfänger-Themen 5
I Schnittpunkt zweier Geraden berechnen Java Basics - Anfänger-Themen 25
G Klassen Vergleich zweier Klassen Java Basics - Anfänger-Themen 23
S Implementieren zweier Klassen Java Basics - Anfänger-Themen 5
P Ungerade Zahlen ausgeben lassen zwischen Spannweite zweier eingegeben zahlen Java Basics - Anfänger-Themen 6
L Vergleich zweier Variablen, mit Abweichung Java Basics - Anfänger-Themen 3
N Methoden Methode zum Vergleich zweier Geburtstage Java Basics - Anfänger-Themen 5
D Zusammenfassen zweier Programme Java Basics - Anfänger-Themen 3
B Kreuzprodukt zweier Vektoren (Erste Java Aufgabe - Hilfestellungen und Tips erwünscht) Java Basics - Anfänger-Themen 4
M Vergleich zweier Array Stellen mit equals/NullpointerException Java Basics - Anfänger-Themen 9
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
N Vergleich zweier String Arrays scheitert Java Basics - Anfänger-Themen 3
C Proportionale Abnahme zweier Werte Java Basics - Anfänger-Themen 4
O ArrayListe sortieren anhand zweier Parameter Java Basics - Anfänger-Themen 4
C Inhalte zweier Vektoren vergleichen Java Basics - Anfänger-Themen 3
T Programm, das die Differenz zweier Daten ausgibt Java Basics - Anfänger-Themen 4
S Ermittlung des GGTs zweier Werte Java Basics - Anfänger-Themen 5
Y Erste Schritte Verknüpfung zweier JAVA-Codes Java Basics - Anfänger-Themen 8
A Methoden Gedanken Anstöße zur Realisierung zweier Ideen (Grafisch Sekunden zählen und Frameaufteilung) Java Basics - Anfänger-Themen 18
I Einlese Abfrage zweier Variablen in einem Fenster Java Basics - Anfänger-Themen 6
A Durchschnitt zweier Mengen berechnen Java Basics - Anfänger-Themen 3
G Kombination zweier Befehle (Preis festlegen & Rabatt berechnen) Java Basics - Anfänger-Themen 3
W Methoden größe zweier tiere vergleichen Java Basics - Anfänger-Themen 15
K Schnitt zweier Ebenen ergibt Gerade Java Basics - Anfänger-Themen 10
L vergleich zweier texte Java Basics - Anfänger-Themen 18
B Vergleich zweier Objekte durch "Hashfunktion" Java Basics - Anfänger-Themen 12
J Addition zweier Zahlen Java Basics - Anfänger-Themen 9
J Dimensionen zweier Arrays vergleichen Java Basics - Anfänger-Themen 4
U Größenvergleich / Dimensionsvergleich zweier Matrizen Java Basics - Anfänger-Themen 2
N Datenaustausch zweier rechner Java Basics - Anfänger-Themen 4
turmaline Gleicheit zweier Listen Java Basics - Anfänger-Themen 12
S Print Methode zweier "Classes" kombinieren Java Basics - Anfänger-Themen 2
C Dateiinhalt zweier Dateien auf Gleichheit prüfen Java Basics - Anfänger-Themen 3
S Addition zweier 32 Byte langer ByteArrays Java Basics - Anfänger-Themen 5
W Unterschiede zweier Dateien herauslesen Java Basics - Anfänger-Themen 7
P Unterschiede zweier System.in Varianten Java Basics - Anfänger-Themen 3
I Abhängigkeiten zweier Klassen Java Basics - Anfänger-Themen 25
G Vergleich zweier Arrays Java Basics - Anfänger-Themen 8
D Eine Nachkommazahl zweier Double vergleichen Java Basics - Anfänger-Themen 4
N sortieren zweier abhängiger array listen Java Basics - Anfänger-Themen 12
S Addieren zweier Arrays Java Basics - Anfänger-Themen 10
T ermittlung des minimus zweier eingegebener werte Java Basics - Anfänger-Themen 7
G größere zweier zahlen ermitteln und ausgeben Java Basics - Anfänger-Themen 6
G Summe zweier doubles falsch? Java Basics - Anfänger-Themen 10
I Kollision zweier Rechtecke Java Basics - Anfänger-Themen 9
H Genauigkeit beim Multiplizieren zweier Zahlen Java Basics - Anfänger-Themen 2
K Vergleich zweier Objekte in einer HashMap Java Basics - Anfänger-Themen 6
B Zusammenspiel zweier JFrames Java Basics - Anfänger-Themen 2
A Schnitt zweier Rechtecke ermitteln Java Basics - Anfänger-Themen 2
N Vergleich zweier Elemente verschiedener Vectoren Java Basics - Anfänger-Themen 2
G Vergleich zweier 'long'-Werte. Problem! Java Basics - Anfänger-Themen 6
T Inhalte zweier Variablen tauschen Java Basics - Anfänger-Themen 18
U Maximum zweier Zahlen ermitteln Java Basics - Anfänger-Themen 7
N Den Inhalt zweier Strings (Zahlen) addieren Java Basics - Anfänger-Themen 5
S maximum zweier Zahlen Java Basics - Anfänger-Themen 1
S 2D Array Matrizen Java Basics - Anfänger-Themen 7
E 2 Matrizen multiplizieren - Output fehlt... Java Basics - Anfänger-Themen 5
H Erste Schritte Determinantenberechnung von Matrizen Java Basics - Anfänger-Themen 1
U Erste Schritte Aufbau eines kleinen Matrizen-Programms(MVC; OOP) Java Basics - Anfänger-Themen 20
B summe von 2 Matrizen Java Basics - Anfänger-Themen 20
R Matrizen nebeneinander ausgeben. Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben