n x n Matrizenmultiplikation... aber wie ?!

NetPerformance

Erfahrenes Mitglied
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* :(

Code:
    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;
    }
 
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:
Code:
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.
 
Zuletzt bearbeitet:
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).
 
Hallo!

Versuchs mal hiermit:

Code:
/*
 * 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
 
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
 
Zuletzt bearbeitet:
Zurück