Invertire una matrice

di il
2 risposte

Invertire una matrice

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];
        }

   
}

2 Risposte

  • Re: Invertire una matrice

    
    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];
    
    che succede se nella matrice_da_invertire c'è lo zero? Ecco che hai raggiunto una divisione per zero.
  • Re: Invertire una matrice

    Ok, penso di aver capito.. ma la soluzione al problema?
Devi accedere o registrarti per scrivere nel forum
2 risposte