Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ प्रोग्राम किसी भी मैट्रिक्स का LU अपघटन करने के लिए


एक मैट्रिक्स का LU अपघटन इसके निचले त्रिकोणीय मैट्रिक्स और ऊपरी त्रिकोणीय मैट्रिक्स के उत्पाद के रूप में एक मैट्रिक्स का निर्माण करता है। मैट्रिक्स के LU अपघटन में LU लोअर अपर के लिए होता है।

मैट्रिक्स के LU अपघटन का एक उदाहरण नीचे दिया गया है -

Given matrix is:
1 1 0
2 1 3
3 1 1
The L matrix is:
1 0 0
2 -1 0
3 -2 -5
The U matrix is:
1 1 0
0 1 -3
0 0 1

एक प्रोग्राम जो मैट्रिक्स का LU अपघटन करता है, नीचे दिया गया है -

उदाहरण

#include<iostream>
using namespace std;
void LUdecomposition(float a[10][10], float l[10][10], float u[10][10], int n) {
   int i = 0, j = 0, k = 0;
   for (i = 0; i < n; i++) {
      for (j = 0; j < n; j++) {
         if (j < i)
         l[j][i] = 0;
         else {
            l[j][i] = a[j][i];
            for (k = 0; k < i; k++) {
               l[j][i] = l[j][i] - l[j][k] * u[k][i];
            }
         }
      }
      for (j = 0; j < n; j++) {
         if (j < i)
         u[i][j] = 0;
         else if (j == i)
         u[i][j] = 1;
         else {
            u[i][j] = a[i][j] / l[i][i];
            for (k = 0; k < i; k++) {
               u[i][j] = u[i][j] - ((l[i][k] * u[k][j]) / l[i][i]);
            }
         }
      }
   }
}
int main() {
   float a[10][10], l[10][10], u[10][10];
   int n = 0, i = 0, j = 0;

   cout << "Enter size of square matrix : "<<endl;
   cin >> n;

   cout<<"Enter matrix values: "<endl;
   for (i = 0; i < n; i++)
   for (j = 0; j < n; j++)
   cin >> a[i][j];
   LUdecomposition(a, l, u, n);
   cout << "L Decomposition is as follows..."<<endl;
   for (i = 0; i < n; i++) {
      for (j = 0; j < n; j++) {
         cout<<l[i][j]<<" ";
      }
      cout << endl;
   }
   cout << "U Decomposition is as follows..."<<endl;
   for (i = 0; i < n; i++) {
      for (j = 0; j < n; j++) {
         cout<<u[i][j]<<" ";
      }
      cout << endl;
   }
   return 0;
}

आउटपुट

उपरोक्त कार्यक्रम का आउटपुट इस प्रकार है

Enter size of square matrix : 3
Enter matrix values:
1 1 0
2 1 3
3 1 1
L Decomposition is as follows...
1 0 0
2 -1 0
3 -2 -5
U Decomposition is as follows...
1 1 0
0 1 -3
0 0 1

उपरोक्त कार्यक्रम में, फ़ंक्शन LU अपघटन दिए गए मैट्रिक्स के L और U अपघटन का पता लगाता है। यह लूप के लिए नेस्टेड का उपयोग करके किया जाता है जो एल और यू अपघटन की गणना करता है और उन्हें मैट्रिक्स ए [] [] से एल [] [] और यू [] [] मैट्रिक्स में संग्रहीत करता है।

इसे प्रदर्शित करने वाला कोड स्निपेट इस प्रकार दिया गया है -

for (i = 0; i < n; i++) {
   for (j = 0; j < n; j++) {
      if (j < i)
      l[j][i] = 0;
      else {
         l[j][i] = a[j][i];
         for (k = 0; k < i; k++) {
            l[j][i] = l[j][i] - l[j][k] * u[k][i];
         }
      }
   }
   for (j = 0; j < n; j++) {
      if (j < i)
      u[i][j] = 0;
      else if (j == i)
      u[i][j] = 1;
      else {
         u[i][j] = a[i][j] / l[i][i];
         for (k = 0; k < i; k++) {
            u[i][j] = u[i][j] - ((l[i][k] * u[k][j]) / l[i][i]);
         }  
      }
   }
}

मुख्य () फ़ंक्शन में, उपयोगकर्ता से मैट्रिक्स और उसके तत्वों का आकार प्राप्त किया जाता है। यह इस प्रकार दिया गया है -

cout << "Enter size of square matrix : "<<endl;
cin >> n;
cout<<"Enter matrix values: "<endl;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
cin >> a[i][j];

फिर LU अपघटन फ़ंक्शन को कॉल किया जाता है और L और U अपघटन प्रदर्शित किया जाता है। यह नीचे दिया गया है -

LUdecomposition(a, l, u, n);
cout << "L Decomposition is as follows..."<<endl;
for (i = 0; i < n; i++) {
   for (j = 0; j < n; j++) {
      cout<<l[i][j]<<" ";
   }
   cout << endl;
}
cout << "U Decomposition is as follows..."<<endl;
for (i = 0; i < n; i++) {
   for (j = 0; j < n; j++) {
      cout<u[i][j]<<" ";
   }
   cout << endl;
}

  1. सी++ में इनवॉल्यूटरी मैट्रिक्स की जांच करने का कार्यक्रम

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

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

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

  1. सी ++ प्रोग्राम एडजेंसी मैट्रिक्स को लागू करने के लिए

    एक ग्राफ का आसन्न मैट्रिक्स आकार V x V का एक वर्ग मैट्रिक्स है। V ग्राफ G के शीर्षों की संख्या है। इस मैट्रिक्स में प्रत्येक पक्ष में V कोने चिह्नित हैं। यदि ग्राफ़ में i से j कोने तक कुछ किनारे हैं, तो ith पर आसन्न मैट्रिक्स में पंक्ति और जम्मूवें कॉलम में यह 1 (या भारित ग्राफ़ के लिए कुछ गैर-शून्