一、矩陣的定義
矩陣是一個按照矩形排列的數學對象,其中的數值按照行和列進行排列。以$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}
};
原創文章,作者:EFLXP,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/329629.html
微信掃一掃
支付寶掃一掃