من خیلی با تاپیک آشنایی ندارم اگر برنامه تکراریه میتونید حذفش کنید

محاسبه ماتریس معکوس n*n به زبان سی ++
بسیار مفید برای تمرین با کار کردن با آرایه های داینامیک دو بعدی



#include <iostream>
using namespace std;
double determinant( double** matrix, int size);
int adjoint(double** matrix, double** temp, int row, int col, int size);
void inversion(double **matrix, int size, double **inverse);
int negative = 0 ;

///////////////////////////// Main Methode \\\\\\\\\\\\\\\\\\\\\\\\\\\

int main (){

int size ;
cout << "size: " <<endl ;
cin>>size;
double ** matrix = new double* [size];
for (int i=0 ; i<size ; i++ )
matrix[i] = new double [size];

for (int i=0 ; i<size ; i ++){
for (int j=0 ; j<size ; j++){
cout << "matrix[" <<i << "][" <<j<<"]:" ;
cin >> matrix [i][j];
}
}

double ** res = new double* [size];
for (int i=0 ; i<size ; i++ )
res[i] = new double [size];

inversion (matrix , size , res) ;

if (negative == 1 )
cout << "No Inverse " <<endl;
else {
for (int i=0 ; i<size ; i ++){
for (int j=0 ; j<size ; j++){
cout << res [i][j] <<" ";
}
cout <<endl ;
}

}
for(int i=0;i<size;i++)
delete [] matrix[i];
delete [] matrix;

for(int i=0;i<size;i++)
delete [] res[i];
delete [] res;
return 0 ;
}

///////////////////////////// Inversion Methode \\\\\\\\\\\\\\\\\\\\\\\\\\\

void inversion(double **matrix, int size, double **inverse)
{

if (determinant(matrix,size) ==0 ){
negative = 1 ;
return ;
}

double det = 1.0 / determinant(matrix,size);
double *temp = new double[(size-1)*(size-1)];
double ** temp2 = new double*[size-1];
for(int i=0;i<size-1;i++)
temp2[i] = temp+(i*(size-1));

for(int j=0;j<size;j++)
{
for(int i=0;i<size;i++)
{
adjoint(matrix,temp2,j,i,size);
inverse[i][j] = det*determinant(temp2,size-1);
if( (i+j)%2 == 1)
inverse[i][j] = -inverse[i][j];
}
}
delete [] temp;
delete [] temp2;
}

///////////////////////////// Determinant Methode \\\\\\\\\\\\\\\\\\\\\\\\\\\

double determinant( double** matrix, int size){
double sum =0 ;
int k ;

if( size == 1 )
return matrix[0][0];

double ** temp ;
temp = new double* [size-1];
for(int i=0; i<size-1;i++)
temp[i] = new double [size - 1];

for(int i = 0; i < size; i++ )
{
adjoint( matrix, temp, 0, i , size);
if (i%2 == 1 )
k = -1 ;
else
k = 1;

sum += k * matrix[0][i] * determinant (temp,size-1);
}
for(int i=0;i<size-1;i++)
delete [] temp[i];
delete [] temp;
return sum;
}

///////////////////////////// Adjoint Methode \\\\\\\\\\\\\\\\\\\\\\\\\\\

int adjoint(double** matrix, double** temp, int row, int col, int size){

int colCount=0,rowCount=0;
for(int i = 0; i < size; i++ )
{
if( i != row )
{
colCount = 0;
for(int j = 0; j < size; j++ )
{ if( j != col )
{
temp [rowCount][colCount] = matrix[i][j];
colCount++;
}
}
rowCount++;
}
}
return 1;
}

منبع