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

Yếu tố quyết định của một ma trận trong C ++?

Định thức của ma trận chỉ có thể được tính cho ma trận vuông bằng cách nhân đồng hệ số hàng đầu tiên với định thức của đồng hệ số tương ứng và cộng chúng với các dấu hiệu thay thế để có kết quả cuối cùng.

$$ A =\ begin {bmatrix} a &b &c \\ d &e &f \\ g &h &i \\ \ end {bmatrix} | A | =a (ei-fh) -b (di-gf) + c (dh-eg) $$

Đầu tiên chúng ta có hàm xác địnhOfMatrix (int mat [N] [N], intmens) nhận ma trận và giá trị thứ nguyên của ma trận. Nếu ma trận chỉ có 1 chiều thì nó trả về giá trị ma trận [0] [0]. Điều kiện này cũng được sử dụng làm điều kiện cơ sở vì chúng ta lặp lại một cách đệ quy ma trận của mình với việc giảm kích thước trên mỗi lần gọi đệ quy.

int determinantOfMatrix(int mat[N][N], int dimension){
   int Det = 0;
   if (dimension == 1)
      return mat[0][0];

Sau đó, chúng tôi khai báo hàm cofactorMat [N] [N] sẽ được chuyển cho cofactor (int mat [N] [N], int temp [N] [N], int p, int q, int n) cho đến khi đầu tiên nhỏ hơn thứ nguyên. Định thức của ma trận được lưu trữ trong biến Det với các dấu hiệu xen kẽ trên mỗi lần lặp vòng lặp for. Det này sau đó được trả về chức năng chính nơi nó được in.

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

Hàm cofactor (int mat [N] [N], int temp [N] [N], int p, int q, int n) nhận ma trận, ma trận cofactor, giá trị 0, firstRow và kích thước của ma trận là các giá trị tham số. Sau đó, vòng lặp for lồng nhau giúp chúng ta lặp lại ma trận và khi các giá trị p &q không bằng giá trị hàng và cột tương ứng, những giá trị đó được lưu trữ trong ma trận tạm thời.

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];

Khi hàng được lấp đầy, chúng tôi tăng chỉ số hàng và đặt lại chỉ số col.

if (j == n - 1){
   j = 0;
   i++;
}

Cuối cùng, chúng ta có màn hình hiển thị (int mat [N] [N], int row, int col) lấy ma trận và không có hàng và cột và lặp qua ma trận dưới dạng mảng 2d và in các giá trị đó trên mỗi hàng và cột.

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

Ví dụ

Chúng ta hãy xem cách triển khai sau đây để tìm yếu tố quyết định của ma trận.

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

Đầu ra

Đoạn mã trên sẽ tạo ra kết quả sau -

The matrix is
1 0 2
3 0 0
2 1 4

Determinant of the matrix is 6