高斯消元法求逆矩阵 matlab,高斯消元法求逆矩阵

有多组测试数据。每组测试数据先输入一个整数n,表示方阵的阶。然后下面输入n阶方阵。输出其逆矩阵。若无逆矩阵,则输出No inverse matrix。

#include

#include

#include

using namespace std;

const double eps = 1e-6;

bool is_zero( const double num )

{

return fabs(num) < eps;

}

void create( double ** & matrix, const int n )

{

matrix = new double* [n];

for ( int i = 0; i < n; ++i )

matrix[i] = new double[n];

}

void input ( double ** matrix, const int n )

{

for ( int i = 0; i < n; ++i )

{

for ( int j = 0; j < n; ++ j )

cin >> matrix[i][j];

}

}

bool inverse ( double ** matrix1, double ** matrix2, const int n )

{

int i, j;

for ( i = 0; i < n; ++ i )

{

for ( j = 0; j < n; ++ j )

{

if ( i == j )

matrix2[i][j] = 1;

else

matrix2[i][j] = 0;

}

}

for ( i = 0; i < n; ++i )

{

int rowmaxpos = i;

for ( j = i + 1; j < n; ++j )

{

if ( matrix1[i][j] > matrix1[i][rowmaxpos] )

rowmaxpos = j;

}

for ( j = i; j < n; ++ j )

{

swap( matrix1[j][rowmaxpos], matrix1[j][i]);

swap( matrix2[j][rowmaxpos], matrix2[j][i]);

}

if ( !is_zero(matrix1[i][i]) )

{

int divisor = matrix1[i][i];

for ( j = i; j < n; ++ j )

{

matrix1[i][j] /= divisor;

matrix2[i][j] /= divisor;

}

for ( j = i + 1; j < n; ++ j )

{

int multiple = matrix1[j][i];

for ( int k = i; k < n; ++ k )

{

matrix1[i][j] -= matrix1[i][k] * multiple;

matrix2[i][j] -= matrix2[i][k] * multiple;

}

}

}

else

return false;

}

return true;

}

void output( double ** matrix, const int n )

{

for ( int i = 0; i < n; ++i )

{

for ( int j = 0; j < n; ++ j )

cout << matrix[i][j] << ' ';

cout<

}

}

void destroy( double ** matrix, const int n )

{

for ( int i = 0; i < n; ++ i )

delete [] matrix[i];

delete [] matrix;

}

int main()

{

int n;

double ** matrix1;

double ** matrix2;

while ( cin >> n )

{

create( matrix1, n );

create( matrix2, n );

input( matrix1, n);

if ( inverse(matrix1, matrix2, n) )

output( matrix2, n );

else

cout << "No inverse matrix" << endl;

destroy( matrix1, n );

destroy( matrix2, n );

}

return 0;

}

你可能感兴趣的:(高斯消元法求逆矩阵,matlab)