من خیلی با تاپیک آشنایی ندارم اگر برنامه تکراریه میتونید حذفش کنید
محاسبه ماتریس معکوس 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;
}
منبع