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

Chương trình C ++ để kiểm tra xem Ma trận có khả nghịch hay không

Định thức của ma trận có thể được sử dụng để tìm xem nó có khả nghịch hay không. Ma trận là khả nghịch nếu định thức khác 0. Vì vậy, nếu định thức đi ra bằng 0, ma trận không khả nghịch. Ví dụ -

The given matrix is:

4 2 1
2 1 1
9 3 2
The determinant of the above matrix is: 3
So the matrix is invertible.

Một chương trình kiểm tra xem ma trận có khả nghịch hay không như sau.

Ví dụ

#include<iostream>
#include<math.h>
using namespace std;
int determinant( int matrix[10][10], int n) {
   int det = 0;
   int submatrix[10][10];
   if (n == 2)
   return ((matrix[0][0] * matrix[1][1]) - (matrix[1][0] * matrix[0][1]));
   else {
      for (int x = 0; x < n; x++) {
         int subi = 0;
         for (int i = 1; i < n; i++) {
            int subj = 0;
            for (int j = 0; j < n; j++) {
               if (j == x)
               continue;
               submatrix[subi][subj] = matrix[i][j];
               subj++;
            }
            subi++;
         }
         det = det + (pow(-1, x) * matrix[0][x] * determinant( submatrix, n - 1 ));
      }
   }
   return det;
}
int main() {
   int n, d, i, j;
   int matrix[10][10];
   cout << "Enter the size of the matrix:\n";
   cin >> n;
   cout << "Enter the elements of the matrix:\n";
   for (i = 0; i < n; i++)
   for (j = 0; j < n; j++)
   cin >> matrix[i][j];
   cout<<"The entered matrix is:"<<endl;
   for (i = 0; i < n; i++) {
      for (j = 0; j < n; j++)
      cout << matrix[i][j] <<" ";
      cout<<endl;
   }
   d = determinant(matrix, n);
   cout<<"Determinant of the matrix is "<< d <<endl;
   if( d == 0 )
   cout<<"This matrix is not invertible as the determinant is zero";
   else
   cout<<"This matrix is invertible as the determinant is not zero";
   return 0;
}

đầu ra

Enter the size of the matrix: 3
Enter the elements of the matrix:
1 2 3
2 1 2
1 1 4
The entered matrix is:
1 2 3
2 1 2
1 1 4
Determinant of the matrix is -7
This matrix is invertible as the determinant is not zero

Trong chương trình trên, kích thước và các phần tử của ma trận được cung cấp trong hàm main (). Khi đó hàm định thức () được gọi. Nó trả về định thức của ma trận được lưu trữ trong d. Nếu định thức bằng 0 thì ma trận không khả nghịch và nếu định thức khác 0 thì ma trận khả nghịch. Điều này được chứng minh bằng đoạn mã sau.

cout << "Enter the size of the matrix:\n";
cin >> n;
cout << "Enter the elements of the matrix:\n";
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
cin >> matrix[i][j];
cout<<"The entered matrix is:"<<endl;
for (i = 0; i < n; i++) {
   for (j = 0; j < n; j++)
   cout << matrix[i][j] <<" ";
   cout<<endl;
}
d = determinant(matrix, n);
cout<<"Determinant of the matrix is "<< d <<endl;
if( d == 0 )
cout<<"This matrix is not invertible as the determinant is zero";
else
cout<<"This matrix is invertible as the determinant is not zero";

Trong định thức hàm (), nếu kích thước của ma trận là 2, thì định thức được tính trực tiếp và giá trị được trả về. Điều này được hiển thị như sau.

if (n == 2)
return ((matrix[0][0] * matrix[1][1]) - (matrix[1][0] * matrix[0][1]));

Nếu kích thước của ma trận không phải là 2, thì định thức được tính toán đệ quy. Có 3 vòng lặp for lồng nhau được sử dụng với các biến vòng lặp x, i và j. Các vòng lặp này được sử dụng để tính định thức và định thức hàm () được gọi một cách đệ quy để tính định thức bên trong và sau đó nhân nó với giá trị bên ngoài. Điều này được chứng minh bằng đoạn mã sau.

for (int x = 0; x < n; x++) {
   int subi = 0;
   for (int i = 1; i < n; i++) {
      int subj = 0;
      for (int j = 0; j < n; j++) {
         if (j == x)
         continue;
         submatrix[subi][subj] = matrix[i][j];
         subj++;
      }
      subi++;
   }
   det = det + (pow(-1, x) * matrix[0][x] * determinant( submatrix, n - 1 ))
}