Bom uma matriz é dita anti-simétrica se e somente se , ela for igual a sua transposta com sinal trocado, ou seja M=-Mt.
Sendo assim apliquei uma função para obter a transposta e comparei com a matriz original a com a posição da matriz transposta *-1 para fazer o teste da anti-simetria, acredito quye resolva, mas não testei uma matriz sabidamente anti-simétrica, mas se tiver errado é algum detalhe.
Espero que ajude.
#include <stdlib.h>
#include <stdio.h>
#include<math.h>
#include<time.h>
#define M 9
#define N 9
void preencheMatriz(int mat[M][N], int m, int n) {
int randon;
for (int i = 0; i < m; i++) {
for (int k = 0; k < n; k++) {
mat[i][k] = (rand() % ((15 - 1) + 1)) + 1;
}
}
}
//----------------------------------
void matriz_transposta(int matriz[M][N], int m, int n) {
int i, j, aux;
for (i = 0; i < M; i++) {
for (j = i + 1; j < N; j++) {
if (j != i) {
aux = matriz[i][j];
matriz[i][j] = matriz[j][i];
matriz[j][i] = aux;
}
}
}
}
//----------------------------------
char isAntSimetrica(int matA[M][N], int matB[M][N], int m, int n) {
char flag = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
flag+= (matA[i][j] = (matB[i][j])*(-1)) ? 0 : 1;
}
}
return (flag==0);
}
//----------------------------------
void exibeMatriz(int mat[M][N], int m, int n) {
printf("\nMatriz\n");
for (int i = 0; i < m; i++) {
printf("\n");
for (int j = 0; j < n; j++) {
printf("[%4d] ", mat[i][j]);
}
}
printf("\n");
}
//------
void copyMat(int matA[M][N], int matB[M][N], int m, int n) {
int i = 0, j = 0;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
matB[i][j] = matA[i][j];
}
}
}
int main(int argc, char** argv) {
int cont = 0, m = 3, n = 3;
int matriz[M][N], matB[M][N], matC[M][N];
preencheMatriz(matriz, m, n);
exibeMatriz(matriz, m, n);
copyMat(matriz,matB,m,n);
matriz_transposta(matriz, m, n);
exibeMatriz(matriz, m, n);
printf("Esta matriz é [%s]\n", (isAntSimetrica(matB,matriz,m,n))?"anti-simétrica":"simetrica");
}
Podemos apelar ao conceito de traço de matriz e o custo computacional não será tão alto. O traço \(tr(A)\) é definido como a soma dos elementos da diagonal principal da matriz \(A\). Toda matriz antissimétrica tem traço nulo. Assim:
LER MATRIZ A (elementos \(a_{ij}\))
DEFINIR N = DIMENSÃO DA MATRIZ A
DEFINIR TR = 0
PARA 0 < K < N + 1
TR = TR + \(a_{KK}\)
SE TR = 0
MOSTRAR 'A matriz é antissimétrica'
SENÃO
MOSTRAR 'A matriz não é antissimétrica'
Para escrever sua resposta aqui, entre ou crie uma conta
Geometria Analítica e Álgebra Linear
•ESTÁCIO
Compartilhar