2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Уменьшить невязку
Сообщение18.05.2015, 11:42 
Аватара пользователя
Здравствуйте. У меня написана программа по поиску обратной матрицы с помощью присоединенной единичной матрицы. Программа работает хорошо , только вот на матрице Гильберта при размере 12 , невязка равняется 1.7 , а нужно , чтобы она была меньше единице. Невязка равняется норме ( максимальная сумма по столбцам) от матрицы $(AA^{-1} - E )$. Пробовал перемножать матрицы в другом порядке. Пробовал считать норму по другому ( максимальная сумма по срокам). Невязка меньше не становится. Привожу код функции , которая находит обратную матрицу:
Код:
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;
}

 
 
 
 Re: Уменьшить невязку
Сообщение18.05.2015, 13:34 
Странные, имхо, попытки. Матрица Гильберта — стандартный тест на поведение алгоритмов с плохообусловленными матрицами. Если ваша программа плохо с такими работает, естественным было б повышать точность (действительные числа многократной точности; рациональные числа; рациональные числа многократной точности; итерационные алгоритмы), а не манипулировать с понятием нормы. Если не хочется переписывать программу, возьмите за норму, скажем, одну сотую любой из норм — как понимаю, аксиомам нормы такая функция вполне себе будет удовлетворять.

 
 
 
 Re: Уменьшить невязку
Сообщение18.05.2015, 13:42 
Аватара пользователя
Лучше алгоритм менять - а то он какой-то "прямлинейно-плохой". Кажется, он накроется на матрице $$\begin{pmatrix}
1 & 0 & 0\\
0 & 0 & 1\\
0 & 1 & 0
\end{pmatrix}$$

 
 
 
 Re: Уменьшить невязку
Сообщение18.05.2015, 19:08 
Аватара пользователя
iifat При манипулирование с нормой и с перестановкой умножения , норма уменьшилась с 3,5 до 1,7 .
Geen Предполагается, что если на диагонали стоит ноль , то метод не применим.

 
 
 
 Re: Уменьшить невязку
Сообщение18.05.2015, 20:32 
Аватара пользователя
fiztech
fiztech в сообщении #1016868 писал(а):
При манипулирование с нормой и с перестановкой умножения , норма уменьшилась с 3,5 до 1,7 .

И что с того? Какие бывают погрешности, от чего они зависят?

 
 
 
 Re: Уменьшить невязку
Сообщение19.05.2015, 20:26 
Аватара пользователя
Всем спасибо , разобрался.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group