행렬의 행렬식은 첫 번째 행 보조 인자에 해당 보조 인자의 행렬식을 곱하고 이를 대체 부호로 추가하여 최종 결과를 얻음으로써 정방형 행렬에 대해서만 계산할 수 있습니다.
$$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 차원) 함수가 있습니다. 행렬이 1차원이면 [0][0] 행렬 값을 반환합니다. 이 조건은 각 재귀 호출에서 차원을 줄이면서 행렬을 재귀적으로 반복하므로 기본 조건으로도 사용됩니다.
int determinantOfMatrix(int mat[N][N], int dimension){ int Det = 0; if (dimension == 1) return mat[0][0];
그런 다음 첫 번째 행까지 cofactor(int mat[N][N], int temp[N][N], int p, int q, int n) 함수에 전달될 cofactorMat[N][N]을 선언합니다. 차원보다 작습니다. 행렬의 행렬식은 각 for 루프 반복에서 부호가 번갈아가며 Det 변수에 저장됩니다. 그런 다음 이 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 값이 각각 행 및 열 값과 같지 않은 경우 해당 값은 임시 행렬에 저장됩니다.
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++; }
마지막으로 행렬과 행과 열의 수를 취하고 행렬을 2차원 배열로 반복하고 각 행과 열에 해당 값을 인쇄하는 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