কম্পিউটার

C++ এ Gauss Jordan মেথড ব্যবহার করে একটি ম্যাট্রিক্সের বিপরীত খোঁজা


এই সমস্যায়, আমাদের একটি 2D ম্যাট্রিক্স ম্যাট দেওয়া হয়েছে[][]। আমাদের কাজ হল গাউস জর্ডান পদ্ধতি ব্যবহার করে একটি ম্যাট্রিক্সের বিপরীত খোঁজা .

এখন, আসুন সমস্যার মূল বিষয়গুলি বুঝতে পারি,

MATRIX সংখ্যার একটি দ্বিমাত্রিক বিন্যাস।

উদাহরণ

$\begin{bmatrix}2&5&4 \\1&6&7 \\9&3&8\end{bmatrix}$

ম্যাট্রিক্সের বিপরীত [A-1]

এটি বর্গ ম্যাট্রিক্সে সঞ্চালিত একটি অপারেশন। একটি ম্যাট্রিক্সের একটি বিপরীত −

থাকার জন্য নিম্নলিখিত বৈশিষ্ট্যগুলি প্রয়োজন
  • প্রাথমিক ম্যাট্রিক্স বর্গাকার ম্যাট্রিক্স হওয়া উচিত।

  • এটি অবশ্যই অ-একবচন ম্যাট্রিক্স হতে হবে।

  • একটি আইডেন্টিটি ম্যাট্রিক্স আমি ম্যাট্রিক্স A-এর জন্য বিদ্যমান যেমন,

$$AA^{-1} =A^{-1}.A =I$$

তাদের একটি সূত্র যা পিপীলিকার প্রদত্ত ম্যাট্রিক্সের বিপরীত বের করতে ব্যবহার করা যেতে পারে। এটা হল

$A^{-1}\:=\:\left(\frac{adj(A)}{\det(A)}\right)$

adj(A) হল ম্যাট্রিক্স A এর সংযোজন

det(A) ম্যাট্রিক্স A এর নির্ধারক।

তাদের একাধিক উপায় ব্যবহার করে আমরা একটি ম্যাট্রিক্সের বিপরীত খুঁজে পেতে পারি। এই নিবন্ধে, আমরা গাউস জর্ডান পদ্ধতি সম্পর্কে শিখব যা এলিমেন্টারি রো অপারেশন নামেও পরিচিত .

এটি একটি ম্যাট্রিক্সের ইনভার্স খুঁজে বের করার জন্য ধাপে ধাপে পদ্ধতি, এখানে ধাপগুলি জড়িত -

  • পরিচয় ম্যাট্রিক্স ব্যবহার করে অগমেন্টেড ম্যাট্রিক্স খোঁজা।

  • ধাপ 1 এ পাওয়া বর্ধিত ম্যাট্রিক্সে সারি হ্রাস অপারেশন সম্পাদন করে ম্যাট্রিক্সের ইচেলন ফর্মটি খুঁজুন৷

  • কিছু অপারেশন যা প্রক্রিয়ায় বর্ধিত ম্যাট্রিক্সে সঞ্চালিত হতে পারে তা হল

    • সারি বিনিময় (আপনি যেকোনো দুটি সারি বিনিময় করতে পারেন)

    • গুণ (সারির প্রতিটি উপাদানকে 0 ছাড়া অন্য একটি ধ্রুবক মান দ্বারা গুণ করা যেতে পারে)।

    • সারি বিনিময় (সারিটি সারির যোগফল দিয়ে প্রতিস্থাপন করুন এবং ম্যাট্রিক্সের অন্য সারির ধ্রুবক গুণিতক)।

উদাহরণ

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম

#include <iostream>
#include <vector>
using namespace std;
void printMatrixValues(float** arr, int n, int m){
   for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
         cout<<arr[i][j]<<"\t";
      }
      cout<<endl;
   }
   return;
}
void printInverseMatrix(float** arr, int n, int m){
   for (int i = 0; i < n; i++) {
      for (int j = n; j < m; j++) {
         printf("%.3f\t", arr[i][j]);
      }
      cout<<endl;
   }
   return;
}
void findInvMatGaussJordan(float** mat, int order){
   float temp;
   printf("The inverse of matrix : A = \n");
   printMatrixValues(mat, order, order);
   for (int i = 0; i < order; i++) {
      for (int j = 0; j < 2 * order; j++) {
         if (j == (i + order))
            mat[i][j] = 1;
      }
   }
   for (int i = order - 1; i > 0; i--) {
      if (mat[i - 1][0] < mat[i][0]) {
         float* temp = mat[i];
         mat[i] = mat[i - 1];
         mat[i - 1] = temp;
      }
   }
   for (int i = 0; i < order; i++) {
      for (int j = 0; j < order; j++) {
         if (j != i) {
            temp = mat[j][i] / mat[i][i];
            for (int k = 0; k < 2 * order; k++) {
               mat[j][k] -= mat[i][k] * temp;
            }
         }
      }
   }
   for (int i = 0; i < order; i++) {
      temp = mat[i][i];
      for (int j = 0; j < 2 * order; j++) {
         mat[i][j] = mat[i][j] / temp;
      }
   }
   cout<<"A' =\n";
   printInverseMatrix(mat, order, 2 * order);
   return;
}
int main(){
   int order = 3;
   float** mat = new float*[20];
   for (int i = 0; i < 20; i++)
   mat[i] = new float[20];
   mat[0][0] = 6; mat[0][1] = 9; mat[0][2] = 5;
   mat[1][0] = 8; mat[1][1] = 3; mat[1][2] = 2;
   mat[2][0] = 1; mat[2][1] = 4; mat[2][2] = 7;
   findInvMatGaussJordan(mat, order);
   return 0;
}

আউটপুট

The inverse of matrix : A =
6 9 5
8 3 2
1 4 7
A' =
-0.049  0.163  -0.011
0.205  -0.141  -0.106
-0.110  0.057  0.205

  1. সি++ ব্যবহার করে ওপেনসিভিতে রঙের স্থানগুলি কীভাবে রূপান্তর করবেন?

  2. ইনসিডেন্স ম্যাট্রিক্স ব্যবহার করে গ্রাফ প্রতিনিধিত্ব করার জন্য C++ প্রোগ্রাম

  3. অ্যাডজাসেন্সি ম্যাট্রিক্স ব্যবহার করে গ্রাফ প্রতিনিধিত্ব করার জন্য C++ প্রোগ্রাম

  4. মাল্টি-ডাইমেনশনাল অ্যারে ব্যবহার করে দুটি ম্যাট্রিক্সকে গুণ করার জন্য C++ প্রোগ্রাম