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(intmat[N][N],intdimension)函数,它接受矩阵和矩阵的维度值。如果矩阵只有一维,则它返回[0][0]矩阵值。此条件也用作基本条件,因为我们通过减少每次递归调用的维度来递归迭代我们的矩阵。
int determinantOfMatrix(int mat[N][N], int dimension){ int Det = 0; if (dimension == 1) return mat[0][0];
然后我们声明cofactorMat[N][N]它将传递给cofactor(intmat[N][N],inttemp[N][N],intp,intq,intn)函数,直到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(intmat[N][N],inttemp[N][N],intp,intq,intn)函数将矩阵、辅因子矩阵、0、firstRow值和矩阵的维度作为参数值。嵌套的for循环然后帮助我们迭代矩阵,并且p&q值分别不等于行和列值,这些值存储在临时矩阵中。
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(intmat[N][N],introw,intcol),它采用矩阵和行数和列数,并将矩阵作为二维数组进行迭代,并在每一行和每一列上打印这些值。
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<示例
让我们看看下面的实现来找到矩阵的行列式。
#includeusing 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< 输出结果 上面的代码将产生以下输出-
矩阵是 1 0 2 3 0 0 2 1 4 Determinant of 矩阵是 6