Salve ragazzi,
sono alle prese con un programma dove devo semplicemente invertire una matrice.
Mi è stato consigliato dal mio professore di informatica di ridurre a scala la matrice, in modo da moltiplicare gli elementi sulla diagonale, per ottenere il determinante. Ovviamente mi occorre il determinante per invertire la matrice.
Poi avrò bisogno anche dei complementi algebrici (che non so come calcolare).
Per trovare la matrice inversa uso questa formula: 1/det*(la matrice conmposta dai complementi algebrici trasposti). DEVO farlo con questa formula perchè me lo richiede l'esercizio.
Il mio problema è che non riesco a mettere la matrice in forma diagonale, e non capisco il perchè: il terminale di ubuntu mi dice "eccezzione in virgola mobile".
Vi posto il programma che fin'ora ho scritto:
#include <iostream>
using namespace std;
int main()
{
int n,i,j;
cout<<"Quante righe e colonne vuoi nella matrice? "<<endl;
cout<<"Ricordati che si invertono solo le matrici quadrate! "<<endl;
cin>>n;
int matrice_da_invertire[n][n], matrice_invertita[n][n];
int det;
cout<<"Adesso riempi la matrice "<<endl;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
cin>>matrice_da_invertire[i][j];
}
cout<<"Questa è la matrice riempita: "<<endl;
for(int i=0; i<n; i++)
{ cout<<endl;
for(int j=0; j<n; j++)
cout<<matrice_da_invertire[i][j]<<" ";
}
cout<<endl;
//riduzione matrice a scala
j=0;
do {
for (int i=0; i<n; i++)
matrice_da_invertire[i+1][j]=matrice_da_invertire[i+1][j]+((-matrice_da_invertire[i+1][j])/matrice_da_invertire[i][i])*matrice_da_invertire[i][i];
j++;
}
while (j<n+1);
//scrittura matrice ridotta
for (int i=0; i<n; i++)
{
for (int j=0; i<n; j++)
cout<<matrice_da_invertire[i][j];
}
}