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)` 函数,它接受矩阵和矩阵的维数作为参数。如果矩阵只有一维,则返回 `[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)` 函数以矩阵、余子式矩阵、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)` 函数,它接受矩阵以及行数和列数,并以二维数组的形式迭代矩阵,并在每一行和每一列打印这些值。
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