一个 C++ 中可以看作一个 n 行 m 列的二维数组。
矩阵运算
矩阵加法和减法
矩阵的加法和减法就是把两个矩阵对应位置的元素相加或相减。举例来说:
则有:
矩阵乘法
矩阵乘法稍微复杂一些。设
也就是说,参与矩阵乘法运算的第一个矩阵的列数必须等于第二个矩阵的行数,而结果矩阵的行数和列数分别等于第一个矩阵的行数和第二个矩阵的列数,结果矩阵的第
则有:
矩阵乘法的过程可以用 C++ 代码表示:
c
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
C[i][j] = 0;
for (int k = 0; k < p; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}矩阵乘法的性质:
- 结合律:
- 分配律:
注意:矩阵乘法不满足交换律,即
矩阵乘法与递推
考虑特殊的矩阵乘法形式:
举例来说,我们都知道斐波那契数列中
一般来说,如果一类问题可以使用矩阵乘法进行优化,那么它应该具有以下特点:
- 可以抽象出一个长度为
的一维向量,该向量在每个时间单位发生一次变化。 - 变化的形式是一个线性递推。
- 递推式在每个时间可能作用于不同的数据上,但本身保持不变。
- 向量变化时间很长,但向量长度不大。
