Computer >> Máy Tính >  >> Lập trình >> C ++

Kiểm tra xem Ma trận có khả nghịch trong C ++ hay không

Ở đây chúng ta sẽ xem cách kiểm tra ma trận có khả nghịch hay không. Nếu một ma trận là M thì ma trận đảo ngược M-1 sẽ là -

$$ M ^ -1 =\ frac {adj (M)} {| M \ lvert} $$

Vì vậy, nếu định thức của M khác 0, thì chỉ chúng ta mới có thể nhận được nghịch đảo, nếu không, chúng ta sẽ không nhận được nghịch đảo của nó. Vì vậy, ở đây chúng ta phải kiểm tra định thức có khác không hay không. Tìm định thức là một quá trình đệ quy. Chúng ta phải tìm submatrix, sau đó tìm định thức của nó, sau đó sử dụng kết quả đó để tính toán cuối cùng. Hãy cho chúng tôi xem mã để hiểu rõ hơn.

Ví dụ

#include <iostream>
#define N 4
using namespace std;
void findCoFactor(int mat[N][N], int mat2[N][N], int p, int q, int n) {
   int i = 0, j = 0;
   for (int row = 0; row < n; row++) {
      for (int col = 0; col < n; col++) {
         if (row != p && col != q) {
            mat2[i][j++] = mat[row][col];
            if (j == n - 1) {
               j = 0;
               i++;
            }
         }
      }
   }
}
int getDeterminant(int mat[N][N], int n) {
   int determinant = 0;
   if (n == 1)
      return mat[0][0];
   int temp[N][N];
   int sign = 1;
   for (int f = 0; f < n; f++) {
      findCoFactor(mat, temp, 0, f, n);
      determinant += sign * mat[0][f] * getDeterminant(temp, n - 1);
      sign = -sign;
   }
   return determinant;
}
bool isMatrixInvertible(int mat[N][N], int n) {
   if (getDeterminant(mat, N) != 0)
      return true;
   else
      return false;
}
int main() {
   int matrix[N][N] = {
      { 1, 0, 2, -1 },
      { 3, 0, 0, 5 },
      { 2, 1, 4, -3 },
      { 1, 0, 5, 0 }
   };
   if (isMatrixInvertible(matrix, N))
      cout << "The matrix is invetible";
   else
      cout << "The matrix is not invetible";
}

Đầu ra

The matrix is invetible