Salve a tutti
Stavo scrivendo un programma per calcolare la matrice inversa di una matrice quadrata di qualsiasi ordine e avevo un paio di dubbi/problemi.
Spiego brevemente il funzionamento generale del programma:
Viene chiesto all'utente di inserire l'ordine della matrice e dunque viene creata una matrice di tale ordine (M) che viene poi inizializzata tramite una serie di cout e cin.
Viene poi creata un'altra matrice (m) con lo stesso numero di righe ma doppio numero di colonne. Nella prima metà delle colonne verrà inserita la matrice creata in precedenza (M) mentre nella seconda metà viene inserità la matrice identità.
Quindi tramite eliminazione di gauss (sopra e sotto la diagonale) e tramite la divisione per i pivot ottengo la mia matrice inversa. Ci sono un paio di problemi però:
1) prima di tutto come faccio a deallocare completamente tutto lo spazio in memoria occupato ? devo distruggere ad uno ad uno tutti i puntatori dinamici o c'è un modo per liberare la memoria occupata direttamente ?
2) quando faccio l'eliminazione di gauss sotto la diagonale (vedere sui commenti al codice) metto l'if(m[i][i]=0) per dire che se c'è un pivot che è 0 voglio che questa riga si sposti verso il basso e la riga sottostante salga verso sopra in modo da avere sempre in diagonale elementi non nulli. L'errore riscontrato è una serie di nan e inf . La parte di codice incriminato è
codice:
double *tmp;
tmp=new double[2*o];
for(int j=0;j<o-1;j++)
{
for(int i=j+1;i<o;i++)
{
if(m[i][j]!=0)
{
double mol=m[i][j]/m[j][j];
for(int k=0;k<2*o;k++)
{
tmp[k]=mol*m[j][k];
};
for(int k=0;k<2*o;k++)
{
m[i][k]-=tmp[k];
};
}
if(m[i][i]=0)
{
double *tmp2;
double *tmp3;
tmp2= new double[2*o];
tmp3= new double[2*o];
for(int k=0; k<2*o; k++) {tmp2[k]=m[i][k]; tmp3[k]=m[i+1][k];}
for(int k=0; k<2*o; k++) {m[i][k]=tmp3[k]; m[i+1][k]=tmp2[k];}
}
}
}
Spero di non essere stato eccessivo nella richiesta !
Grazie anticipatamente
PS se serve tutto il codice lo posso postare .. è che sono 150 righe quindi non so quanto possa tornare comodo. Sono nelle vostre mani