我正在使用C并且有一个表示方阵的二维数组。我想要做的是将矩阵计算为n
的幂,给定整数。
我是最有效的方法。我的第一个想法是将矩阵乘以其自身n
次,但后来我通过平方听到指数化。但是,我不确定如何实现这一点,有人可以指导我完成吗?
答案 0 :(得分:4)
以下是基本概要:
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;
}
存储累加器,它是部分计算的指数。给定的整数指数可以分解为一系列幂乘2指数相乘。例如,当将数组提升到14的幂(二进制1110)时,矩阵乘以其14次等于:
m 14 = m 8 * m 4 * m 2
因此,您只需通过重复乘以power2与其自身来计算2的所有幂,同时逐步遍历整数指数n的每个位,并在每次该位为1时将power2与累加器相乘。