public static Matrix Power(Matrix m, int pow) // Power matrix to exponent { if (pow == 0) return IdentityMatrix(m.rows, m.cols); if (pow == 1) return m.Duplicate(); if (pow == -1) return m.Invert(); Matrix x; if (pow < 0) { x = m.Invert(); pow *= -1; } else x = m.Duplicate(); Matrix ret = IdentityMatrix(m.rows, m.cols); while (pow != 0) { if ((pow & 1) == 1) ret *= x; x *= x; pow >>= 1; } return ret; }