public static MatrixTable <T> operator -(MatrixTable <T> a, MatrixTable <T> b) { if (a.Matrix.GetLength(0) != b.Matrix.GetLength(0) || a.Matrix.GetLength(1) != b.Matrix.GetLength(1)) { throw new ImpossibleMatrixOperationException(); } int arraySizeX = a.Matrix.GetLength(0); int arraySizeY = a.Matrix.GetLength(1); var A = new MatrixTable <T>(arraySizeX, arraySizeY); for (int i = 0; i < arraySizeY; i++) { for (int j = 0; j < arraySizeX; j++) { A[i, j] = (dynamic)a[i, j] - b[i, j]; } } return(A); }
public static MatrixTable <T> operator *(MatrixTable <T> a, MatrixTable <T> b) { if (a.Matrix.GetLength(1) != b.Matrix.GetLength(0)) { throw new ImpossibleMatrixOperationException(); } var result = new MatrixTable <T>(a.Matrix.GetLength(0), b.Matrix.GetLength(1)); for (int i = 0; i < a.Matrix.GetLength(0); i++) { for (int j = 0; j < b.Matrix.GetLength(1); j++) { for (int k = 0; k < b.Matrix.GetLength(0); k++) { result[i, j] += (dynamic)a[i, k] * b[k, j]; } } } return(result); }