एक मैट्रिक्स का सारणिक केवल वर्ग मैट्रिक्स के लिए गणना किया जा सकता है पहली पंक्ति के सहखंड (cofactor) को संबंधित सहखंड के सारणिक से गुणा करके और उन्हें वैकल्पिक चिह्नों के साथ जोड़कर अंतिम परिणाम प्राप्त किया जाता है।
$$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) फंक्शन में पास किया जाता है जब तक firstRow आयाम से कम है। मैट्रिक्स का सारणिक 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 मान और मैट्रिक्स के आयाम को पैरामीटर मान के रूप में लेता है। नेस्टेड फॉर लूप फिर हमें मैट्रिक्स पर पुनरावृति करने में मदद करता है और जहां p और q मान क्रमशः पंक्ति और स्तंभ मानों के बराबर नहीं हैं, उन मानों को temp मैट्रिक्स में संग्रहीत किया जाता है।
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++;
}
अंत में हमारे पास 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