2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2, 3  След.
 
 Нахождение обратной матрицы
Сообщение22.06.2007, 03:12 
Аватара пользователя


20/06/07
179
Существуют ли алгоритмы нахождения обратной матрицы, дающие точный результат, или это недостижимо в принципе?

 Профиль  
                  
 
 
Сообщение22.06.2007, 03:36 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Алгоритм Гаусса. А с чего Вы взяли, что результат всегда неточный?! Если у Вас точные данные, и Вы ведете точные вычисления, то Вы получите точный ответ (примером тому — системы компьютерной алгебры). Неточный результат дают итеративные методы.

 Профиль  
                  
 
 
Сообщение22.06.2007, 03:51 
Аватара пользователя


20/06/07
179
А ограничения у метода имеются?

 Профиль  
                  
 
 
Сообщение22.06.2007, 17:04 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Да. Матрица не должна быть вырожденной.

Кроме того, я подозреваю, это не самый эффективный метод.

 Профиль  
                  
 
 
Сообщение22.06.2007, 23:46 
Аватара пользователя


20/06/07
179
Но у меня в расчетах практически всегда использовались вырожденные матрицы. Для справки - я пробовал обучать нечеткую модель методом Левенберга-Марквардта, так вот, там требуется строить якобиан - по сути матрицу производных, а затем находить обратную ей матрицу. Гаусс не сработал. Пытался для эксперимента найти обратную матрицу в Excel - безрезультатно.
Поэтому и спрашиваю, какие есть эффективные средства нахождения обратной матрицы?

 Профиль  
                  
 
 
Сообщение23.06.2007, 00:23 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Простите, Вы просили не эффективные, а точные методы. Если у Вас небольшая размерность, можете выложить (здесь или на файлообменнике), попробуем понять.

Посмотрите, кстати, обусловленность матриц. И методы уточнения обратной матрицы (самый простой выглядит примерно так: пусть $B$ — обратная матрица, полученная численно. $A B = E +\varepsilon$. Тогда мы можем попытаться улучшить обратную матрицу, умножив ее на $ E - \varepsilon $: $B_1 = B(1-\varepsilon)$. Мы можем продолжать этот процесс до тех пор, пока норма невязки уменьшается).

 Профиль  
                  
 
 
Сообщение23.06.2007, 19:19 
Заслуженный участник


15/05/05
3445
USA
artful7 писал(а):
Но у меня в расчетах практически всегда использовались вырожденные матрицы. ... Поэтому и спрашиваю, какие есть эффективные средства нахождения обратной матрицы?
В первоначальном посте Вы забыли указать, что Ваши матрицы близки к вырожденным. А для них используются специальные методы. Попробуйте, например, метод псевдообращения (обращение Пенроуза).
1) Алберт А. Регрессия, псевдоинверсия, рекуррентное оценивание. 1977
2) Голуб Дж., Ван Лоун Ч. Матричные вычисления. 1999 (раздел 5.5.4)

 Профиль  
                  
 
 
Сообщение28.06.2007, 15:10 


15/01/07
19
У меня необратимые матрицы обращаются. http://www.drobotenko.com/code_rus.html - здесь в примерах решается СЛАУ для вырожденноц матрицы. Обращение аналогично. СЛАУ для вырожденной использовал. В обращении есть коды для этого случая, но пока не понадобилось.

Естественно ообращение на некотором подпространстве происходит :D

 Профиль  
                  
 
 
Сообщение28.06.2007, 16:41 
Аватара пользователя


20/06/07
179
По описанию выглядит интригующе, т.к. в некоторых случаях обращение матриц - это проблема с "большой буквы".
В Си не силен, поэтому у меня просьба: можно ли обобщенный алгоритм увидеть (мне в ЛС или на емайл), чтобы на Паскале или VB сварганить программу (Ваши авторские права нарушаться, естественно, не будут!)?

Добавлено спустя 1 минуту 43 секунды:

Кстати, метод формальных манипуляций имеет опубликованное описание или это Ваше know-how?

 Профиль  
                  
 
 
Сообщение28.06.2007, 18:11 


15/01/07
19
artful7 писал(а):
По описанию выглядит интригующе, т.к. в некоторых случаях обращение матриц - это проблема с "большой буквы".
В Си не силен, поэтому у меня просьба: можно ли обобщенный алгоритм увидеть (мне в ЛС или на емайл), чтобы на Паскале или VB сварганить программу (Ваши авторские права нарушаться, естественно, не будут!)?

Такое замечание по поводу текстов там 2 версии И в некоторых местах сложная индексация (l+k*N) вместо [i][k] Еще два массива заводятся внутренних, там индексы от 0 и может быть специальное значение -1

Цитата:
Кстати, метод формальных манипуляций имеет опубликованное описание или это Ваше know-how?

Да простая мысль, методическая. Записываем 2 матрицы исходную и 1 потом делаем преобразования одновременно над обоимя, и когда в первой получаем 1, во второй будет обратная.

Элементарные преобразования бавают левые и правые (строки-столбцы)

Теперь доказательство:
После того ка 1 получили. Эти пары умножаем на левые обратные полевому и по правому на левые просто. Потом перетаскиваем левые через правые и групируя получаем произведение исходной матрицы на результат манипуляций над единичной.

Бонус от этого тот, что можно делать операции со строками или столбцами в произвольном порядке. Перестановки и линейные операции идут какбы в обном пакете. И не нужно доказывать равносильность промежуточных систем.

Там еще для оптимизации наворочено. Левая обнуляется а единичная заполняется, вот они и обьединены в одном массиве.

Добавлено спустя 13 минут 42 секунды:

Попробую в выходные на сайте написать. В общем это универсальное доказательство правомощности произвольных методов обращения.
Еще там НЕЧИСЛА задействованы. При переписывании на другие языки, чтоб использовать частичное обращение, нужно массивы флагов-индексов в параметры засунуть.

 Профиль  
                  
 
 
Сообщение28.06.2007, 18:18 
Заслуженный участник


15/05/05
3445
USA
drob писал(а):
У меня необратимые матрицы обращаются.
...Естественно ообращение на некотором подпространстве происходит :D
Для этих же целей применяется разложение по сингулярным числам (SVD - singular values decomposition).
См. например: Райнш, Уилкинсон. Справочник алгоритмов на языке АЛГОЛ. Линейная алгебра. 1976. Алгоритм I.10 (стр.125-139). Тут и прямоугольные матрицы обращаются.

 Профиль  
                  
 
 
Сообщение30.06.2007, 00:35 
Аватара пользователя


20/06/07
179
Цитата:
Попробую в выходные на сайте написать. В общем это универсальное доказательство правомощности произвольных методов обращения.

Обязательно сделайте это. Желательно, чтобы и алгоритм был в удобочитаемом виде. Именно алгоритм - как структура не привязанная к языку программирования.

 Профиль  
                  
 
 Re: Нахождение обратной матрицы
Сообщение26.07.2009, 12:11 


26/07/09

2
Уже все давно до Вас написано, оболочка на python - смотри сюда!
numpy
Примеры для начинающих
[ рекламные ссылки удалены ]

 !  Бан за раскрутку сторонних сайтов!

 Профиль  
                  
 
 Re: Нахождение обратной матрицы
Сообщение27.07.2009, 20:21 
Заслуженный участник
Аватара пользователя


11/03/08
9579
Москва
В Вашей постановке по крайней мере три разных задачи.

1. Точное решение задачи обращения.
2. Обращение матрицы с достаточно высокой точностью за разумное время.
3. Решение задачи, требующей обращения матрицы, если она может быть вырождена.

1. Решается переходом к арифметике рациональных чисел. Т.е. числа представляются парой "числитель/знаменатель", и все операции точные (разумеется, "метод квадратного корня" тут не пройдёт, а обычный Гаусс - вполне). Решение для невырожденной матрицы будет точным. Проблема тут в том, что числа, представляющие числитель и знаменатель, чрезвычайно быстро растут. Поэтому нужно не обычные "машинные" целые числа, а использовать арифметику многократной точности. Что весьма скверно сказывается на скорости работы. Рост промежуточных результатов зависит как от размерности матрицы, так и от её обусловленности (чем хуже обусловлена - тем больше; в вырожденном случае вообще делим на 0 и приходим к бесконечности...)
2. Если допустима небольшая погрешность (на самом деле абсолютная точность бывает нужна... Почти никогда не бывает), то хорошим решением может быть использование сингулярного разложения. По времени оно в 3-5 раз хуже Гаусса, что уже приемлемо практически.
Более "грубое" решение получается с использованием регуляризации. Например, прибавляя положительную константу к диагонали матрицы. См. Тихонова и пр.
3. Если в задаче оказывается, что решение требует обращения матрицы, а она вырождена, то целесообразно использовать псевдообращение. Для чего также может быть полезно сингулярное разложение, а также приёмы регуляризации. Иногда, впрочем, оказывается, что вырожденность вызвана тем, что обращаемая матрица имеет неполный ранг по построению. Например, она является произведением двух прямоугольных матриц, и её ранг равен меньшей из размерностей матриц. Тогда целесообразно выразить псевдообратную аналитически. Иногда вовсе обойдясь без численного обращения - всё сокрашается...

 Профиль  
                  
 
 Re: Нахождение обратной матрицы
Сообщение11.10.2009, 12:12 


22/09/09
275
Евгений Машеров в сообщении #231463 писал(а):
В Вашей постановке по крайней мере три разных задачи.

1. Точное решение задачи обращения.

1. Решается переходом к арифметике рациональных чисел. Т.е. числа представляются парой "числитель/знаменатель", и все операции точные (разумеется, "метод квадратного корня" тут не пройдёт, а обычный Гаусс - вполне). Решение для невырожденной матрицы будет точным. Проблема тут в том, что числа, представляющие числитель и знаменатель, чрезвычайно быстро растут. Поэтому нужно не обычные "машинные" целые числа, а использовать арифметику многократной точности. Что весьма скверно сказывается на скорости работы. Рост промежуточных результатов зависит как от размерности матрицы, так и от её обусловленности (чем хуже обусловлена - тем больше; в вырожденном случае вообще делим на 0 и приходим к бесконечности...)

В таких алгоритмах проблема роста числителя и знаменателя решается алгоритмом сокращения простых дробей. Опробовано лет 20 назад. Где-то у меня есть на Фортране.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу 1, 2, 3  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group