什么是矩阵
在数学中,矩阵(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]
\]
矩阵的加减法和矩阵的数乘合称矩阵的线性运算
其实感觉矩阵加减法只是做了 n * m 次普通的加减法
乘法
重点,很有用
两个矩阵的乘法当且仅当第一个矩阵 \(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; }