我用的是C,有一个二维数组表示一个方阵。我想做的是计算矩阵的幂n,一个给定的整数。
我在寻找最有效的方法。我的第一个想法是将矩阵乘以它自身的n倍,但后来我听说了通过平方来求幂。不过,我不知道如何实现这一点,请有人指导我通过它?

最佳答案

以下是基本概要:

Matrix matrixExponent(Matrix m, int n)
{
      Matrix accumulator = MatrixIdentity();
      Matrix power2 = m;

      while(n != 0)
      {
           if(n & 1)
                 accumulator = MatrixMultiply(&accumulator, &power2);
           power2 = MatrixMultiply(&power2, &power2);
           n = n / 2;
      }
      return accumulator;
}

存储一个累加器,它是部分计算的指数。一个给定的整数指数可以分解成两个指数乘在一起的幂级数。例如,当将数组提升到14的幂次(二进制为1110)时,矩阵自身乘以14倍等于:
m14=m8*m4*m2
所以你只需要重复地将power2与自身相乘,同时遍历整数指数n的每一位,然后每次位是1时将power2与累加器相乘,就可以计算出2的所有幂。

09-19 20:27