# n x n  Matrizenmultiplikation... aber wie ?!



## NetPerformance (19. Juli 2004)

Hallo 

Brauche Hilfe bei Matrizenmultiplikation ( für n x n Matrix ).. mit viel Glück hat einer von euch die Lösung in seine Java-Sammlung.. 

Ich bedanke mich im vorraus.. 
Aaron *derlangsamamverzweifelnist* 


```
public static int [][] multiply(int a [][], int b [][])
    {        
        // definition: Matrizengröße ergibt sich immer durch (Zeile a.length) und (Spalte b.lengt) ! 
        int array [][] = new int [a.length][b[0].length];
           
        for(int i=0; i<=a.length -1; i++)
        {
            for(int j=0; j<=a[0].length -1; j++)
            {
                 
            }
        }

        return array;
    }
```


----------



## Trespasser (19. Juli 2004)

Ich schicke dir morgen die Lösung habs gerade nicht bei mir und bin zu fual
es nochmals zu schreiben.

mfg
Trespasser


----------



## squeaker (19. Juli 2004)

Also mathematisch ist es einfach:

http://de.wikipedia.org/wiki/Matrix_(Mathematik)


----------



## Trespasser (19. Juli 2004)

```
array[i][j]+=a[i][j]*b[j][i];
```

so sollte es gehen!

mfg
Trespasser


----------



## fluessig (19. Juli 2004)

Wenn du dich tatsächlich auf n x n Matrizen beschränkst und nicht auch noch (n,m) x (m,n) umsetzen möchtest, dann sollte das genügen:

```
int value = 0;
for(int l = 0; l <= a.length; l++)
{
	value += a[i][l] * b[l][j];
}
array[i][j] = value;
```
^^ sollte natürlich in den beiden for schleifen stehen.

//Edit hab die Lösung von Trespasser noch nciht gesehen vor dem Post. Wenn die geht, ist die natürlcih schöner.


----------



## squeaker (19. Juli 2004)

kann einer mal die beiden obigen Lösungen gegeneinander laufen lassen? Ich misstraue der von Trespasser (nicht gegen ihn - aber das schaut mir zu einfach aus).


----------



## Trespasser (19. Juli 2004)

mom,... ich hatte die for -schelifen anders!


----------



## Trespasser (19. Juli 2004)

wie gesagt ich schicke, dir meine Lösung morgen. Habe im Moment keine Zeit!

mfg
Trespasser


----------



## Thomas Darimont (19. Juli 2004)

Hallo!

Versuchs mal hiermit:


```
/*
 * Created on 19.07.2004
 *
 * TODO 
 */

/**
 * @author Administrator TODO Describe what the class is used for
 */
public class MatrixTest {

    public static void main(String[] args) {

        /*
         *     / 1 4 0 \ 
         * A = \ 3 1 2 /
         * 
         */
        int[][] A = new int[][] { { 1, 4, 0 }, { 3, 1, 2 } };

        /*
         *     / 2 1 1 0 \ 
         * B = | 4 2 3 1 | 
         *     \ 0 1 3 2 /
         */

        int[][] B = new int[][] { { 2, 1, 1, 0 }, { 4, 2, 3, 1 },
                { 0, 1, 3, 2 } };

        MatrixTest mt = new MatrixTest();

        int[][] C = mt.mul(A, B);
        
        /*
         * 
         * C =  / 18 9 13 4 \ 
         *      \ 10 7 12 5 / 
         * 
         */
        
        mt.printMatrix(C);

    }

    /**
     * @param a
     * @param b
     * @return TODO Describe what the Method does
     */
    private int[][] mul(int[][] A, int[][] B) {

        if (A[0].length != B.length) {
            throw new IllegalArgumentException(
                    "Zeilenanzahl von B muss der Spaltenanzahl von A entsprechen");
        }

        int[][] C = new int[A.length][B[0].length];

        for (int i = 0; i < A.length; i++) {
            for (int j = 0; j < B[0].length; j++) {
                for (int k = 0; k < A[0].length; k++) {
                    C[i][j]  += A[i][k] * B[k][j];
                }
            }
        }

        return C;
    }
    
    private void printMatrix(int[][] m){
        for (int i = 0; i < m.length; i++) {
            for (int j = 0; j < m[i].length; j++) {
                System.out.print(m[i][j] +" ");
            }
            System.out.println();
        }
    }
}
```

Gruß Tom


----------



## Trespasser (20. Juli 2004)

war auch meine Lösung...
ok die von Tom funkt aufjedenfall.

nenn die Funktion printMatrix  --> toString und gib sie als String zurück.
Und machs als eine neue Klasse, die eine Matrix entält(Array)
Das wäre, meiner Meinung nach, eleganter.

mfg
Trespasser


----------



## NetPerformance (20. Juli 2004)

Vielen Dank Jungs..  

Gruß
Aaron


----------

