最近做一个加密算法遇到需要计算矩阵的逆,闲着无聊,记录一下,以后免得再麻烦。
[cpp] view plaincopyprint?
#include
#include
#include
#define MAX 20
#define E 0.000000001
/**
* 计算矩阵src的模
*/
double calculate_A( double src[][MAX], int n )
{
int i,j,k,x,y;
double tmp[MAX][MAX], t;
double result = 0.0;
if( n == 1 )
{
return src[0][0];
}
for( i = 0; i = i ? k + 1 : k;
tmp[j][k] = src[x][y];
}
}
t = calculate_A( tmp, n - 1 );
if( i % 2 == 0 )
{
result += src[0][i] * t;
}
else
{
result -= src[0][i] * t;
}
}
return result;
}
/**
* 计算伴随矩阵
*/
void calculate_A_adjoint( double src[MAX][MAX], double dst[MAX][MAX], int n )
{
int i, j, k, t, x, y;
double tmp[MAX][MAX];
if( n == 1 )
{
dst[0][0] = 1;
return;
}
for( i = 0; i = i ? k + 1 : k ;
y = t >= j ? t + 1 : t;
tmp[k][t] = src[x][y];
}
}
dst[j][i] = calculate_A( tmp, n - 1 );
if( ( i + j ) % 2 == 1 )
{
dst[j][i] = -1*dst[j][i];
}
}
}
}
/**
* 得到逆矩阵
*/
int calculate_A_inverse( double src[MAX][MAX], double dst[MAX][MAX], int n )
{
double A = calculate_A( src, n );
double tmp[MAX][MAX];
int i, j;
if ( fabs( A - 0 ) 图像处理之基础---矩阵求逆实现