Здравствуйте. У меня написана программа по поиску обратной матрицы с помощью присоединенной единичной матрицы. Программа работает хорошо , только вот на матрице Гильберта при размере 12 , невязка равняется 1.7 , а нужно , чтобы она была меньше единице. Невязка равняется норме ( максимальная сумма по столбцам) от матрицы 

. Пробовал перемножать матрицы в другом порядке. Пробовал считать норму по другому ( максимальная сумма по срокам). Невязка меньше не становится. Привожу код функции , которая находит обратную матрицу:
Код:
int obrat(double *a, int n);
int obrat(double *a, int n)
{
    int i,j,i_1,i_2; double w=0;
    for(i=0;i<n;i++)
    {
        w=a[i*2*n+i];
        if(fabs(w)< MIL )
            return -1;
        a[i*2*n+i]=1;
        for(j=i+1;j<2*n;j++)
        {
            a[i*2*n+j]=a[i*2*n+j]/w;
        }
        for(i_1=0;i_1<n;i_1++)
        {
            if(i_1==i)
                continue;
            for(i_2=i;i_2<2*n;i_2++)
            {
                if(i_2==i)
                    w=a[i_1*2*n+i];
                a[i_1*2*n+i_2]-=a[i*2*n+i_2]*w;
            }
        }
    }
    return 0;
}