一、矩阵的定义
矩阵是一个按照矩形排列的数学对象,其中的数值按照行和列进行排列。以$m \times n$为例,表示矩阵由$m$行和$n$列构成。
矩阵的表示方法可以使用数组、列表等方式。我们可以通过下标访问矩阵中的元素,如$A_{i,j}$表示矩阵$A$中第$i$行第$j$列的元素。
// 以二维数组表示矩阵 int A[2][3] = { {1, 2, 3}, {4, 5, 6} }; // 访问第1行第2列元素 int a = A[0][1];
二、矩阵的基本运算
1. 矩阵加法
两个相同行列的矩阵相加,即将对应位置的元素相加得到新矩阵。$C_{i,j} = A_{i,j}+B_{i,j}$。
// 矩阵加法 int A[2][3] = { {1, 2, 3}, {4, 5, 6} }; int B[2][3] = { {2, 3, 4}, {5, 6, 7} }; int C[2][3]; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { C[i][j] = A[i][j] + B[i][j]; } }
2. 矩阵数乘
矩阵中的每个元素都乘上一个数$k$,得到新矩阵。$C_{i,j} = k \times A_{i,j}$。
// 矩阵数乘 int A[2][3] = { {1, 2, 3}, {4, 5, 6} }; int C[2][3]; int k = 2; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { C[i][j] = k * A[i][j]; } }
3. 矩阵乘法
两个矩阵$A_{m \times n}$和$B_{n \times p}$相乘,得到新矩阵$C_{m \times p}$。$C_{i,j}=\sum_{k=1}^n A_{i,k} \times B_{k,j}$。
// 矩阵乘法 int A[2][3] = { {1, 2, 3}, {4, 5, 6} }; int B[3][2] = { {2, 3}, {4, 5}, {6, 7} }; int C[2][2]; for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { C[i][j] = 0; for (int k = 0; k < 3; k++) { C[i][j] += A[i][k] * B[k][j]; } } }
三、矩阵的特殊性质
1. 单位矩阵
对角线上的元素为1,其余元素为0的矩阵为单位矩阵$I$。$I_{i,j} = \begin{cases} 1, & i=j \\ 0, & i\neq j \\ \end{cases}$。
// 单位矩阵 int I[3][3] = { {1, 0, 0}, {0, 1, 0}, {0, 0, 1} };
2. 转置矩阵
将矩阵的行和列互换得到的新矩阵为转置矩阵。$B_{i,j} = A_{j,i}$。
// 转置矩阵 int A[2][3] = { {1, 2, 3}, {4, 5, 6} }; int B[3][2]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { B[i][j] = A[j][i]; } }
3. 逆矩阵
对于$n \times n$的可逆矩阵$A$,存在一个$n \times n$的矩阵$A^{-1}$,使得$AA^{-1}=A^{-1}A=I$,$A^{-1}$叫做$A$的逆矩阵。
// 逆矩阵 double A[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; double invA[3][3]; double detA; detA = (A[0][0]*A[1][1]*A[2][2] + A[0][1]*A[1][2]*A[2][0] + A[0][2]*A[1][0]*A[2][1]) - (A[0][2]*A[1][1]*A[2][0] + A[0][0]*A[1][2]*A[2][1] + A[0][1]*A[1][0]*A[2][2]); invA[0][0] = (A[1][1]*A[2][2] - A[1][2]*A[2][1]) / detA; invA[0][1] = (A[0][2]*A[2][1] - A[0][1]*A[2][2]) / detA; invA[0][2] = (A[0][1]*A[1][2] - A[0][2]*A[1][1]) / detA; invA[1][0] = (A[1][2]*A[2][0] - A[1][0]*A[2][2]) / detA; invA[1][1] = (A[0][0]*A[2][2] - A[0][2]*A[2][0]) / detA; invA[1][2] = (A[0][2]*A[1][0] - A[0][0]*A[1][2]) / detA; invA[2][0] = (A[1][0]*A[2][1] - A[1][1]*A[2][0]) / detA; invA[2][1] = (A[0][1]*A[2][0] - A[0][0]*A[2][1]) / detA; invA[2][2] = (A[0][0]*A[1][1] - A[0][1]*A[1][0]) / detA;
4. 对称矩阵
矩阵$A$的转置矩阵等于它本身的矩阵为对称矩阵。$A^T = A$。
// 对称矩阵 int A[3][3] = { {1, 2, 3}, {2, 4, 5}, {3, 5, 6} }; int B[3][3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { B[i][j] = A[j][i]; } } cout << ((memcmp(A, B, sizeof(A)) == 0) ? "A is symmetric matrix" : "A is not symmetric matrix") << endl;
5. 上三角矩阵
除了主对角线以下的元素全部为0的方阵为上三角矩阵。
// 上三角矩阵 int A[3][3] = { {1, 2, 3}, {0, 4, 5}, {0, 0, 6} };