Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lourival_ECA

Matriz Inversa

Recommended Posts

Tow me matando mais ta dificer, vou recorrer a vcs, please, me ajudem... como faço para achar a inversa de uma matriz, eu tenho q desenvolver por formulas e nao posso usar funçoes prontas eu ate tentei mas ficou grande e esta dando um erro e nao consigo identificar...Para uma matriz poder ter uma inversa ela deve ter determinante diferente de 0:eu fiz assim:#include <iostream.h>#include <stdlib.h>int main(){int linha, coluna, coluna2, valor, i, j, cont, cont_repita, pivo, h, coluna3,soma, divisao, coluna4, g, ni, nj, cont_repita2, valori, valorj, det, ordem;int mat1, mat2, mat3, mat4, matriz[100, 100], veti[100], vetj[100], div;cout << "A matriz deve ser quadrada\n\n";cout << "Informe a ordem da matriz...: "; cin >> ordem;linha = ordem;coluna = ordem;coluna2= 2*coluna;coluna3=coluna+1;coluna4=coluna+(coluna-1);valori=1;valorj=1;for(i=0; i<linha; i++) {for(j=0; j<coluna; j++) {cout << "Informe o valor.["<<i<<","<<j<<"].: "; cin >> valor; matriz[i,j]=valor; } }if(ordem == 2) { for(i=0; i<linha; i++) {for(j=0; j<coluna; j++) {if(i==j) valori=matriz[i,j]*valori; else valorj=matriz[i,j]*valorj; } } det=valori-valorj;}else{ for(i=0; i<linha; i++) {for(j=0; j<coluna3; j++) {g=j-coluna; valor=matriz[i,g]; matriz[i,j]=valor; } } for(i=0; i<1; i++) {for(j=0; j<coluna; j++) { valor=1; ni=1; nj=j; cont_repita2=1; while(cont_repita2<=linha) { cont_repita2=cont_repita2+1; valor=valor*matriz[ni,nj]; ni = ni + 1; nj=nj+1; } veti[j]=valor; } } for(i=linha; i<=linha; i++) {for(j=0; j<coluna; j++) { valor=1; ni=i; nj=j; cont_repita2=linha; while (cont_repita2 - 1) { cont_repita2 = cont_repita2 -1; valor=valor*matriz[ni,nj]; ni=ni - 1; nj=nj+1; } vetj[j]=valor; } } valori=0; valorj=0; for(j=0; j<coluna; j++) { valori= veti[j]+valori; valorj= veti[j]+valorj; } det=valori - valorj; }if (det==0){ cout<<"Impossivel calcular a matriz inversa se o determinante for 0";}else{for(i=0; i<linha; i++) { for(j=0; j<coluna; j++) { if(i==j) {valor=1; }else{ valor=0;} h=j+coluna; matriz[i,h]=valor; } }cont_repita=0;cont=0; do { cont_repita=cont_repita+1; if (cont_repita > linha) { break;cont=cont+2;for(i=0; i<linha; i++) { for(j=0; j<coluna; j++) {soma =i+j; if(i==j && soma == cont) { pivo=matriz[i,j]; div=soma/2; } } }for(i=0; i<linha; i++) { for(j=0; j<coluna2; j++) { if(i!=div || j!=div) { valor=matriz[i,j]-(matriz[div,j]*matriz[i,div]/pivo); matriz[i,j]=valor; } } }for(i=0; i<linha; i++) { for(j=0; j<coluna2; j++) { if(i!=div && j==div) { valor=0; matriz[i,j]=valor; } } }for(i=0; i<linha; i++) { for(j=0; j<coluna2; j++) { if(i==div) { valor=matriz[i,j]/pivo; matriz[i,j]=valor; } } } } while ( cont_repita < linha) cout << "A Matriz inversa e...:"; for(i=0; i<linha; i++) { for(j=coluna3; j<coluna2; j++) { cout << matriz[i,j]; } } system("PAUSE"); return 0;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lourival_ECA,

 

Veja o que diz as regras do iMasters:

 

Jamais poste mensagens com títulos como: "ME AJUDE", "PELO AMOR DE DEUS", "ESTOU DESESPERADO", "URGENTE", "SOCORRO!", "HELP!", ou qualquer coisa similar. Utilize titulos curtos e claros, que condizem com sua dúvida.

Veja na íntegra: http://forum.imasters.com.br/index.php?act=Help

 

Poste títulos para seus tópicos, condizentes com o seu problema, a fim de facilitar uma futura pesquisa por outro membro!

 

O título do seu tópico será editado!

 

---------------------------------------------------------------

 

Só mais uma coisinha, nao precisa criar varios topicos com o mesmo assunto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou enviando o programa funcionando, identado, com correções de sintaxe, mas a lógica permanece a sua.

Roda, mas o resultado é a própria matriz inicial.

 

Caso você tenha conseguido mande para mim.... to precisando muito.

 

#include <cstdlib>#include <iostream>#include <stdlib.h>using namespace std;int main(int argc, char *argv[]){int linha, coluna, coluna2, valor, i, j, cont, cont_repita, pivo, h, coluna3;int soma, divisao, coluna4, g, ni, nj, cont_repita2, valori, valorj, det, ordem;int mat1, mat2, mat3, mat4, matriz[100][100], veti[100], vetj[100], div;cout << "A matriz deve ser quadrada\n\n";cout << "Informe a ordem da matriz...: "; cin >> ordem;linha = ordem;coluna = ordem;coluna2= 2*coluna;coluna3=coluna+1;coluna4=coluna+(coluna-1);valori=1;valorj=1;for(i=0; i<linha; i++){		 for(j=0; j<coluna; j++){				  cout << "Informe o valor.["<<i<<","<<j<<"].: "; cin >> valor;				  matriz[i][j]=valor;				  }// fim j		 }//fim i		 if(ordem == 2){		 for(i=0; i<linha; i++){				  for(j=0; j<coluna; j++){						   if(i==j) valori=matriz[i][j]*valori;						   else valorj=matriz[i][j]*valorj;						   }//fim j				  }//fim i				  det=valori-valorj;				  }//fim if				  else{					   for(i=0; i<linha; i++){								for(j=0; j<coluna3; j++){										 g=j-coluna;										 valor=matriz[i][g];										 matriz[i][j]=valor;										 }//fim j								}//fim i								for(i=0; i<1; i++){										 for(j=0; j<coluna; j++){												  valor=1;												  ni=1;												  nj=j;												  cont_repita2=1;												  while(cont_repita2<=linha){																			 cont_repita2=cont_repita2+1;																			 valor=valor*matriz[ni][nj];																			 ni = ni + 1;																			 nj=nj+1;																			 }//fim while												  veti[j]=valor;												  }//fim j										 }//fim i								for(i=linha; i<=linha; i++){											 for(j=0; j<coluna; j++){													  valor=1;													  ni=i;													  nj=j;													  cont_repita2=linha;													  while (cont_repita2 - 1){															cont_repita2 = cont_repita2 -1;															valor=valor*matriz[ni][nj];															ni=ni - 1;															nj=nj+1;															}//while													  vetj[j]=valor;													  }//for j											 }//for i								valori=0;								valorj=0;								for(j=0; j<coluna; j++){										 valori= veti[j]+valori;										 valorj= veti[j]+valorj;										 } //fim j								det=valori - valorj;								}//fim elseif (det==0){			cout<<"Impossivel calcular a matriz inversa se o determinante for 0";			}//fim if			else{				 for(i=0; i<linha; i++){						  for(j=0; j<coluna; j++){								   if(i==j){											valor=1;											}//fim if											else{												 valor=0;												 }//fim else											h=j+coluna;											matriz[i][h]=valor;								   }//fim j						  cont_repita=0;						  cont=0;						  do{								 cont_repita=cont_repita+1;								 if (cont_repita > linha){												 break;												 cont=cont+2;												 for(i=0; i<linha; i++){														  for(j=0; j<coluna; j++){																   soma =i+j;																   if(i==j && soma == cont){																		   pivo=matriz[i][j];																		   div=soma/2;																		   }//fim if																   }//fim j														  }//fim i												 for(i=0; i<linha; i++){														  for(j=0; j<coluna2; j++){																   if(i!=div || j!=div){																			 valor=matriz[i][j]-(matriz[div][j]*matriz[i][div]/pivo);																			 matriz[i][j]=valor;																			 }//fim if																   }//fim j														  }//fim i												 for(i=0; i<linha; i++){														  for(j=0; j<coluna2; j++){																   if(i!=div && j==div){																			 valor=0;																			 matriz[i][j]=valor;																			 }//fim if																   }//fim j														  }//fim i												 for(i=0; i<linha; i++){														  for(j=0; j<coluna2; j++){																   if(i==div){																			  valor=matriz[i][j]/pivo;																			  matriz[i][j]=valor;																			  }//fim if																   }//fim j														  }// fim i												 }//fim if								 }while(cont_repita < linha);								 			}//fim i	  			}//fim else			  cout << "A Matriz inversa e...:";for(i=0; i<linha; i++){		for(j=0; j<coluna; j++){						cout << matriz[i][j];						cout<<"\n";						}//fim j		 }//fim isystem("PAUSE"); return EXIT_SUCCESS;}//fim main

Compartilhar este post


Link para o post
Compartilhar em outros sites

Procure pelo livro "Numerical Recipes In C". É um ótimo livro sobre implementação de algoritmos de cálculo numérico na linguagem C ANSI. Ele começa trabalhando com matrizes. Um lugar que eu encontrei foi no esnips (www.esnips.com).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce pode organizar melhor esse seu programa.

 

Lembro que fiz uma função para calcular matriz inversa com recursividade.

O ponto de partida que tomei foi esse aqui:

 

http://www.vivaolinux.com.br/scripts/verSc....php?codigo=359

 

 

Organize uma função que calcule o determinante e uma pra calcular a matriz inversa e seja específico na sua dúvida,

selecione o trecho do programa que não está correto.

 

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.