Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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 차원) 함수가 있습니다. 행렬이 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