![]() |
|
|
![]()
|
|
| Mpak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 12.11.2006 Репутация: нет Всего: 7 |
Не могу догадаться КАК....
Методом обратной матрицы Методом Крамера сделал... Подайте идею Это сообщение отредактировал(а) Mpak - 19.12.2006, 15:33 -------------------- В любой откомпилированной программе есть, по крайней мере, одна ошибка... P.S. А у меня их минимум две... |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Два метода:
1) Методом Гаусса. Строишь расширенную матрицу (A|E), приводишь её слева к единичному виду. Получаешь (E|B) Матрица В- обратная для A. 2) Не знаю названия. Обратная матрица- это матрица вида ((Av)т)/(|A|) Где Av- матрица алгебраических дополнений, буква "т"- транспонирование, В знаменателе определитель исходной матрицы. Думаю, не надо рассказывать, что такое алгебраическое дополнение? -------------------- Всем добра |
|||
|
||||
| Mpak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 12.11.2006 Репутация: нет Всего: 7 |
SoWa, я это все знаю....не за даром на второй курс был переведен
Но все равно спасибо... Я не могу перевести это дело в программный код -------------------- В любой откомпилированной программе есть, по крайней мере, одна ошибка... P.S. А у меня их минимум две... |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Второй метод очень легко. Достаточно сделать код нахождения определителя. Не сложно. Руккурентно.
PS Я только на первом курсе PPS Ты на twilight??? Зареган? -------------------- Всем добра |
|||
|
||||
| Mpak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 12.11.2006 Репутация: нет Всего: 7 |
>PPS Ты на twilight??? Зареган?
Это цитата из песни Нет, а что? Есть такое? -------------------- В любой откомпилированной программе есть, по крайней мере, одна ошибка... P.S. А у меня их минимум две... |
|||
|
||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Рекурентный поиск определителя имеет экспоненциальную сложность а потому не эффективен.
-------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Есть быстрее?
-------------------- Всем добра |
|||
|
||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Да, метод приведения к единичной матрице, имеет кубическую сложность -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
-------------------- qqq |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Так. Запутались вы.
Я спросил про алгоритм вычисления определителя, более быстрый, чем рекурентный. А то, что метод Гаусса быстрее метода алгебраических дополнений я не спорил Теперь человеку в раздел "Центр помощи" Это сообщение отредактировал(а) SoWa - 19.12.2006, 20:09 -------------------- Всем добра |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
ну так метод Гаусса вполне может быть использован для вычисления определителя... Добавлено @ 03:11 кстати, тут: http://forum.vingrad.ru/topic-37776/view-all.html по-моему, есть его реализация, только для обращения матрицы если его подправить, можно попутно и определитель считать... -------------------- qqq |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Хм. Ну все равно Метод гаусса почти реккурентный:
Приводим первый столбец к базисному виду. Определитель равен прозведению единицы на минор n-1 порядка. Ищем минор далее... Хотя можно привести к диагональной единичной иатрице и все без проблемм рассчитается. Разобрались. -------------------- Всем добра |
|||
|
||||
| V.A.KeRneL |
|
||||||||
![]() Vadim A. Kazantsev ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 3.12.2006 Где: Moscow, Russia Репутация: 1 Всего: 14 |
Вот тут довольно эффективная итерационная реализация метода нахождения определителя матрицы из стандартной библиотеки Ruby (файл "matrix.rb"):
Тут обязательно надо заметить, что в комментарии приведёно неправильное значение (63) определителя матрицы Matrix[[7,6], [3,9]]. Правильное: Matrix[[7,6], [3,9]].determinant = 7*9 - 6*3 = 63 - 18 = 45. Такой результат получится, если в программе, использующий данный класс (Matrix), подключить (require) только файл "matrix.rb", без "mathn.rb". Подключение последнего решает проблемму.
Вся проблема тут, насколько я понимаю, заключается в использовании в строчке «q = a[i][k] / akk» операции [целочисленного] деления для матрицы целых чисел. Определитель матрицы вещественных (действительных) чисел всегда вычисляетя корректно, даже без подключения файлика "mathn.rb":
Вот переписал код на C для более широких масс:
З.Ы. Сорри за не самое читабельное заполнение матрицы, у меня GCC под виндой глючит... З.З.Ы. Я не очень силён в математике (пока), но мне кажется использован именно метод Гаусса, просто оптимизирован. Если я не прав, то обязательно поправьте меня, пожалуйста! Это сообщение отредактировал(а) V_A_KeRneL - 21.12.2006, 02:09 -------------------- «C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы» ---/)/)---(\.../)---(\(\ --(':'=)---(=';'=)---(=':') (")(")..)-(").--.(")-(..(")(") |
||||||||
|
|||||||||
| V.A.KeRneL |
|
|||
![]() Vadim A. Kazantsev ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 3.12.2006 Где: Moscow, Russia Репутация: 1 Всего: 14 |
А вообще, коллекцию реализаций by Johna Smith таких стандартных (классических) алгоритмов как поиск обратной матрицы любезно выложил podval вот здесь: http://forum.vingrad.ru/topic-37776/view-all.html
(В разделе Матрицы, есессно.)
Ещё обязательно стоит посмотреть «Прежде чем изобретать велосипед (алгоритмы решения многих задач)» от того же podval'а. З.Ы. Это сообщение отредактировал(а) V_A_KeRneL - 29.12.2006, 19:31 -------------------- «C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы» ---/)/)---(\.../)---(\(\ --(':'=)---(=';'=)---(=':') (")(")..)-(").--.(")-(..(")(") |
|||
|
||||
| popovda |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 9.6.2006 Где: Москва Репутация: 1 Всего: 6 |
Ребята. Вообще лучше быть осторожнее с методом Гаусса, т.к. он ведет к накоплению больших ошибок округления. А уж если говорить о поиске обратной матрицы (и определителя), то надо использовать или LU-разложение,метод вращений, метод ортогональных преобразований, или итерационные методы, которые не ведут к накоплению ошибки округления. Кстати, по LU-разложению на форуме мною была выложена методичка - можете найти. Или пользуйтесь Фортраном
antiA = .i. A; DetA = det(A); evals = eig(A); - собственные числа. evals = eig(B,evects); - собств. числа и собств. вектора. (Можно правда и из др. языков IMSL библиотеки использовать) Там алгоритмы отработаны. -------------------- С уважением, Попов Д.А. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |