Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมตรวจสอบเมทริกซ์สมมาตรใน C++


ในพีชคณิตเชิงเส้น เมทริกซ์ M[][] เรียกว่าเมทริกซ์สมมาตรก็ต่อเมื่อทรานสโพสของเมทริกซ์เท่ากับเมทริกซ์เอง ทรานสโพสของเมทริกซ์คือเมื่อเราพลิกเมทริกซ์เหนือเส้นทแยงมุม ซึ่งผลลัพธ์จะสลับดัชนีแถวและคอลัมน์ของเมทริกซ์

ด้านล่างตัวอย่างสมมาตรเมทริกซ์ −

$$\begin{bmatrix} 1 &4 &7 \\ 4 &5 &6 \\ 7 &6 &9 \\ \end {bmatrix} \Rightarrow \begin{bmatrix} 1 &4 &7 \\ 4 &5 &6 \\ 7 &6 &9 \\ \end{bmatrix}$$

เมทริกซ์ด้านบนเป็นเมทริกซ์สมมาตร เราเอาเมทริกซ์ทางด้านซ้ายแล้วย้ายมัน และผลลัพธ์ก็เท่ากับเมทริกซ์เอง

ตัวอย่าง

Input: arr1[][n] = { { 1, 2, 3 },
   { 2, 2, 4 },
   { 3, 4, 1 } };
Output: its a symmetric matrix
Input: arr1[][n] = { { 1, 7, 3 },
   { 2, 9, 5 },
   { 4, 6, 8 } };
Output: its not a symmetric matrix 

แนวทาง

เราสามารถทำตามขั้นตอนเหล่านี้ได้ -

  • 1. หาเมทริกซ์และเก็บทรานสโพสไว้ในเมทริกซ์อื่น
  • 2. ตรวจสอบว่าเมทริกซ์ผลลัพธ์เหมือนกับเมทริกซ์อินพุต

อัลกอริทึม

Start
Step 1 -> define macro as #define n 10
Step 2 -> declare function to find transporse of a matrix
   void transpose(int arr1[][n], int arr2[][n], int a)
      Loop For int i = 0 and i < a and i++
         Loop For int j = 0 and j < a and j++
            Set arr2[i][j] = arr1[j][i]
         End
   End
Step 3 -> declare function to check symmetric or not
   bool check(int arr1[][n], int a)
   declare variable as int arr2[a][n]
   Call transpose(arr1, arr2, a)
   Loop For int i = 0 and i < a and i++
      Loop For int j = 0 and j < a and j++
         IF (arr1[i][j] != arr2[i][j])
            return false
         End
      End
   End
   Return true
Step 4 -> In main()
   Declare variable as int arr1[][n] = { { 1, 2, 3 },
      { 2, 2, 4 },
      { 3, 4, 1 } }
   IF (check(arr1, 3))
      Print its a symmetric matrix
   Else
      Print its not a symmetric matrix
Stop

ตัวอย่าง

#include <iostream>
#define n 10
using namespace std;
//find transporse of a matrix
void transpose(int arr1[][n], int arr2[][n], int a){
   for (int i = 0; i < a; i++)
      for (int j = 0; j < a; j++)
         arr2[i][j] = arr1[j][i];
}
//check symmetric or not
bool check(int arr1[][n], int a){
   int arr2[a][n];
   transpose(arr1, arr2, a);
   for (int i = 0; i < a; i++)
      for (int j = 0; j < a; j++)
         if (arr1[i][j] != arr2[i][j])
            return false;
   return true;
}
int main(){
   int arr1[][n] = { { 1, 2, 3 },
      { 2, 2, 4 },
      { 3, 4, 1 } };
   if (check(arr1, 3))
      cout << "its a symmetric matrix";
   else
      cout << "its not a symmetric matrix";
   return 0;
}

ผลลัพธ์

its a symmetric matrix