Matrix multiplizieren

Semox

Bekanntes Mitglied
Hi Forum

Ich probiere gerade eine Matrixmultiplikation durchzuführen und mir ne gut gelaunte Methode für spätere Tage nutzbar zu machen. Eigentlich vom Algorithmus her, sollte das doch funktionieren, jedoch sehe ich nicht woher die Problematik mit der NullPointerEx herkommt.

Kann mir bitte jemand schreiben, was da falsch ist? Oder mache ich im mathematischen Algo etwas grundsätzlich Falsches? Wobei ich aber nach x-maligem durchprüfen und Papiergeschreibe glaube, daß der sinnvoll sei---

Bitte mal helfen... 🙂

[Java]
package Mathmatics;

public class Matrizenberechnung {

static double[][] twoDim_3_3 = { { 3.0d, 2.0d, 1.0d },
{ 2.0d, 3.0d, 1.0d }, { 1.0d, 2.0d, 3.0d } };

static double[][] twoDim_3_2 = { { 2.0d, 1.0d }, { 3.0d, 3.0d },
{ 4.0d, 3.5d } };

/**
* @param elem1 First of two 2D Arrays containing teh values to multiply
* @param elem2 Second of two 2D Arrays containing teh values to multiply
* @return another Array containing the calculated values as a new Matrix
*/
public double[][] matrixMultiply(double[][] elem1, double[][] elem2) {

double[][] ergebnis = new double[elem1.length][elem2[0].length];

if (elem1[0].length != elem2.length) {
throw new IllegalArgumentException(
"Zeilenanzahl von Matrize 1 muss mit der "
+ "Spaltenanzahl von Matrize 2 identisch sein.");
}



for (int i = 0; i < elem1.length; i++) {
for (int j = 0; j < elem2[0].length; j++) {
for (int k = 0; k < elem1[0].length; k++) {
ergebnis[j] += elem1[k] * elem2[k][j];
}
}
}

for (int i = 0; i < ergebnis.length; i++) {
for (int j = 0; j < ergebnis.length; j++) {
System.out.print(ergebnis[j] + "\t");
}
System.out.println();
}

return ergebnis;
}

public static void main(String[] args) {
Matrizenberechnung mb = new Matrizenberechnung();
mb.matrixMultiply(twoDim_3_3, twoDim_3_2);
}

}
[/Java]

Vielen Dank für Euer Engagement.

Beste Grüße,
Semo


P.S. Eigene Meinung:
*Was für ein ätzend-monströser Überbau an Quelltexthinweis (Tag-Nutzung)... Auf nem Notebook ist Platz kostbar - das geht echt nicht!*
 
Zuletzt bearbeitet von einem Moderator:
Ich habe keine Ahnung, wo da eine NullPointerException auftauchen soll. Bei mir ist es eine ArrayIndexOutOfBoundsException in Zeile 38.

P.S.: Eigene Meinung: Vielleicht fehlt noch ein Hinweis, wie man freundlich andere Leute um Hilfe bittet...
 
Zeile 37 macht so nur Sinn, wenn das Ergebnis-Array immer quadratisch ist. Ansonsten müsstest du es so wie die Schleifen davor aufbauen.
Und wenn da schon Exception fliegen, dann ist es immer nicht verkehrt zu sagen wo das passiert.
 
Ich habe keine Ahnung, wo da eine NullPointerException auftauchen soll. Bei mir ist es eine ArrayIndexOutOfBoundsException in Zeile 38.

P.S.: Eigene Meinung: Vielleicht fehlt noch ein Hinweis, wie man freundlich andere Leute um Hilfe bittet...

P.S.:Vielleicht ja. Vielleicht nicht...

Du hast Recht. Unsinn... Ich habe die falsche Exception abgeschrieben... Natürlich ist es die, die Du geschrieben hast.

@XHelp
Hmm. Guter Hinweis. Da komme ich mit der simplen Art nicht an die ganzen Subelemente heran. Mal schauen, ob sich da etwas drehen läßt.

Den Code ab Zeile 28 habe ich so verändert, daß nun keinerlei Exception mehr fliegt und die Ausgabe geringfügig formatiert.

[Java]
for (int i = 0; i < elem1.length; i++) {
for (int j = 0; j < elem2[0].length; j++) {
for (int k = 0; k < elem1[0].length; k++) {
ergebnis[j] += elem1[k] * elem2[k][j];
System.out.print(ergebnis[j] + "\t");
}
System.out.println();
}
}
[/Java]

Danke für Euer beider Hinweise!

Viele Grüße,
Semo
 
Nein, das meinte ich mit meinem Hinweis nicht. Berechnung und Ausgabe getrennt zu halten ist schon sinnvoll. Worauf ich hinaus wollte war:
[JAVA=36]
for (int i = 0; i < ergebnis.length; i++) {
for (int j = 0; j < ergebnis.length; j++) { //nicht ergebnis.length
System.out.print(ergebnis[j] + "\t");
}
System.out.println();
}
[/code]
 

Zurück
Oben