什么是矩阵
在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合 ,最早来自于方程组的系数及常数所构成的方阵(摘自某百科)
\(n\) 行 \(m\) 列的矩阵大概长这个样子 :
\[A = \left[\begin{array}{c}a_{1,1}&a_{1,2}&\cdots&a_{1,m}\\a_{2,1}&a_{2,2}&\cdots&a_{2,m}\\a_{3,1}& a_{3,2}&\cdots&a_{3,m}\\\cdots&\cdots& &\cdots\\a_{n,1}& a_{n,2}&\cdots&a_{n,m}\end{array}\right]\]
这 \(n \times m\) 个数称为矩阵 \(A\) 的元素,简称为元
数 \(a_{i,j}\) 位于矩阵的第 \(i\) 行第 \(j\) 列
矩阵的基本运算
加法
注意 : 只有相同大小的矩阵才可以相加
\[\left[\begin{array}{c}1&4\\3&2\end{array}\right]+\left[\begin{array}{c}4&2\\5&7\end{array}\right]=\left[\begin{array}{c}5&6\\8&9\end{array}\right]\]
矩阵的加法满足交换律和结合律
即 :
\(A + B = B + A\)
\((A + B) + C = A + (B + C)\)
以下为矩阵加法的代码 :
inline matrix add(matrix A, matrix B) {
matrix C(A.r, A.c);
for(int i = 0; i < C.r; ++i) // 枚举矩阵 C 的行
for(int j = 0; j < C.c; ++j) // 枚举矩阵 C 的列
C.a[i][j] = A.a[i][j] + B.a[i][j];
return C;
}
减法
与加法类似, 只有相同大小的矩阵才可以相减
数乘
设 \(\lambda\) 为常数,矩阵数乘即把矩阵每一个数乘上一个 \(\lambda\)
\[2 \times\left[\begin{array}{c}1&4\\3&2\end{array}\right]=\left[\begin{array}{c}2&8\\6&4\end{array}\right]\]
矩阵的加减法和矩阵的数乘合称矩阵的线性运算
乘法
重点,很有用
两个矩阵的乘法当且仅当第一个矩阵 \(A\) 的列数,和另一个矩阵 \(B\) 的行数相等时才能定义
如 \(A\) 是 \(n \times m\) 的矩阵,\(B\) 是 \(m \times p\) 的矩阵,它们的乘积 \(C\) 是一个 \(n \times p\) 的矩阵
它的一个元素 :
\[c_{i, j} \ \sum_{k = 1}^{m}a_{i, k} b_{k, j}\]
以下为矩阵乘法的代码 :
inline matrix mul(matrix A, matrix B) {
matrix C(A.r, B.c);
for(int i = 0; i < C.r; ++i) // 枚举矩阵 C 的行
for(int j = 0; j < C.c; ++j) // 枚举矩阵 C 的列
for(int k = 0; k < A.c; ++k) // 上面式子中 k = A.c
C.a[i][j] += A.a[i][k] * B.a[k][j];
return C;
}