यह एक C++ प्रोग्राम है जो ग्राफ मैट्रिक्स का व्युत्क्रम ज्ञात करता है। मैट्रिक्स का व्युत्क्रम केवल तभी मौजूद होता है जब मैट्रिक्स नॉन-सिंगुलर हो यानी डिटरमिनेंट 0 नहीं होना चाहिए। मैट्रिक्स का व्युत्क्रम कई तरीकों से ज्ञात किया जा सकता है। यहां हम एडजॉइंट मैट्रिक्स और उसके डिटरमिनेंट का उपयोग करके ग्राफ मैट्रिक्स का व्युत्क्रम ज्ञात करते हैं। उदाहरण में शामिल चरण:
Begin function INV() मैट्रिक्स का व्युत्क्रम प्राप्त करने के लिए: DET() फंक्शन को कॉल करें। ADJ() फंक्शन को कॉल करें। सूत्र का उपयोग करके मैट्रिक्स का व्युत्क्रम ज्ञात करें; Inverse(matrix) = ADJ(matrix) / DET(matrix) End.
उदाहरण
#include<bits/stdc++.h> using namespace std; #define N 5 void getCfactor(int M[N][N], int t[N][N], int p, int q, int n) { int i = 0, j = 0; for (int r= 0; r< n; r++) { for (int c = 0; c< n; c++) // केवल उन एलिमेंट को कॉपी करें जो दिए गए रो r और कॉलम c में नहीं हैं: { if (r != p && c != q) { t[i][j++] = M[r][c]; // यदि रो भर गया है तो r इंडेक्स बढ़ाएं और c इंडेक्स रीसेट करें if (j == n - 1) { j = 0; i++; } } } } } int DET(int M[N][N], int n) // डिटरमिनेंट ज्ञात करने के लिए { int D = 0; if (n == 1) return M[0][0]; int t[N][N]; // कोफैक्टर संग्रहीत करें int s = 1; // साइन मल्टीप्लायर संग्रहीत करें // पहली रो के प्रत्येक एलिमेंट पर पुनरावृति करें for (int f = 0; f < n; f++) { // M[0][f] का कोफैक्टर प्राप्त करने के लिए getCfactor(M, t, 0, f, n); D += s * M[0][f] * DET(t, n - 1); s = -s; } return D; } void ADJ(int M[N][N],int adj[N][N]) // एडजॉइंट मैट्रिक्स ज्ञात करने के लिए { if (N == 1) { adj[0][0] = 1; return; } int s = 1, t[N][N]; for (int i=0; i<N; i++) { for (int j=0; j<N; j++) { // M[i][j] का कोफैक्टर प्राप्त करने के लिए getCfactor(M, t, i, j, N); s = ((i+j)%2==0)? 1: -1; // adj[j][i] का साइन पॉजिटिव यदि रो और कॉलम इंडेक्स का योग सम है। adj[j][i] = (s)*(DET(t, N-1)); // कोफैक्टर मैट्रिक्स का ट्रांसपोज़ प्राप्त करने के लिए रो और कॉलम को इंटरचेंज करें } } } bool INV(int M[N][N], float inv[N][N]) { int det = DET(M, N); if (det == 0) { cout << "can't find its inverse"; return false; } int adj[N][N]; ADJ(M, adj); for (int i=0; i<N; i++) for (int j=0; j<N; j++) inv[i][j] = adj[i][j]/float(det); return true; } template<class T> void print(T A[N][N]) // मैट्रिक्स प्रिंट करें। { for (int i=0; i<N; i++) { for (int j=0; j<N; j++) cout << A[i][j] << " "; cout << endl; } } int main() { int M[N][N] = { {1, 2, 3, 4,-2}, {-5, 6, 7, 8, 4}, {9, 10, -11, 12, 1}, {13, -14, -15, 0, 9}, {20 , -26 , 16 , -17 , 25} }; float inv[N][N]; cout << "Input matrix is :\n"; print(M); cout << "\nThe Inverse is :\n"; if (INV(M, inv)) print(inv); return 0; }
आउटपुट
Input matrix is : 1 2 3 4 -2 -5 6 7 8 4 9 10 -11 12 1 13 -14 -15 0 9 20 -26 16 -17 25 The Inverse is : 0.0811847 -0.0643008 0.0493814 -0.0247026 0.0237006 -0.126819 -0.0161738 0.0745377 -0.0713976 0.0151639 0.0933664 0.0028245 -0.0111876 -0.0220437 0.0154006 0.143624 0.0582573 -0.0282371 0.0579023 -0.0175466 -0.15893 0.0724272 0.0259728 -0.00100988 0.0150219