Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ tính định thức của ma trận


Định thức (determinant) của ma trận vuông có thể tính từ các giá trị phần tử. Định thức của ma trận A ký hiệu là det(A), được gọi là hệ số tỷ lệ của biến đổi tuyến tính mà ma trận mô tả trong hình học.

Ví dụ định thức ma trận 2x2:

Ma trận:
3 1
2 7
Định thức = 7×3 - 2×1 = 21 - 2 = 19
Vậy định thức là 19.

Chương trình tính định thức ma trận:

Ví dụ

#include <iostream>
#include <cmath>
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 << "Nhập kích thước ma trận:\n";
  cin >> n;
  cout << "Nhập các phần tử ma trận:\n";
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
      cin >> matrix[i][j];
  cout << "Ma trận vừa nhập:" << endl;
  for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++)
      cout << matrix[i][j] << " ";
    cout << endl;
  }
  cout << "Định thức của ma trận là " << determinant(matrix, n);
  return 0;
}

Kết quả đầu ra

Nhập kích thước ma trận: 3
Nhập các phần tử ma trận: 7 1 3 2 4 1 1 5 1
Ma trận vừa nhập:
7 1 3
2 4 1
1 5 1
Định thức của ma trận là 10

Trong chương trình trên, kích thước và các phần tử ma trận được nhập trong main(). Sau đó gọi hàm determinant() để tính và hiển thị kết quả:

cout << "Nhập kích thước ma trận:\n";
cin >> n;
cout << "Nhập các phần tử ma trận:\n";
for (i = 0; i < n; i++)
  for (j = 0; j < n; j++)
    cin >> matrix[i][j];
cout << "Ma trận vừa nhập:" << endl;
for (i = 0; i < n; i++) {
  for (j = 0; j < n; j++)
    cout << matrix[i][j] << " ";
  cout << endl;
}
cout << "Định thức của ma trận là " << determinant(matrix, n);

Trong hàm determinant(), nếu kích thước ma trận là 2, tính trực tiếp và trả về:

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

Nếu kích thước khác 2, tính định thức đệ quy. Sử dụng 3 vòng lặp lồng nhau với biến x, i, j để tính định thức, gọi đệ quy determinant() tính định thức con rồi nhân với giá trị bên ngoài:

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