Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ดีเทอร์มิแนนต์ของเมทริกซ์ใน C++?


ดีเทอร์มีแนนต์ของเมทริกซ์สามารถคำนวณได้เฉพาะสำหรับเมทริกซ์สี่เหลี่ยมจัตุรัสโดยการคูณโคแฟกเตอร์แถวแรกด้วยดีเทอร์มีแนนต์ของโคแฟกเตอร์ที่เกี่ยวข้องแล้วบวกด้วยเครื่องหมายทางเลือกเพื่อให้ได้ผลลัพธ์สุดท้าย

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

อันดับแรก เรามีฟังก์ชัน determinantOfMatrix(int ​​mat[N][N], int dimension) ที่ใช้เมทริกซ์และค่ามิติของเมทริกซ์ หากเมทริกซ์มีขนาดเพียง 1 มิติ มันจะส่งคืนค่าเมทริกซ์ [0][0] เงื่อนไขนี้ยังใช้เป็นเงื่อนไขพื้นฐาน เนื่องจากเราทำซ้ำเมทริกซ์ของเราแบบเรียกซ้ำโดยลดขนาดในการเรียกซ้ำแต่ละครั้ง

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

จากนั้นเราจะประกาศ cofactorMat[N][N] ซึ่งจะถูกส่งต่อไปยัง cofactor(int mat[N][N], int temp[N][N], int p, int q, int n) จนถึงแถวแรก น้อยกว่ามิติ ดีเทอร์มีแนนต์ของเมทริกซ์ถูกเก็บไว้ในตัวแปร Det โดยมีสัญญาณสลับกันสำหรับวนซ้ำ จากนั้น det นี้จะถูกส่งกลับไปยังฟังก์ชันหลักที่มันถูกพิมพ์

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

ฟังก์ชัน cofactor(int mat[N][N], int temp[N][N], int p,int q, int n) รับเมทริกซ์, เมทริกซ์โคแฟกเตอร์, 0, ค่า firstRow และขนาดของเมทริกซ์เป็น ค่าพารามิเตอร์ จากนั้น for loop ที่ซ้อนกันจะช่วยให้เราวนซ้ำบนเมทริกซ์และโดยที่ค่า p &q ไม่เท่ากับค่าแถวและคอลัมน์ตามลำดับ ค่าเหล่านั้นจะถูกเก็บไว้ในเมทริกซ์ชั่วคราว

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

เมื่อแถวถูกเติม เราจะเพิ่มดัชนีแถวและรีเซ็ตดัชนี col

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

ในที่สุด เราก็มี display(int mat[N][N], int row, int col) ที่ใช้เมทริกซ์และไม่มีแถวและคอลัมน์ และวนซ้ำเมทริกซ์เป็นอาร์เรย์ 2d และพิมพ์ค่าเหล่านั้นในแต่ละแถวและคอลัมน์

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

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อค้นหาดีเทอร์มีแนนต์ของเมทริกซ์

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

ผลลัพธ์

รหัสข้างต้นจะสร้างผลลัพธ์ต่อไปนี้ -

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

Determinant of the matrix is 6