Symmetric or Skew symmetric matrix in C++
Written by
Program to find whether a square matrix is
a)symmetric b) skew-symmetric c) none of two
# Understanding the terms
-
A square matrix is said to be symmetric if its transpose is equal to it:A=A’
Or all elements satisfy the relation:
A[ij] = A[ji]
-
A square matrix is said to be symmetric if its transpose is equal to its negative:
AT = -AOr all elements satisfy the relation:A[ij] = -A[ji]
-
All diagonal elements of a skew symmetric matrix are zero and for symmetric matrix they can take any value.
-
a b c b e d c d f is the general form of a symmetric matrix.
-
0 -b -c b 0 -d c d 0 is the general form of a skew-symmetric matrix.
Now in the given question we have make a program that takes a matrix as input and checks if it is symmetric or skew symmetric or none of them.
# Approaching the problem
We have to check for each element (i,j) of the matrix and compare it with (j,i) and check if they are equal or negative of each other.
To access each element, we will use two nested for loops just like we do when he have to input or print a 2-D array and then we can specify our conditions to check for syymetric and skew symmetric matrices.
We would use a if-else and in if condition we will check for symmetric and inside the else we will check if its skew symmetric or none of above.
# Algorithm
- Input from the user the size n of the matrix we wish to check
- Input a matrix of size nxn from the user with the help of nested for loops and store it in a 2-D array of size nxn.
- Set a variable ctr to 1.
- Using a nested for loop check if a[i][j] is equal to a[j][i].if not, set ctr to zero and break out of the loops.
- Out of the loop check if ctr is still 1 then its symmetric matrix.
- In the else condition, again set ctr to 1 and using a nested for loop check if a[i][j] is equal to -a[j][i].if not, set ctr to zero and break out of the loops.
- Out of the loop check if ctr is still 1 then it’s a skew-symmetric matrix and if not then its neither symmetric nor skew symmetric.
Code
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "Enter size of square matrix\n"; //inputting size of the matrix
cin >> n;
int a[n][n];
cout << "Enter the matrix row-wise\n"; //inputting the matrix row wise
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
cin >> a[i][j];
}
}
int ctr = 1;
for (int i = 0; i < n; ++i) //check for symmetric matrix
{
for (int j = 0; j < n; ++j)
{
if (a[i][j] != -a[j][i])
{
ctr = 0;
break;
}
}
if (ctr == 0)
break;
}
if (ctr) //printing if matrix is symmetric
cout << "Matrix is skew-symmetric\n";
else //checking if skew symmetric matrix
{
ctr = 1;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
if (a[i][j] != (-a[j][i]))
{
ctr = 0;
break;
}
}
if (ctr == 0)
break;
}
if (ctr) //printing if matrix is skew symmetric matrix
cout << "Matrix is skew-symmetric\n";
else //if not then its neither of the two
cout << "Matrix is neither symmetric nor skew-symmetric\n";
}
return 0;
}
Output
3
1 2 3
2 4 5
3 5 6
Matrix is neither symmetric nor skew-symmetric