eu estou fazendo um codigo em c++ para calcular a matriz inversa, está tudo certo se eu colocar valores inteiros, porém quando eu coloco valores decimais em uma matriz 3x3 a função que calcula o determinante está arredondando o resultado causando um erro no resultado final, alguém sabe como resolver isso?
codigo abaixo:
#include<iostream>
#include <cmath>
#define MAX 25
using namespace std;
double cofator(double matriza[MAX][MAX], int m, int linha, int coluna);
double determinante(double matriza[MAX][MAX], int m);
int main(){
int i,j,m,a,b,n,h,w;
int l=0,c=0;
double matriza[MAX][MAX], matrizb[MAX][MAX],cofatores[MAX][MAX],inversa[MAX][MAX],transposta[MAX][MAX],det;
cout << "\t\t\t\tPROGRAMA DE CALCULO DE MATRIZ INVERSA\n\n";
cout<< "Digite a ordem da matriz quadrada: ";
cin >> m;
cout << "\n\nDigite a matriz A: \n";
for(i=0;i<m;i++){
for(j=0;j<m;j++){
cin >> matriza[i][j];
}
}
cout << "\n\nA matriz digitada foi: \n";
for(i=0;i<m;i++){
for(j=0;j<m;j++){
cout<< "\t" << matriza[i][j];
}
cout <<"\n";
}
if(m==2){
//CALCULO DO DETERMINANTE
}else{
cout<< "\n\n\t\tCALCULO DA MATRIZ INVERSA AINDA não PROGRAMADO\n\n";
}
return 0;
}
double determinante(double matriza[MAX][MAX], int m)
{
int det=0.0;
if (m == 1){
det = matriza[0][0];
}else{
for(int j=0; j<m; j++){
det = det + matriza[0][j] * cofator(matriza,m, 0, j);
}
}
return det;
}
double cofator(double matriza[MAX][MAX], int m, int linha, int coluna)
{
double submatriz[MAX][MAX];
int n=m-1;
int a=0;
int b=0;
//int j;
for (int i=0; i<m; i++){
for (int j=0; j<m; j++){
if (i !=linha && j !=coluna){
submatriz[a][b] = matriza[i][j];
b++;
if (b >= n){
a++;
b=0;
}
}
}
}
Utilizamos cookies e tecnologias semelhantes de acordo com a nossa Política de Privacidade, e ao continuar navegando, você concorda com estas condições.
Pergunta
DanteAndante
Boa Tarde
eu estou fazendo um codigo em c++ para calcular a matriz inversa, está tudo certo se eu colocar valores inteiros, porém quando eu coloco valores decimais em uma matriz 3x3 a função que calcula o determinante está arredondando o resultado causando um erro no resultado final, alguém sabe como resolver isso?
codigo abaixo:
#include<iostream>
#include <cmath>
#define MAX 25
using namespace std;
double cofator(double matriza[MAX][MAX], int m, int linha, int coluna);
double determinante(double matriza[MAX][MAX], int m);
int main(){
int i,j,m,a,b,n,h,w;
int l=0,c=0;
double matriza[MAX][MAX], matrizb[MAX][MAX],cofatores[MAX][MAX],inversa[MAX][MAX],transposta[MAX][MAX],det;
cout << "\t\t\t\tPROGRAMA DE CALCULO DE MATRIZ INVERSA\n\n";
cout<< "Digite a ordem da matriz quadrada: ";
cin >> m;
cout << "\n\nDigite a matriz A: \n";
for(i=0;i<m;i++){
for(j=0;j<m;j++){
cin >> matriza[i][j];
}
}
cout << "\n\nA matriz digitada foi: \n";
for(i=0;i<m;i++){
for(j=0;j<m;j++){
cout<< "\t" << matriza[i][j];
}
cout <<"\n";
}
if(m==2){
//CALCULO DO DETERMINANTE
det=(matriza[0][0]*matriza[1][1])-(matriza[0][1]*matriza[1][0]);
cout << "\n\n Determinante: " << det<<"\n";
if(det==0){
cout << "A MATRIZ não PODE SER INVERTIDA!!";
}else{
//calculo dos cofatores
for (h=0;h<m;h++)
for (w=0;w<m;w++){
l=0;
c=0;
//n=m-1;
for(i=0;i<m;i++)
for(j=0;j<m;j++)
if(i!=h && j!=w){
matrizb[l][c]=matriza[i][j];
if(c<(m-2))
c++;
else{
c=0;
l++;
}
}
//cout<< "Matriz B: " <<matrizb[0][0];
cofatores[h][w]=matrizb[0][0];
}
for(h=0;h<m;h++){
for(w=0;w<m;w++){
cofatores[h][w]=pow(-1,(h+w+2))*cofatores[h][w];
}
}
cout << "\n\nA matriz dos cofatores: \n";
for(h=0;h<m;h++){
for(w=0;w<m;w++){
cout<< "\t" <<cofatores[h][w];
}
cout <<"\n";
}
//TRANSPONDO A MATRIZ DOS COFATORES
for(h=0;h<m;h++){
for(w=0;w<m;w++){
transposta[w][h]=cofatores[h][w];
}
}
cout << "\n\nA matriz transposta dos cofatores: \n";
for(w=0;w<m;w++){
for(h=0;h<m;h++){
cout<< "\t" <<transposta[w][h];
}
cout <<"\n";
}
// CALCULO DA MATRIZ INVERSA
for(w=0;w<m;w++){
for(h=0;h<m;h++){
inversa[w][h]=transposta[w][h]/det;
}
}
cout << "\n\nA matriz inversa: \n";
for(w=0;w<m;w++){
for(h=0;h<m;h++){
cout<< "\t" <<inversa[w][h];
}
cout <<"\n";
}
}
}if(m==1){
matriza[0][0]=pow(matriza[0][0],-1);
cout << "\n\nA matriz inversa: \n" << matriza[0][0];
}if(m>=3){
cout << "\n\n Determinante: " <<determinante(matriza,m)<<"\n";
//cout << det;
if(determinante==0){
cout << "\n\nA MATRIZ não PODE SER INVERTIDA!!";
}else{ //calculo dos cofatores
for(i=0;i<m;i++){
for(j=0;j<m;j++){
cofatores[i][j] = cofator(matriza,m,i,j);
}
cout << "\n";
}
cout << "matriz dos cofatores: \n";
for(i=0;i<m;i++){
for(j=0;j<m;j++){
//cout<<"\t" << cofator(matriza,m,i,j);
cout << "\t" << cofatores[i][j];
}
cout << "\n";
}
//TRANSPONDO A MATRIZ DOS COFATORES
for(h=0;h<m;h++){
for(w=0;w<m;w++){
transposta[w][h]=cofatores[h][w];
}
}
cout << "\n\nA matriz transposta dos cofatores: \n";
for(w=0;w<m;w++){
for(h=0;h<m;h++){
cout<< "\t" <<transposta[w][h];
}
cout <<"\n";
}
// CALCULO DA MATRIZ INVERSA
for(w=0;w<m;w++){
for(h=0;h<m;h++){
inversa[w][h]=transposta[w][h]/determinante(matriza,m);
}
}
cout << "\n\nMatriz inversa: \n";
for(w=0;w<m;w++){
for(h=0;h<m;h++){
cout << "\t" << inversa[w][h];
}
cout << "\n";
}
}
}else{
cout<< "\n\n\t\tCALCULO DA MATRIZ INVERSA AINDA não PROGRAMADO\n\n";
}
return 0;
}
double determinante(double matriza[MAX][MAX], int m)
{
int det=0.0;
if (m == 1){
det = matriza[0][0];
}else{
for(int j=0; j<m; j++){
det = det + matriza[0][j] * cofator(matriza,m, 0, j);
}
}
return det;
}
double cofator(double matriza[MAX][MAX], int m, int linha, int coluna)
{
double submatriz[MAX][MAX];
int n=m-1;
int a=0;
int b=0;
//int j;
for (int i=0; i<m; i++){
for (int j=0; j<m; j++){
if (i !=linha && j !=coluna){
submatriz[a][b] = matriza[i][j];
b++;
if (b >= n){
a++;
b=0;
}
}
}
}
return pow(-1,linha+coluna)*determinante(submatriz, n);
}
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.