Baixe o app para aproveitar ainda mais
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; }
Compartilhar