public static Matrix operator *(Matrix M1, Matrix M2) { double[,] res = new double[M1.data.GetLength(0), M2.data.GetLength(1)]; Matrix M3 = new Matrix(res); for (int i = 0; i < M1.data.GetLength(0); i++) { for (int j = 0; j < M2.data.GetLength(1); j++) { M3.data[i, j] = M1.GetVector(i, 1) * M2.GetVector(j, 0); //M3.data[i, j] = M1.GetVector(i, 1).Dot(M2.GetVector(j, 0)); } } return(M3); }