是否有任何更快的矩陣求冪方法來計算M^n(其中M是一個矩陣,n是一個整數)比簡單的除法和征服算法。快速矩陣求冪
快速矩陣求冪
回答
您可以將矩陣分解爲特徵值和特徵向量。那麼你得到
M = V^-1 * D * V
其中V是特徵向量矩陣和D是一個對角矩陣。爲了提高到N次方,您得到如下結果:
M^n = (V^-1 * D * V) * (V^-1 * D * V) * ... * (V^-1 * D * V)
= V^-1 * D^n * V
因爲所有的V和V^-1項都被取消了。由於D是對角線,你只需要將一堆(實數)數字提升到第n次方,而不是滿矩陣。你可以在n的對數時間內做到這一點。
計算特徵值和特徵向量是r^3(其中r是M的行數/列數)。取決於r和n的相對大小,這可能會更快或者不更快。
據我所知,這種方法與Squaring的Exponentiation具有相同的複雜度。那麼有沒有更快的方法? –
@AkashdeepSaluja:這比通過平方冪取冪更快。這是O(r^3)時間,平方的指數是O(r^3 logn)時間。 –
爲更好地解釋上述方法http://www.google.co.in/url?sa=t&rct=j&q=pdf%20nth%20power%20of%20matrix&source=web&cd=1&cad=rja&ved=0CCAQFjAA&url=http% 3A%2F%2Fwww.qc.edu.hk%2Fmath%2FTeaching_Learning%2FNth%2520power%2520of%2520a%2520square%2520matrix.pdf&ei = Jf9JULrwFsi8rAejh4C4DQ&usg = AFQjCNE7yqQce5jdtyyVLFpSZmYUnoWyVA –
Exponentiation by squaring經常用來獲得矩陣的高次冪。
我會推薦用於計算matrix form中Fibbonacci序列的方法。 AFAIK,其效率是O(log(n))。
您必須乘以矩陣相乘的成本。整體運行時間爲O(n^3 log n)。 – saadtaame
使用歐拉快速冪算法很簡單。使用下一個算法。
#define SIZE 10
//It's simple E matrix
// 1 0 ... 0
// 0 1 ... 0
// ....
// 0 0 ... 1
void one(long a[SIZE][SIZE])
{
for (int i = 0; i < SIZE; i++)
for (int j = 0; j < SIZE; j++)
a[i][j] = (i == j);
}
//Multiply matrix a to matrix b and print result into a
void mul(long a[SIZE][SIZE], long b[SIZE][SIZE])
{
long res[SIZE][SIZE] = {{0}};
for (int i = 0; i < SIZE; i++)
for (int j = 0; j < SIZE; j++)
for (int k = 0; k < SIZE; k++)
{
res[i][j] += a[i][k] * b[k][j];
}
for (int i = 0; i < SIZE; i++)
for (int j = 0; j < SIZE; j++)
a[i][j] = res[i][j];
}
//Caluclate a^n and print result into matrix res
void pow(long a[SIZE][SIZE], long n, long res[SIZE][SIZE])
{
one(res);
while (n > 0) {
if (n % 2 == 0)
{
mul(a, a);
n /= 2;
}
else {
mul(res, a);
n--;
}
}
}
下面請找出等值數字:
long power(long num, long pow)
{
if (pow == 0) return 1;
if (pow % 2 == 0)
return power(num*num, pow/2);
else
return power(num, pow - 1) * num;
}
- 1. horner算法 - 快速求冪
- 2. 快速求冪的實現
- 3. Python中的矩陣求冪
- 4. Numpy矩陣求冪給出負值
- 5. 線性遞歸使用矩陣求冪
- 6. 矩陣冪方法
- 7. 快速大矩陣生成
- 8. 快速訪問矩陣
- 9. 快速矩陣乘法
- 10. 快速矩陣查找
- 11. 快速高效上對角矩陣求逆
- 12. 在另一個矩陣中快速找到矩陣
- 13. 大型稀疏矩陣上的快速非負矩陣分解
- 14. 指數萬用行快速訪問矩陣矩陣
- 15. 復對稱三對角矩陣的快速矩陣指數
- 16. 快速計算圖像(或矩陣)
- 17. 快速加載矩陣[numpy的/爪哇]
- 18. 大量小矩陣的快速反演
- 19. 快速(稀疏)矩陣在MATLAB
- 20. 快速核心矩陣計算python
- 21. R - 矩陣產品的快速排序
- 22. 高效,快速的方式padarray矩陣
- 23. 在Numpy/Python中快速稀疏矩陣
- 24. 使稀疏矩陣快速地相乘
- 25. 快速讀取整數的大矩陣
- 26. 矩陣RcppGSL的快速子集
- 27. 快速旋轉/變換矩陣乘法
- 28. 快速訪問的稀疏矩陣
- 29. 當值隨時間變化時求冪矩陣
- 30. 薩姆我的總和^說明使用矩陣求冪
嘿,我發現了一個計算器只鏈接檢查出來 http://stackoverflow.com/questions/12268516/matrix-exponentiation -using-fermats-theorem – 2012-09-07 04:57:52
Expokit是一個衆所周知的用於執行矩陣求冪的包。 http://fortranwiki.org/fortran/show/Expokit – Sayan