Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich weiß es gibt schon ne Menge zu dem Thema im Internet, aber irgendwie werde ich aus vielem nicht schlau. Es geht wie in der Überschrift erwähnt um die Multiplikation einer Matrix mit einem Vektor.
Java:
public void mul(int [][] matrix, int [] vektor){
int [] newVektor = {0,0,0};
for(int i = 0; i < matrix.length ; i++){
for (int j = 0; j < matrix[0].length; j++){
newVektor[i] += matrix [i][j] * vektor[i];
System.out.print (newVektor);
}
}
}
Führe ich die Methode in der main-methode aus, werden mir aber nur die Speicherplätze der Arrays ausgegeben (jedenfalls glaube ich, dass das die Speicherstellen sind). Ist der Code so überhaupt korrekt? Wie kann ich das ganze korrekt ausführen, sodass ich am Ende den Ergebnisvektor kriege?
Schöner wäre es sicherlich, wenn deine Methode eine Vektor zurückgibt, statt ihn einfach nur zu berechnen und dann wegzuschmeißen.
Die Ausgabe kannst du dann in einer gesonderten Methode, unabhängig von der Berechnung realisieren
Entweder du programmierst deine Lösung für 3x3 Matrizen und 3-dim Vektoren (bzw auch nx3-Matrizen und 3-dim Vektoren), oder du machst es so allgemein wie möglich für nxm-Matrizen und m-dim Vektoren, aber dieses Mischmasch da gefällt mir nicht wirklich.
Den Inhalt deines Arrays kannst du bequem mit Arrays.toString(·) aus java.util ausgeben lassen, wenn du keine bestimmte Formatierung des Ausgabe oÄ wünscht. Momentan gibst du wirklich nur die Adresse im Speicher an, an der dein Vektor liegt.
Habe aus der void-Methode jetzt ne int-Methode gemacht. Allerdings weiß ich nicht genau wie ich den ergebnisvektor ausgebe ...
Java:
public int mul(int [][] matrix, int [] vektor){
int [] newVektor;
for(int i = 0; i < matrix.length ; i++){
for (int j = 0; j < matrix[0].length; j++){
newVektor[i] += matrix [i][j] * vektor[i];
return newVektor[];
}
}
}
funktioniert nicht so ganz ... was schreibe ich in die eckigen klammern?
Also das Ziel ist es Matrizen und Vektoren beliebiger Größe multiplizieren zu können. Allerdings gehe ich davon aus, dass die Dimension des Vektors mit der Höhe der Matrix übereinstimmt. Ich hab die Initialisierung von "newVektor" mal weggenommen, falls du das meintest.
Ich würde die Ausgabe in der main-Methode sonst einfach mit System.out.print (mul(...)) machen ... falls das auch geht.
. Den "fertigen" Vektor musst du außerhalb der äußeren for-Schleife zurückgeben, sonst bricht deine Methode bereits nach dem ersten Durchlauf der inneren for-Schleife ab.
Okay, hab grad bemerkt, dass ich den vektor doch initialisieren muss.
Wie kann ich den denn allgemeiner initialisieren? Oder was genau meintest du mit Mischmasch?
Du multiplizierst einen Vektor mit einer Matrix, indem du die 3 Spalten aus denen die Matrix besteht jeweils mit dem x,y und z Wert des Vektors multiplizierst und die drei Ergebnisvektoren dann addierst.
Code:
(x) [a d g] (a) (d) (g)
(y) * [b e h] = x * (b) + y * (e) + z * (h)
(z) [c f i] (c) (f) (i)
(x*a + y*d + z*g)
= (x*b + y*e + z*h)
(x*c + y*f + z*i)
Ändere vektor in Zeile 6 um in vektor[j]. Der Rest sieht richtig aus.
Wenn du einen Vektor mit einer Matrix multiplizierst, dann muss die Anzahl an Spalten in der Matrix gleich sein zur Anzahl der Elemente im Vektor. Andernfalls macht das ganze mathematisch keinen Sinn.