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

Chương trình C ++ để tính toán xác định của ma trận

Định thức của ma trận vuông có thể được tính bằng cách sử dụng các giá trị phần tử của nó. Định thức của ma trận A có thể được ký hiệu là det (A) và nó có thể được gọi là hệ số tỉ lệ của phép biến đổi tuyến tính được mô tả bởi ma trận trong hình học.

Ví dụ về định thức của ma trận như sau.

The matrix is:
3 1
2 7
The determinant of the above matrix = 7*3 - 2*1
= 21 - 2
= 19
So, the determinant is 19.

Chương trình tính toán định thức của ma trận 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, 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;
   }
   cout<<"Determinant of the matrix is "<< determinant(matrix, n);
   return 0;
}

Đầu ra

Enter the size of the matrix: 3
Enter the elements of the matrix:
7 1 3
2 4 1
1 5 1
The entered matrix is:
7 1 3
2 4 1
1 5 1
Determinant of the matrix is 10

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 hiển thị. Đ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;
}
cout<<"Determinant of the matrix is "<< determinant(matrix, n);

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 ));
}