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); }
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; }