计算矩阵之和的最佳方法是什么,例如A ^ i + A ^(i + 1)+ A ^ i + 2 ........ A ^ n用于非常大的n?
我想到了两种可能的方式:
1)对A ^ i使用对数矩阵求幂(LME),然后乘以A计算后续矩阵。
问题:我没有真正利用LME算法,因为我只使用最低功耗!!
2)使用LME查找A ^ n并记忆中间计算。
问题:大n需要太多空间。
还有第三种方法吗?
答案 0 :(得分:10)
请注意:
A + A^2 = A(I + A)
A + A^2 + A^3 = A(I + A) + A^3
A + A^2 + A^3 + A^4 = (A + A^2)(I + A^2)
= A(I + A)(I + A^2)
让
B(n) = A + ... + A^n
我们有:
B(1) = A
B(n) = B(n / 2) * (I + A^(n / 2)) if n is even
B(n) = B(n / 2) * (I + A^(n / 2)) + A^n if n is odd
因此,您将执行对数步数,而无需计算反转。
虽然直接实施会产生(log n)^2
因素,但您可以通过在计算log n
时计算A
的权力,将其保持在B
。
答案 1 :(得分:4)
您可以使用几何矩阵系列的n
之和等于:
S_n = (I-A)^(-1) (I-A^n)
并且,由于你不是从0开始,你可以简单地计算:
result = S_n - S_i
其中i
是您的起始索引。
答案 2 :(得分:1)
为什么不对矩阵进行对角化以使乘法便宜。
编辑:
只要矩阵是非奇异的,你就应该能够找到矩阵A的对角线表示D,使得A = PDP ^ -1,其中P由A的特征向量组成,D具有A的特征值对角线。得到D ^ m = D * D ^(m-1)是便宜的,因为它只是沿对角线乘以(即与矩阵的维数相同的乘法数)
获得S(m)= S(m-1)+ D ^ m也很便宜,因为你只是添加了对角元素。
然后你有
A ^ i + A ^(i + 1)+ A ^ i + 2 ........ A ^ n = P(D ^ i + D ^(i + 1)+ D ^ i + 2 ........ D ^ n)P ^ -1 = P(S(n) - S(i))P ^ -1
唯一困难的是找到P和P ^ -1