answersLogoWhite

0


Best Answer

A matrix is symmetric when it is a perfect square and the transpose of the matrix is equal to the original matrix. The implementation is reasonably straightforward and can be done without actually creating the transposed matrix. We simply imagine a dividing line through the main diagonal (top-left to bottom right) and compare the corresponding elements on each side of that diagonal.

bool is_symmetric (int* a, int rows, int cols) {

if (rows!=cols) return false;

for (int row=0, row

for (int col=row+1; col

if (a[row][col] != a[col][row]) return false;

return true;

}

This works because for every element a[row][col] in a square matrix, the corresponding element on the other side of the main diagonal must be a[col][row]. In other words, we simply transpose the subscripts (hence it is called the transpose).

Consider a 4x4 matrix of hexadecimal values:

0 1 2 3

4 5 6 7

8 9 A B

C D E F

The main diagonal line is identified as elements {0, 5, A, F}. Element {7} lies above this line and it corresponds with element {D} below the line. Element {7} is identified with the subscript [1][3] while element {D} is identified with the subscript [3][1].

Note that the inner loop which traverses the columns always starts at col=row+1. This ensures that we always start with the first element after the diagonal element in the current row, and traverse through the remaining elements of that row. In other words, elements in [row][col] are always in the upper-right of the matrix, above the main diagonal. Meanwhile, the corresponding transpose, element [col][row], lies in the lower-left of the matrix, below the main diagonal. There is no need to test the entire array, traversing every column of every row, because there's no point in testing elements on the diagonal itself (we'd be comparing each element to itself and its given that an element is always equal to itself), and there's no point in comparing the lower-left elements to the upper-right elements when we've already performed the reverse comparison. After all, if X==Y then it follows that Y==X because equality is a transitive operation (the result is the same regardless of which side of the operator we place the operands).

Note that in order to replace a square matrix with its transpose, we simply swap the corresponding elements unless the matrix is symmetrical (because, by definition, a symmetrical matrix is equal to its own transpose):

void transpose (int* a, int rows, int cols) {

if (rows!=cols is_symmetric (a, rows, cols)) return;

for (int row=0, row

for (int col=row+1; col

swap (&a[row][col], &a[col][row]);

}

User Avatar

Wiki User

7y ago
This answer is:
User Avatar

Add your answer:

Earn +20 pts
Q: How do you write a c program to determine if a matrix is symmetric or not?
Write your answer...
Submit
Still have questions?
magnify glass
imp
Related questions

How do you write a program in c plus plus to check if an array is symmetric?

To determine if an array is symmetric, the array must be square. If so, check each element against its transpose. If all elements are equal, the array is symmetric.For a two-dimensional array (a matrix) of order n, the following code will determine if it is symmetric or not:templatebool symmetric(const std::array& matrix){for (size_t r=0 ; r


Write a c program to determine whether a matrix is singular or not?

A c program is also known as a computer program. A singular matrix has no inverse. An equation to determine this would be a/c=f. <<>> The determinant of a singular matix is zero.


Write a program to multiply 33 matrix.?

write a program to multily 3*3 matrix.


2x2 matrix multiplication program in 8085 processor?

how to write a program for matrix multiplication in microprocesspr


How do you Write A program in c language for checking a diagonal matrix?

Write a program in c++ that take input in a integer matrix of size 4*4 and find out if the entered matrix is diagonal or not.


A c program to square matrix?

A C program to square matrix is a math problem. In the math problem you write down all the outer boundary values of matrix in a circle, then write down the inner value.


Write a program using c plus plus to check whether the given square matrix is symmetric or not?

means whether the matrix is same or not program for symmetric matrix : include<stdio.h> #include<conio.h> main() { int a[10][10],at[10][10],k,i,j,m,n; clrscr(); printf("enter the order of matrix"); scanf("%d %d",&m,&n); printf("enter the matrix"); for(i=0;i<m;i++) { for(j=0;j<n;j++) scanf("%d",&a[i][j]); } for(i=0;i<m;i++) { for(j=0;j<n;j++) at[i][j]=a[j][i]; } for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(at[i][j]!=a[i][j]) k=1; } } if(k==1) printf("not symmetric"); else printf("symmetric"); getch(); }


Write a c program to find eigenvalue of a matrix?

Yes, do write. That's what you always have to do when you have got a homework-program.


How do you write a java program to find the transpose of the matrix for the given elements?

You basically write a nested for loop (one for within another one), to copy the elements of the matrix to a new matrix.


How do you write a java program to find the ad joint of a matrix?

bgfygfrhjyuyhh


Write a program to print the sum of a sparse matrix?

This is a directive, not a question.


Write a C program to find sum of 3 matrices?

matrix