Здравствуйте. У меня написана программа по поиску обратной матрицы с помощью присоединенной единичной матрицы. Программа работает хорошо , только вот на матрице Гильберта при размере 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;
}