//package blatt05; public class Matrizen extends MiniJava { public static void main(String[] args) { // Test zu Matrizenmultiplikation: int[][] x1 = {{2,3,1}, {-1,2,1}, {3,7,1}, {4,4,-4}}; // 4 x 3 int[][] x2 = {{-1,4}, {0,5}, {3,2}}; // 3 x 2 int[][] result = matMatMult(x1, x2); for (int i = 0; i < result.length; i++) { for (int j = 0; j < result[i].length; j++) writeConsole(result[i][j] + " "); writeLineConsole(); } } public static int vecVecMul(int[] a, int[] b) { // Nicht verlangt: Prüfung der Parameter: if (a.length != b.length) throw new IllegalArgumentException("Länge muss gleich sein!"); int sum = 0; for (int j = 0; j < a.length; j++) sum += a[j] * b[j]; return sum; } public static int[] matVecMul(int[][] a, int[] b) { int m = a.length; // Anzahl der Zeilen int[] c = new int[m]; // Rückgabearray for (int i = 0; i < m; i++) { c[i] = vecVecMul(a[i], b); // entspricht: //for (int j = 0; j < a[i].length; j++) // c[i] += a[i][j] * b[j]; } return c; } public static int[][] transpose(int[][] a) { int m = a.length; // Anzahl Zeilen if (a.length == 0) // Matrix ist leer return new int[0][0]; int n = a[0].length; // Anzahl Spalten (Annahme: für alle Zeilen gleich) int[][] t = new int[n][m]; // Rückgabearray (a transponiert) // Elemente kopieren (dabei Koordinaten tauschen): for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) t[j][i] = a[i][j]; return t; } public static int[][] matMatMult(int[][] a, int[][] b) { // Annahme ohne Prüfung der Parameter: Die Dimensionen passen (mxn, nxk) int m = a.length; int n = b.length; if (n == 0) // Matrix ist leer (keine Zeile) return new int[0][0]; int k = b[0].length; // Annahme: Alle Spalten haben dieselbe Länge int[][] c = new int[m][k]; // Rückgabematrix for (int i = 0; i < m; i++) { for (int j = 0; j < k; j++) { // Berechnung von c[i][j]: for (int l = 0; l < n; l++) c[i][j] += a[i][l] * b[l][j]; } } return c; } }