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