এটি একটি সি++ প্রোগ্রাম যা গ্রাফ ম্যাট্রিক্সের বিপরীত (Inverse) নির্ণয় করে। একটি ম্যাট্রিক্সের বিপরীত শুধুমাত্র তখনই বিদ্যমান থাকে যখন ম্যাট্রিক্সটি নন-সিংগুলার (non-singular) হয়, অর্থাৎ এর ডিটারমিন্যান্ট (determinant) শূন্য নয়। ম্যাট্রিক্সের বিপরীত নির্ণয়ের অনেক পদ্ধতি আছে। এখানে আমরা এডজয়েন্ট (adjoint) ম্যাট্রিক্স এবং এর ডিটারমিন্যান্ট ব্যবহার করে গ্রাফ ম্যাট্রিক্সের বিপরীত বের করব।
ধাপসমূহ
শুরু ফাংশন INV() ম্যাট্রিক্সের বিপরীত পেতে: DET() ফাংশন কল করুন। ADJ() ফাংশন কল করুন। সূত্র ব্যবহার করে ম্যাট্রিক্সের বিপরীত বের করুন: Inverse(matrix) = ADJ(matrix) / DET(matrix) শেষ।
উদাহরণ
#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; }
আউটপুট
ইনপুট ম্যাট্রিক্স: 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 বিপরীত ম্যাট্রিক্স: 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