各位帮忙看下这个求逆矩阵函数是用什么方法求的
之前的同学写的一个求逆矩阵的,看来看去看不出是哪种方法,各位帮忙看下是什么计算方法吧
//求逆矩阵
public int inv(ref MAT a)
{
int i, j, k;
int[] isM = new int[MAXN];
int[] js = new int[MAXN];
double t;
if (a.n != a.m)
return 0;
for (k = 0; k < a.n; k++)
{
for (t = 0, i = k; i < a.n; i++)
for (j = k; j < a.n; j++)
if (fabs(a.data[i, j]) > t)
{
isM[k] = i;
js[k] = j;
t = fabs(a.data[i, j]);
}
if (zero(t))
return 0;
if (isM[k] != k)
for (j = 0; j < a.n; j++)
{
t = a.data[k, j];
a.data[k, j] = a.data[isM[k], j];
a.data[isM[k], j] = t;
}
if (js[k] != k)
for (i = 0; i < a.n; i++)
{
t = a.data[i, k];
a.data[i, k] = a.data[i, js[k]];
a.data[i, js[k]] = t;
}
a.data[k, k] = 1 / a.data[k, k];
for (j = 0; j < a.n; j++)
if (j != k)
a.data[k, j] *= a.data[k, k];
for (i = 0; i < a.n; i++)
if (i != k)
for (j = 0; j < a.n; j++)
if (j != k)
a.data[i, j] -= a.data[i, k] * a.data[k, j];
for (i = 0; i < a.n; i++)
if (i != k)
a.data[i, k] *= -a.data[k, k];
}
for (k = a.n - 1; k >= 0; k--)
{
for (j = 0; j < a.n; j++)
if (js[k] != k)
{
t = a.data[k, j];
a.data[k, j] = a.data[js[k], j];
a.data[js[k], j] = t;
}
for (i = 0; i < a.n; i++)
if (isM[k] != k)
{
t = a.data[i, k];
a.data[i, k] = a.data[i, isM[k]];
a.data[i, isM[k]] = t;
}
}
return 1;
}