![]() |
|
|
![]()
|
|
| Nookie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 4.7.2005 Где: Россия, Москва Репутация: нет Всего: нет |
Это не обычный мтод гауса, а блочный, когда рассмариваются элементы не как числа а как матрици заданного размера.
прикрепил файл, там мой отчет. Этот метод должен давать выйгриш в скорости в 6-7 раз по сравнению с обычным метдом гауса. Я написал на С++, решает, но вот толго, для больших размеров вйгрыш всего на 5 секунд... может кто подскажет как улучшить? Присоединённый файл ( Кол-во скачиваний: 52 )
a.pdf 78,56 Kb--------------------
Хочу знать все!!! |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Это ж как надо собою гордиться, чтобы ТАКОЕ количество ошибок наляпать?
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
Nookie,
1) раз у Вас блочный метод Гаусса (кажется, ещё и с выбором ведущего элемента), то нужно искать обратные матрицы к тем блокам, на которые Вы делите большую матрицу. Как Вы ищите обратные матрицы? 2)
что-то сомневаюсь. А откуда ввобще такие числа и почему нет зависимости от размерности матрицы? В любом случае, надо программу смотреть, а то так непонятно, что улучшать. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Nookie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 4.7.2005 Где: Россия, Москва Репутация: нет Всего: нет |
Я могу скинуть программу, но будет ли там что понятно для вас.
Он должен работать быстрее... Обратную матрицу я ищу по методу: не помню как он называет, но делаю так.. записываю две матрици подряд, первую привожу к единичной, а вторая тоже изменияется.. справа получается обратная матрица, по мойму метод лапласса, точно это метод Гаусса... (как-то криво написал) Насчет выйгрыша времени, нам это наш препод рассазал, думаю верить ему можно... Я протестировал программу, обратную матрицу он ищет не так долго... там мелочи, подсчитал все время, которое он считает обратные матрицы, просуммировал... получилось всего 0,5-1 секунда, с матрицей 2000*2000 и размером блока на 50*50. Больше всего занимает времени это умножение и отнятие строк.... самое интересное, ребята делают программы, которые рещают матрице 2000*2000 за 6 секунд, а у меня за 38 секунд..................... А насчет ошибок думаю это не важно. --------------------
Хочу знать все!!! |
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
Ага, прямым методом, значит. Хорошо.
Лучше, конечно, иметь дело с книжками и оценками на число умножений, зависящими от размеров матрицы. Скажем, обычный метод Гаусса - порядка n^3 / 3 (это очень много).
Я решал за это время слау с размерностями в пару десятков тысяч. Естественно, не методом Гаусса, и не очень плотные матрицы (много нулей). Ну хоть бы какие-нибудь детали показали бы. У Вас там, должно быть, какой-то формат есть? Вряд ли хороша идея иметь один большой двумерный массив для матрицы и постоянно считать отступы для добора до нужных блоков. Наверно, вы храните двумерный массив блоков или что-то такое? Вычитание делаете в позиции или кладёте результат на новое место? И вообще, все эти операции собственного производства или какой-то готовый BLAS используете? -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| Nookie |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 4.7.2005 Где: Россия, Москва Репутация: нет Всего: нет |
Попытаюсь на все ответить.
Масив такой
например, размер блока SizeBlock, чтобы обратиться к i, j блоку делаю так
В результате перехожу в i, j блок и в этом блоке в k, l элемент этого блока... вычитая сразу кладу в матрицу, то есть посчитал элемент умноженияи в том же цикле положил результат. Препод сам написал книжки, Богачев К.Ю., называется решение линейных систем, но там про блочный метод ничего не написано, там рассказывается обычные методы. вот. если вам надо, миогу эту книгу дать в электронном виде. Он же у нас ведет практикум по ЭВМ. Если хотите, могу скинуть программу, только на мыло. Не хочу в общак. Спасибо. Добавлено через 2 минуты и 28 секунд >вычитая сразу кладу в матрицу, то есть посчитал элемент умноженияи в том же цикле положил результат. результат разности.... в смысле отнял --------------------
Хочу знать все!!! |
||||
|
|||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: нет Всего: 39 |
Хм, ну вот, я бы воздержался от расчёта означенного выражения для каждого элемента блока - целых два умножения. Предлагаю хранить так : 1) двумерный массив указателей на блоки 2) каждый блок = массив элементов блока Плюс один момент : когда вам нужно перейти к следующему элементу строки или столбца, берите не индексы, а инкрементируйте указатель на текущий элемент на единицу, или, соответственно, на длину строки (сумма дешевле умножений). Я бы организовал вычитание как-то так :
А можно на Ваше посмотреть? Это сообщение отредактировал(а) marcusmae - 29.10.2007, 23:51 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Nookie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 4.7.2005 Где: Россия, Москва Репутация: нет Всего: нет |
Схожу завтра на пару, спрошу у препода, потом напишу в чем все таки дело....
--------------------
Хочу знать все!!! |
|||
|
||||
| Nookie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 4.7.2005 Где: Россия, Москва Репутация: нет Всего: нет |
Короче я сдал эту задачу, сЩитает очень хорошо, за 6.80 секунд... просто надо было оптимизировать и кое-что поправит.
Спасибо за помощь. Если надо могу кому-нибудь скинут программу. --------------------
Хочу знать все!!! |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |