Matrix mit Vektor multiplizieren

Zipe

Mitglied
Hey Leute,

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?

Mfg
 
Zuletzt bearbeitet:
  • 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.
 
Zuletzt bearbeitet:
Danke schonmal!

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.

Sind die Schleifen denn im Allgemeinen richtig?
 
Der Rückgabetyp muss
Code:
int []
lauten, nicht bloß
Code:
int
. 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?
 
Kann mir vielleicht jemand sagen, wo der Fehler bei der Methode liegt ???:L

Java:
public static int [] 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];
					
					
				}
			}
			return newVektor;
		}

irgendwas muss falsch sein ... aber ich komme nicht drauf
 
Zuletzt bearbeitet:
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.
 
Zuletzt bearbeitet:
Super danke!

hab jetzt noch eine Frage ... ich will, dass ich eine beliebige matrix mit einem beliebigen vektor multiplizieren kann.

Dafür muss ich irgendwas an meiner initialisierung von "newVektor" in meiner Methode ändern.
Aber ich versteh nicht was.

Wenn ich zB.

Java:
	public static int [] mul(int [][] matrix, int [] vektor){
			
			int [] newVektor = {0,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[j];
					
				}
			}
			return newVektor;
		}
schreibe und dann eine 4x2 Matrix multipliziere dann funktioniert auch alles einwandfrei.

Wie kann ich den Vektor irgendwie allgemeiner schreiben?!
 
funktioniert zwar für die 3x3 matrix aber gibt nen exception Fehler für die 4x2 ???:L

Edit: Liegt wahrscheinlich daran, dass ich der Methode nen vektor übergebe der (1,1,1) so aussieht ... okay glaube ich habs dann

Edit 2: Ne liegt doch nicht daran 😀 ich übergebe für die 4x2 nen vektor (-1, 1) ...sollte eigentlich gehen ???:L aber gibt nen fehler
 
Zuletzt bearbeitet:
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.
 
Wenn ich aber zB eine Matrix

4 1 2 4
2 1 2 5

habe und einen vektor

1
4

dann müsste das doch machbar sein vom rechnerischen her. Allerdings gibt er mir für sowas nen exception Fehler
 

Neue Themen


Zurück
Oben