Fgolm писал(а):
А вопрос в основном состоит в том, как интерпретировать понятие вырожденности матрицы с т.з. вычислений на ЭВМ.
Матрица представлена некоторым двоичным кодом, и хотелось бы найти, или узнать о несуществовании такой код, который умноженный на исходный код давал бы единичную матрицу.
Как мы знаем x86 обладает очень точной математикой. Результат всех операций отличается не больше чем на пол разряда, причем в сторону, которая оговорена стандартом. Если взять числа, помножить, поделить, вычесть или корень возвести в квадрат и т.п., то получим 0 примерно в половине случаев. А вот матрицами это не так. Если помножить на обратную матрицу, то вместо единичной матрицы мы получим значения где-то

в тех местах где должен быть 0, а 0 будет появляться в исключительных случаях. И никакие итерации здесь не помогают. Наверно это и есть половина какого-нибудь 50-го разряда.
Интересно рассмотреть умножение строки на

, в том пределе насколько допускает порядок. Вроде бы ничего не изменилось, деление на

восстанавливается исходное, но на выбор ведущего элемента это скажется.
Значит, рассматривать матрицу как двоичный код не совсем правомерено и нужно исходить из физики. Предполагать, что все элементы имеют одну физическую размерность, и епсилон это величина заведомо меньше точности исходных данных. У меня есть простой алгоритм обращения матриц, который и всем рекомендую.
http://www.drobotenko.com/code_rus.html В общих чертах код выглядит так
Код:
for(k=0;k<N;k++)
for(i=0;i<N;i++)
for(j=0;j<N;j++)
A[i][j]-=A[k][j]*vvv;
В тройном цикле из строки вычитается другая строка умноженная на число меньше 1. Еслибы это vvv было точное, то можно былобы говорить что точность N*
исходная_точность , но vvv это отношение соответствующего к ведущему и если они малы, то vvv просто теряет смысл. Я попутно вычисляю детерминант. Интересно что если взять матрицу 300х300 близкую к диагональной и диагональные элементы будут значения около 10 (или 0.1) , то матрица прекрасно обратится, но детерминант выйдет за диапазон чисел с двойной точностью. Значит детерминант не может служить критерием вырожденности напрямую