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