public static MatrixMN Product(MatrixMN m1, MatrixMN m2) { if (m1.CN != m2.RN) { return(null); } int row3 = Math.Min(m1.RN, m2.RN); int col3 = Math.Min(m1.CN, m2.CN); MatrixMN ret = new MatrixMN(row3, col3); int col1 = m1.CN; int row1 = m1.RN; int col2 = m2.CN; int row2 = m2.RN; for (int r = 0; r < row3; r++) { for (int c = 0; c < col3; c++) { for (int k = 0; k < col1; k++) { ret.v[r, c] += m1.v[r, k] * m2.v[k, c]; } } } return(ret); }
public void Set(MatrixMN m) { v = new double[m.RN, m.CN]; RN = m.RN; CN = m.CN; v = new double[RN, CN]; for (int r = 0; r < RN; r++) { for (int c = 0; c < RN; r++) { v[r, c] = m.v[r, c]; } } }
public MatrixMN Product(MatrixMN right) { return(Product(this, right)); }