2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Обращение матрицы
Сообщение09.05.2007, 11:02 


09/05/07
6
Уважаемые мастера, у меня проблема. Нужно в С написать программу, которая бы обращала матрицу, тоесть для заданной матрицы NхN, вычисляла обратную ей.

Может у кого то завалялся дома старый код или есть алгоритмические идеи, поделитесь пожалуйста.

И так же если у кого есть функция вычисления детерминанта(определителя матрицы), или алгоритм

 Профиль  
                  
 
 
Сообщение09.05.2007, 14:39 


24/05/06
72
Вычисление детерминанта матрицы А: с помощью элементарных преобразований приведем А к треугольному виду (на главной диагонали будут стоять какие-то числа, а ниже главной диагонали будут стоять нули), тогда определитель матрицы А будет равен произведению элементов стоящих на главной диагонали.
Что касается обратной матрицы, то зная как вычислить определитель матрицы, далее остается все это только написать.

 Профиль  
                  
 
 
Сообщение09.05.2007, 16:25 


09/05/07
6
Какие именно элементарные преобразования и есть ли код на них?

 Профиль  
                  
 
 Ссылка на одну (любимую? мне) книгу
Сообщение09.05.2007, 20:25 


03/09/05
217
Bulgaria
Тема Вашего задания в принципе - большое море.

Мне ввиду ряда обстоятельств и ситуаций больше всего нравиться следующая книга, которая думаю может Вам помочь, хотя и, как обычно бывает, она не содержит прямой ответ, чтобы просто списали бы.

Но если сможете ознакомиться, она, по моему, позволить Вам сделать работу. И еще откроет перед Вами поле для многих работ.

Дж. Форсайт, К.Молер Численное решение систем линейных алгебраических уравнений, Изд. "Мир", Москва 1969

В ней есть параграфы: Обращение матриц и Вычисление определителя (детерминанта).
Есть программы на АЛГОЛЕ (и на ФОРТРАНЕ и ПЛ1).

И многое другое.

 Профиль  
                  
 
 
Сообщение09.05.2007, 20:30 


24/05/06
72
Элементарными преобразованиями матрицы наз-ся преобразования:
1. Перестановка любых двух строк матрицы(при этом преобразовании определитель меняет знак на противоположный)
2. Прибавление s-той строки матрицы к t- той строки умноженной на число а.
Пример:
1 2
3 4
Умножим первую строку на -3 и прибавим ко второй. Получим:
1 2
0 -2
Произведение элементов, стоящих на гл. диагонали = -2. Это и есть определитель исходной матрицы.
Кода этих преобразований у меня нет.
Более подробно о методе приведения матрицы к треугольному виду можно прочитать , например, в книге А.И. Кострикин "Введение в алгебру".

 Профиль  
                  
 
 
Сообщение23.10.2007, 05:52 


23/10/07
10
код алгоритма обращения матриц есть в LAPACK, называется dgetri (http://www.netlib.org/lapack/double/dgetri.f). Работает через разложение на треугольные множители. Там же есть более быстрые варианты для специальных матриц --- положительно определённых, неопределённых, треугольных.

Если нужно на С, то можно заглянуть в CLAPACK, но он менее читабельный --- это автоматический перевод с фортрана.

Если нужна работающая версия, можно взять реализацию LAPACK в Intel MKL, AMD ACML и иже с ними.

из литературы посоветую более современные J. Demmel, Applied Numerical Linear Algebra как учебник и Golub, Van Loan, Matrix Computations как настольную книгу по предмету.

 Профиль  
                  
 
 
Сообщение07.12.2007, 15:35 


05/08/07

194
vasionok писал(а):
код алгоритма обращения матриц есть в LAPACK, называется dgetri (http://www.netlib.org/lapack/double/dgetri.f). Работает через разложение на треугольные множители. Там же есть более быстрые варианты для специальных матриц --- положительно определённых, неопределённых, треугольных...

Все здесь указанные и не только (например, сингулярный анализ) алгоритмы для увеличения скорости вычислений (почти на порядок) используют блочные методы обработки м-ц, что требует привлечения качественного алгоритма перемножения матриц. Теперь разрыв в скоростях работы моего алгоритма перемножения матриц и dgemm Intel MKL достигает более 40% (для IA32). См. мою страницу, посвященную Core 2 Duo для IA32 (второй пункт).

 Профиль  
                  
 
 
Сообщение09.05.2008, 14:05 


09/05/08
1
Можно попробовать метод Левеье-Фаддеева.Лично я решал эту задачу так.

 Профиль  
                  
 
 
Сообщение09.05.2008, 15:32 


05/08/07

194
Ghosty писал(а):
Можно попробовать метод Левеье-Фаддеева.Лично я решал эту задачу так.

Леверье-Фаддеева

 Профиль  
                  
 
 Re: Обращение матрицы
Сообщение09.05.2008, 18:32 


08/05/08
583
Nt.Mag1steR писал(а):
Уважаемые мастера, у меня проблема. Нужно в С написать программу, которая бы обращала матрицу, тоесть для заданной матрицы NхN, вычисляла обратную ей.

Может у кого то завалялся дома старый код или есть алгоритмические идеи, поделитесь пожалуйста.

И так же если у кого есть функция вычисления детерминанта(определителя матрицы), или алгоритм

Бррр.. Всегда такую задачу решал так:
справа к исходной матрице дописывал единичную (получал матрицу n на 2n). Преобразованиями (перестановка cтрок, умножение строки на константу, прибавление к строке другой строки умноженной на константу) приводил левую часть к единичной. После чего то, что получалось в правой части (в той, которая изначально была единичной) - обратная

 Профиль  
                  
 
 Re: Обращение матрицы
Сообщение17.05.2008, 15:54 


14/09/07
51
СПб
ET писал(а):
Бррр.. Всегда такую задачу решал так:
справа к исходной матрице дописывал единичную (получал матрицу n на 2n). Преобразованиями (перестановка cтрок, умножение строки на константу, прибавление к строке другой строки умноженной на константу) приводил левую часть к единичной. После чего то, что получалось в правой части (в той, которая изначально была единичной) - обратная

Автору темы: это называется прямой ход метода Гаусса, если будете в Интернете материал искать.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

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



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

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


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

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