C++ 中矩阵的行列式?
矩阵的行列式只能通过方阵计算,方法是将第一行余因子乘以相应余因子的行列式,然后以交替符号相加,得到最终结果。
$$A = \begin{bmatrix}a & b & c\d & e &f \g & h &i \ \end{bmatrix} |A| = a(ei-fh)-b(di-gf)+c(dh-eg)$$
首先,我们有 determinantOfMatrix(int mat[N][N], int dimension) 函数,该函数接受矩阵和矩阵的维度值。如果矩阵只有 1 维,则它返回 [0][0] 矩阵值。此条件也用作基本条件,因为我们以递归方式迭代矩阵,并在每次递归调用中减少维度。
int determinantOfMatrix(int mat[N][N], int dimension){ int Det = 0; if (dimension == 1) return mat[0][0];
然后我们声明 cofactorMat[N][N],它将传递给 cofactor(int mat[N][N], int temp[N][N], int p, int q, int n) 函数,直到 firstRow 小于维度。矩阵的行列式存储在 Det 变量中,每次 for 循环迭代时符号交替。然后将此 det 返回到主函数并打印出来。
int cofactorMat[N][N]; int sign = 1; for (int firstRow = 0; firstRow < dimension; firstRow++){ cofactor(mat, cofactorMat, 0, firstRow, dimension); Det += sign * mat[0][firstRow] * determinantOfMatrix(cofactorMat, dimension - 1); sign = -sign; } return Det; }
cofactor(int mat[N][N], int temp[N][N], int p,int q, int n) 函数将矩阵、cofactor 矩阵、0、firstRow 值和矩阵的维度作为参数值。然后,嵌套的 for 循环帮助我们遍历矩阵,并且当 p 和 q 值分别不等于行和列值时,这些值存储在 temp 矩阵中。
void cofactor(int mat[N][N], int temp[N][N], int p,int q, int n){ int i = 0, j = 0; for (int row = 0; row < n; row++){ for (int column = 0; column < n; column++){ if (row != p && column != q){ temp[i][j++] = mat[row][column];
一旦行填满,我们就增加行索引并重置列索引。
if (j == n - 1){ j = 0; i++; }
最后,我们有了 display(int mat[N][N], int row, int col),它接受矩阵以及行数和列数,并以 2d 数组的形式遍历矩阵,并在每一行和每一列上打印这些值。
void display(int mat[N][N], int row, int col){ for (int i = 0; i < row; i++){ for (int j = 0; j < col; j++) cout<<mat[i][j]<<&" &";; cout<<endl; } cout<<endl; }
示例
让我们看看下面的实现来找到矩阵的行列式。
#include <iostream> using namespace std; const int N = 3; void cofactor(int mat[N][N], int temp[N][N], int p,int q, int n){ int i = 0, j = 0; for (int row = 0; row < n; row++){ for (int column = 0; column < n; column++){ if (row != p && column != q){ temp[i][j++] = mat[row][column]; if (j == n - 1){ j = 0; i++; } } } } } int determinantOfMatrix(int mat[N][N], int dimension){ int Det = 0; if (dimension == 1) return mat[0][0]; int cofactorMat[N][N]; int sign = 1; for (int firstRow = 0; firstRow < dimension; firstRow++){ cofactor(mat, cofactorMat, 0, firstRow, dimension); Det += sign * mat[0][firstRow] * determinantOfMatrix(cofactorMat, dimension - 1); sign = -sign; } return Det; } void display(int mat[N][N], int row, int col){ for (int i = 0; i < row; i++){ for (int j = 0; j < col; j++) cout<<mat[i][j]<<" "; cout<<endl; } cout<<endl; } int main(){ int mat[3][3] = { { 1, 0, 2}, { 3, 0, 0}, { 2, 1, 4}}; cout<<"The matrix is "<<endl; display(mat,3,3); cout<<"Determinant of the matrix is "<<determinantOfMatrix(mat, N); return 0; }
输出
上述代码将产生以下输出 −
The matrix is 1 0 2 3 0 0 2 1 4 Determinant of the matrix is 6