我用的是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的所有幂。