最快的方法来计算2x2矩阵的幂

时间:2017-11-02 08:57:14

标签: algorithm matrix scipy linear-algebra matrix-multiplication

我有一个2x2矩阵M,它通常很复杂。将M乘以n次的最快捷方式是什么,即M ^ n?我可以想到两种方式:

一个。对角化并将它们相乘

B中。将n分成小组。例如,如果n=15,那么我可以执行以下操作:

  1. A = M×M个
  2. B = A * A = M ^ 4
  3. C = B * B = A ^ 8
  4. 中号 A 的B * C = M ^ 15
  5. 总的来说,我需要做6次矩阵乘法。

    我的问题是:

    1. 哪种方法更快?

    2. 还有其他方法可以实现吗?

    3. 对于我的第二种方法,如何为任何n实现算法?如果n是2的幂,那么很容易,但是当它不是如何在我给出的例子中分解乘法和分组时呢?

1 个答案:

答案 0 :(得分:1)

  1. 我认为A更好,因为在A中,对角化矩阵后它是O(1),而在B中复杂度是O(log(n))
  2. 2.除了琐碎的一个(将矩阵自身乘以n次),我不知道。

    1. 您应该将n表示为二进制数,并且仅将位数乘以“1”。例如:15 = 1111(bin)所以你有:2 ^ 0,2 ^ 1,2 ^ 2,2 ^ 3,因此你需要乘以以上所有来得到答案。让我们再拿一个n,比如n = 23。 二进制表示是10111,所以你需要权力直到5(2 ^ 0,2 ^ 1,2 ^ 2,2 ^ 3 ^ ^ 4) - 你只需要“1”的位置 - 所以你乘以2 ^ 0 * 2 ^ 1 * 2 ^ 2 * 2 ^ 4(因为第4个索引,指的是2 ^ 3是0,你不加倍)。