Buscar

8. Seja uma matriz quadrada M2X2 tem-se que a matriz de cofatores de M é  = !"#$%", !"#$%", !"#$%" , !"#$%" , &. Sabe-se que a Matriz Adjunta M dessa matriz M pode ser gerada a partir d

Prévia do material em texto

8) /*Seja uma matriz quadrada M de 2x2, tem-se que a Matriz de Cofatores de M é C = \begin{bmatrix} cofatorM_{0,0} & cofatorM_{0,1}
 \\ cofatorM_{1,0} & cofatorM_{1,1} \end{bmatrix} . Sabe-se que a Matriz Adjunta \overline{M} dessa matriz M pode ser gerada a partir
 da Matriz C^t , que é a Transposta da Matriz dos Cofatores de M . A partir da Matriz Adjunta \overline{M} , pode-se calcular a inversa
 da matriz M , denominada M^{-1} , obedecendo à seguinte operação M^{-1} = \frac{1}{det(M)} \times \overline{M} , somente se det(M) \neq 0.
A partir dessas informações, faça uma função que receba uma matriz 2x2 de double já preenchida do teclado no main() e também uma matriz 2x2 que
 receberá a Matriz Inversa (se existir). A função deve gerar a matriz inversa se for possível, retornando 1 nesse caso, ou -1 caso não for possível
 gerar a matriz inversa.*/
double determinante (int n, double matriztransp[n][n]){
 int i,j;
 double dp=1, ds=1;
 for(i=0;i<n;i++){
 for(j=0;j<n;j++){
 if(i==j){
 dp=dp*matriztransp[i][j];
 }else{
 ds=ds*matriztransp[i][j];
 }
 }
 }
 return dp-ds;
}
int cofator(int n,double matriz[n][n],int l,int c){
 int i,j;
 double cof;
 for(i=0;i<n;i++){
 for(j=0;j<n;j++){
 if(i!=l && j!=c){
 cof=matriz[i][j];
 }
 }
 }
 return cof;
}
int calculos (int n, double matriz[n][n],double matrizB[n][n]){
 int l,c;
 double det=0;
 double matrizcof[n][n];
 double matriztransp[n][n];
 for(l=0;l<n;l++){//primeiramente é necessário calcular a atriz dos cofatores
 for(c=0;c<n;c++){
 matrizcof[l][c]=(pow(-1,(l+c)))*cofator(n,matriz,l,c);
 }
 }
 for(l=0;l<n;l++){//Depois, fazer a transposta da matris dos cofatores, que é a matriz adjunta.
 for(c=0;c<n;c++){
 matriztransp[l][c]=matrizcof[c][l];
 }
 }
 det = determinante(n,matriztransp);//Calcula-se o determinande da matriz adjunta.
 if(det==0){//Caso o determinante seja zero, a matriz inversa não existe.
 return -1;
 }else{//Caso contrário, a matriz inversa pode ser gerada pela formila do dada no exercício
 for(l=0;l<2;l++){
 for(c=0;c<2;c++){
 matrizB[l][c]=(1/det)*matriztransp[l][c];
 }
 }
 return 1;
 }
}
int main()
{
 double matriz[2][2];
 double matrizB[2][2];
 int l,c;
 for(l=0;l<2;l++){
 for(c=0;c<2;c++){
 printf("Digite o elemento [%i][%i]: ", l+1,c+1);
 scanf("%lf",&matriz[l][c]);
 }
 }
 system("cls");
 if(calculos(2,matriz,matrizB)==1){
 printf("A matriz possui inversa.\n\n ");
 for(l=0;l<2;l++){
 for(c=0;c<2;c++){
 printf("%.3lf\t\t",matrizB[l][c]);
 }
 printf("\n");
 }
 }else{
 printf("A matriz nao possui inversa!!");
 }
 return 0;
}

Continue navegando