Решение СЛАУ
- From
- Evgenij Masherov (2:5020/175.2)
- To
- Ilya Rogov
- Date
- 2003-01-17T09:37:40Z
- Area
- RU.ALGORITHMS
From: "Evgenij Masherov" <EMasherow@nsi.ru>
Fri Jan 17 2003 03:01, Ilya Rogov wrote to Evgenij Masherov:
EB>>>> Нет ли у кого-нибудь хорошего алгоритма сабж(на худой конец
EB>>>> нахождения обратной матрицы). Матрица в идеале должна быть
EB>>>> приличнных размеров, поэтому и алгоритм должен быть более менее
EB>>>> шустрым.
IR>>> А кроме Гаусса ничего нету. По-крайней мере из точных методов.
IR>>> А Гаусс - n^3.
EM>> 1. Строго говоря, есть алгоритм решения со сложностью n^(LOG2(7)). Вот
EM>> только точность его падает драматически, по отзывам реализовавших
EM>> его...
IR> Буду рад узнать. Только вот откуда там 7 ?!? Да и точностью он Гаусса
IR> не переплюнет, ибо Гаусс абсолютно точен. Ведь можно ввести понятие дроби
IR> и считать отдельно числитель и знаменатель, деля одно на другое лишь в
IR> конце. Тогда погрешность от ограниченной разрядной сетки будет
IR> минимальна. Имхо, так и делается в мат. прогах.
0. Это метод Штрассена. Описан во втором томе Кнута, п.4.6.4 применительно к
умножению матриц.
Основан на итеративном применении тождества
(a b )(A -C)_( (a+d)(A+D)-(b+d)(B+D)-d(A-B)-(a-b)D (a-b)D-a(D-C) )
(c d )(-B -D)-( (d-c)A-d(A-B) (a+d)(A+D)-(a+c)(A+C)-a(D-C)-(d-c)A )
Обобщение на задачу обращения матриц можно найти у Ахо, Хопкрофт, Ульман.
1. Ну, вот у Вас задача. В которой Вам нужно обратить матрицу 1000х1000.
Операций соответственно будет 10^9. Положим, что исходно числа не более чем
трехразрядные. Тогда в выкладках у Вас будут числа порядка 10^(3*10^9) в
количестве 2*10^6...
Лично мне захочется использовать арифметику обычную, с плавающей точкой. Ну,
может, еще применю итеративное уточнение...
EM>> 3. Как правило, большие матрицы разрежены или имеют специальную
EM>> структуру. Поэтому общий алгоритм для них может быть плох.
IR> А сильно разреженную матрицу можно по Краммеру посчитать. А если есть
IR> какая-нить хитрая структура - вообще аналитически, на бумажке.
Угу. При этом все определители считая по определению определителя. Поскольку в
разреженной матрице много нулевых элементов, для большинства потребуется лишь
сравнение с нулем. И мы обойдемся всего лишь
1000!=4,02387260077093773543702433923e+2567 операциями...
Евгений Машеров АКА СанитарЖеня
--- ifmail v.2.15dev5
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)