前置知识
矩阵
矩阵是一个 n × m n \times m n×m的阵列,下面是一个 3 × 3 3\times 3 3×3的矩阵:
[ 1 0 0 0 1 0 0 0 1 ] \begin{bmatrix} 1&0&0\\\\ 0&1&0\\\\ 0&0&1\\ \end{bmatrix} ⎣⎢⎢⎢⎢⎡100010001⎦⎥⎥⎥⎥⎤
矩阵乘法
若矩阵A的大小为 n × m n\times m n×m ,另一矩阵B的大小为 m × p m\times p m×p,则两个矩阵可以做乘法,得到的矩阵C大小为 n ∗ p n*p n∗p。具体的乘法规则如下:
矩阵A:
[ a 11 a 12 a 13 a 21 a 22 a 23 ] \begin{bmatrix} a_{11}&a_{12}&a_{13}\\\\ a_{21}&a_{22}&a_{23}\\ \end{bmatrix} ⎣⎡a11a21a12a22a13a23⎦⎤
矩阵B:
[ b 11 b 12 b 21 b 22 b 31 b 32 ] \begin{bmatrix} b_{11}&b_{12}\\\\ b_{21}&b_{22}\\\\ b_{31}&b_{32}\\ \end{bmatrix} ⎣⎢⎢⎢⎢⎡b11b21b31b12b22b32⎦⎥⎥⎥⎥⎤
相乘得到矩阵C:
[ a 11 × b 11 + a 12 × b 21 + a 13 × b 31 a 11 × b 12 + a 12 × b 22 + a 13 × b 32 a 21 × b 11 + a 22 × b 21 + a 23 × b 31 a 21 × b 12 + a 22 × b 22 + a 23 × b 32 ] \begin{bmatrix} a_{11}\times b_{11}+a_{12}\times b_{21}+a_{13}\times b_{31} &a_{11}\times b_{12}+a_{12}\times b_{22}+a_{13}\times b_{32}\\\\ a_{21}\times b_{11}+a_{22}\times b_{21}+a_{23}\times b_{31}&a_{21}\times b_{12}+a_{22}\times b_{22}+a_{23}\times b_{32} \end{bmatrix} ⎣⎡a11×b11+a12×b21+a13×b31a21×b11+a22×b21+a23×b31a11×b12+a12×b22+a13×b32a21×b12+a22×b22+a23×b32⎦⎤
C++代码实现矩阵乘法:
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
for (int k = 1; k <= n; k++)
C[i][j] += A[i][k] * B[k][j];
性质:
-
矩阵乘法不满足交换律,但是满足结合律。即 ( A B ) C = A ( B C ) (AB)C=A(BC) (AB)C=

本文详细介绍了矩阵乘法的基本概念,包括矩阵乘法的定义、性质,以及单位矩阵和零矩阵。接着讲解了矩阵快速幂的原理,通过C++代码展示了如何实现矩阵乘法和矩阵快速幂,并提供了将递推式转化为矩阵乘法的模板。最后,通过实例展示了如何使用矩阵快速幂解决斐波那契数列问题,进一步说明了其在算法加速中的应用价值。
最低0.47元/天 解锁文章
1982

被折叠的 条评论
为什么被折叠?



