# Matrix Matrix Produkt



## Neondream (10. Apr 2010)

also ich muss eine api schreiben mit verschiedenen aufrufen Matrix  Matrix Produkt, Vektor  Matrix Produkt.

mein Problem ist das ich für die for schleife ja die länge des Arrays wissen muss bzw bei der MAtrix die höhe und die länge, und dies unbestimmt als variable angeben muss.

beim skalarprodukt ist das ja einfach da ich bei 2 vektoren ja einfach x.length nehmen kann
wie hier:

```
public static double [] dot(double[] a, double[] b)
	{
		double c[] = new double[a.length];
		for (int i = 0; i < a.length; i++)
		{
			//Skalar produkt von Zeile i von a [][] und b []
			for (int j = 0; j < b.length; j++)
			{
				c[i] = a[i] * b[j];
			}
		}
		return c;
	}
```

jetzt hab ich das problem beim MAtrix Matrix produkt das ich nicht weiß was ich anstatt a.length angeben soll, und was ich bei double c[][] für N einsetzen soll für die zu erstellende matrix. zzt habe ich noch die Hilfsvariable N habewelche ich ersetzten muss
hier mein anfang:

```
public static double[][] multilply(double[][] a, double[][] b)
	{
		int N = 3;
		double c[][] = new double[N][N];
		for (int i = 0; i < N; i++)
		{
			for (int j = 0; j < N; j++)
			{
				c[i][j] = a[i][j] * b[i][j];
			}
		}
		return c;
	}
```

dasselbe problem habe ich beim  Vektor Matrix Produkt nur daS hier die länge des zu erzeugenden arrays ja kürzer ist als die des eingangsarrays
hier mein ansatz:

```
public static double[] multilply(double[] a, double[][] b)
	{
		int N = 3;
		int M = 3;
		double c[] = new double[N];
		for (int i = 0; i < M; i++)
		{
			//Skalar produkt von Zeile i von a [][] und b []
			for (int j = 0; j < N; j++)
			{
				c[i] = a[j] * b[i][j];
			}
		}
		return c;
```

schonmal danke für eure hilfe


----------



## eRaaaa (10. Apr 2010)

Neondream hat gesagt.:


> jetzt hab ich das problem beim MAtrix Matrix produkt das ich nicht weiß was ich anstatt a.length angeben soll, und was ich bei double c[][] für N einsetzen soll für die zu erstellende matrix. zzt habe ich noch die Hilfsvariable N habewelche ich ersetzten muss


Schau dir das Beispiel hier an.

=>

```
double c[][] = new double[a.length][b[0].length];
```


----------



## Neondream (10. Apr 2010)

hmm wofür steht denn das b[0].length für die tiefe des b arrays?

weißt du denn auch wie ich die länge für das Vektor mal Matrix array bestimme?


----------



## eRaaaa (10. Apr 2010)

Neondream hat gesagt.:


> hmm wofür steht denn das b[0].length für die tiefe des b arrays?


Naja in Java sind mehrdimensionale Arrays einfach Arrays von Arrays. Sprich b[0].length = Anzahl der Spalten von Matrix b.
Die Ergebnismatrix ist ja so groß, wie die Zeilen von Matrix a und Spalten von Matrix b.



> weißt du denn auch wie ich die länge für das Vektor mal Matrix array bestimme?



Das bekommst du jetzt sicherlich auch selber raus oder? Hier auch noch einige Beispiele, an denen es klar werden sollte


----------



## Marco13 (10. Apr 2010)

Theoretisch kann der Benutzer natürlich Mist machen:

```
double a[][] = new double[3];
a[0] = new double[3];
a[1] = new double[2];
a[2] = new double[1];
```
ergibt eine dreieckige Matrix. Man kann einfach in die Vorbedingungen (im Methodenkommentar) schreiben, dass der Benutzer dann selbst schuld ist, wenn es kracht.

Ansonsten solltest du zumindest in Erwägung ziehen, die Matrizen auch als double[] (und nicht als double[][]) anzugeben. Das hat einige Vorteile. Natürlich muss die Matrixgröße dann mit übergeben werden, aber das ist nicht unüblich. Das wird bei den BLAS auch gemacht (siehe Basic Linear Algebra Subprograms - Wikipedia, the free encyclopedia und java blas - Google-Suche )


----------



## Neondream (11. Apr 2010)

so alles klar danke für eure hilfe leute hab mein programm jetzt soweit fertig


```
/**
	 * @param Skalarprodukt zweier Vektoren berechnen
	 * @return Vektor ausgabe
	 */
	public static double [] dot(double[] a, double[] b)
	{
		double c[] = new double[a.length];
		for (int i = 0; i < a.length; i++)
		{
			//Skalar produkt von Zeile i von a [][] und b []
			for (int j = 0; j < b.length; j++)
			{
				c[i] = a[i] * b[j];
			}
		}
		return c;
	}
	
	/**
	 * @param Matrix - Matrix Produkt berechnen
	 * @return Matrix ausgabe
	 */
	public static double[][] multilply(double[][] a, double[][] b)
	{
		double c[][] = new double[a.length][b[0].length];
		for (int i = 0; i < a.length; i++)
		{
			for (int j = 0; j < b[0].length; j++)
			{
				c[i][j] = a[i][j] * b[i][j];
			}
		}
		return c;
	}
	/**
	 * @param ein Matrix Transpodieren
	 * @return Matrix ausgabe
	 */
	public static double[][] transpose(double[][] a)
	{
		
		double c[][] = new double[a.length][a[0].length];
		//Zeile von array a mit spalte von array b vertauschen
		for (int i = 0; i < a.length; i++)
		{
			for (int j = 0; j < a[0].length; j++)
			{
				a [i][j] = c [j][i]; 
			}
		}
		return c;
	}
	/**
	 * @param Vektor - Matrix Produkt ausrechnen
	 * @return Vektor ausgabe
	 */
	public static double[] multilply(double[] a, double[][] b)
	{
		double c[] = new double[a.length];
		for (int i = 0; i < a.length; i++)
		{
			//Skalar produkt von Zeile i von a [][] und b []
			for (int j = 0; j < b.length; j++)
			{
				c[i] = a[j] * b[i][j];
			}
		}
		return c;
	}
	/**
	 * @param Matrix - Vektor Produkt ausrechnen
	 * @return Vektor ausgabe
	 */
	public static double[] multilply(double[][] a, double[] b)
	{
		double c[] = new double[b.length];
		for (int i = 0; i < a[0].length; i++)
		{
			//Skalar produkt von Zeile i von a [][] und b []
			for (int j = 0; j < b.length; j++)
			{
				c[i] = a[i][j] + b[j];
			}
		}
		return c;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
```

infos stehen dabei
meint ihr dass soweit alles richtig ist?

PS: kann mir vvlt jmnd erklären wie ich ein java doc erstelle?
mit @....(siehe code) können ja die einzelnen infos ins java doc eingetragen werden
wie kann ich nun dieses erstellen und wo kann ich dies dann aufrufen?

dankeschön
greeetz
neon


----------



## Final_Striker (11. Apr 2010)

public static double[][] multilply(double[][] a, double[][] b)

Ist schon mal auf jedem Fall falsch, die anderen wahrscheinlich auch.
Schau dir erst mal an, wie man Matrizen multipliziert: Matrix (Mathematik) ? Wikipedia


----------



## Marco13 (11. Apr 2010)

... und sollte beim dot-product nicht ein skalar rauskommen? ???:L


----------

