Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> 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 आयाम) फ़ंक्शन है जो मैट्रिक्स और मैट्रिक्स के आयाम मान को लेता है। यदि मैट्रिक्स केवल 1 आयाम का है तो यह [0] [0] मैट्रिक्स मान देता है। इस स्थिति का उपयोग आधार स्थिति के रूप में भी किया जाता है क्योंकि हम प्रत्येक पुनरावर्ती कॉल पर आयामों को कम करने के साथ अपने मैट्रिक्स को पुनरावर्ती रूप से पुनरावृत्त करते हैं।

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

फिर हम cofactorMat[N][N] की घोषणा करते हैं, जो पहले पंक्ति तक कोफ़ेक्टर (int mat[N][N], int temp[N][N], int p, int q, int n) फंक्शन को पास कर दिया जाएगा। आयाम से कम है। मैट्रिक्स के निर्धारक को लूप पुनरावृत्ति के लिए प्रत्येक पर बारी-बारी से संकेतों के साथ 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;
}

कॉफ़ैक्टर (इंट मैट [एन] [एन], इंट टेम्प [एन] [एन], इंट पी, इंट क्यू, इंट एन) फ़ंक्शन मैट्रिक्स लेता है, कॉफ़ैक्टर मैट्रिक्स, 0, फर्स्टरो वैल्यू और मैट्रिक्स के आयाम के रूप में पैरामीटर मान। लूप के लिए नेस्टेड तब हमें मैट्रिक्स पर पुनरावृति करने में मदद करता है और जहां 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++;
}

अंत में हमारे पास हमारा डिस्प्ले (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

  1. C++ . में मैट्रिक्स का ज़िगज़ैग (या विकर्ण) ट्रैवर्सल

    इस समस्या में, हमें एक 2D मैट्रिक्स दिया गया है। हमारा काम मैट्रिक के सभी तत्वों को तिरछे क्रम में प्रिंट करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, 1    2    3 4    5    6 7    8    9 आउटपुट - 1 4    2 7    

  1. सी++ में सर्पिल मैट्रिक्स III

    मान लीजिए कि हमारे पास आर पंक्तियों और सी कॉलम के साथ एक 2 आयामी ग्रिड है, हम पूर्व की ओर (r0, c0) से शुरू करते हैं। यहां, ग्रिड का उत्तर-पश्चिम कोना पहली पंक्ति और स्तंभ पर है, और ग्रिड का दक्षिण-पूर्व कोना अंतिम पंक्ति और स्तंभ पर है। हम इस ग्रिड में हर स्थिति का दौरा करने के लिए एक दक्षिणावर्त सर

  1. C++ में idempotent मैट्रिक्स की जांच करने का कार्यक्रम

    एक मैट्रिक्स दिया गया है M[r][c], r पंक्तियों की संख्या को दर्शाता है और c कॉलम की संख्या को दर्शाता है जैसे कि r =c एक वर्ग मैट्रिक्स बनाता है। हमें यह जांचना है कि दिया गया वर्ग मैट्रिक्स एक बेकार मैट्रिक्स . है या नहीं या नहीं। बेकार मैट्रिक्स एक मैट्रिक्स M को बेवकूफ मैट्रिक्स . कहा जाता है य