![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
hello19 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 13.7.2011 Репутация: нет Всего: нет |
Есть матрица порядка 3638. Мне нужно найти обратную к ней. ( В последствии порядок матрицы будет около 100 000)
Есть код, вот только он не совсем рабочий. На маленьких матрицах порядка 3-4 он работает отлично, а вот на матрице порядка 3638 - не работает. В качестве результата выдает исходную матрицу. Помогите найти косяк. И по возможности сделать код "по-шустрее"
Сами матрицы находятся в текстовых файлах. Прикрепил и их: 1.txt - матрица порядка 4 (пробная) 2.txt - сюда записывается результат работы программы 3.txt - матрица порядка 3638 Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
|||
|
||||
Сыроежка |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 24.6.2011 Репутация: 1 Всего: 1 |
Я вам уже на другом форуме ответил, что мне не понятно следующее (цитирую по другому форуму):
template <typename T> void SetMtx(T **matr, int n); double **matr = new double * [n]; SetMtx(matr, n); Я уже в этих строчках вижу "косяк". Вопрос к вам, чему у вас равен тип T, когда вы вызываете SetMtx(matr, n);?! Точнее говоря, какой тип у параметра matr в результате инстанциации вашей функции для аргумента matr?! |
|||
|
||||
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
так легко ж проверить
http://liveworkspace.org/code/9195f30a7f23...48c9092323daecf меня смущает другое: т.е. у тебя будет матрица 100 000 x 100 000 дублей ??? посчитай, сколько это будет занимать памяти... я уже подсчитал - 10 000 000 000 * sizeof( double ) = 80 000 000 000 = 80 ГБт. а ты выделяешь 4 таких массива
это 320 ГБт памяти.... я не знаю, какое у тебя "железо", но сдаётся мне, что 320 ГБт у тебя не будет... мож я, конечно, и ошибаюсь, но IMHO сама постановка (да и реализация) задачи - неправильная. Think 'bout it ![]() -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
В свое время мне один математик (кандидат наук) рассказал, что чем больше размерность матриц, тем выше требования к точности операций (читай к количеству значащих разрядов в числе). Другими словами, чтобы результаты умножения и обращения матриц таких размеров были адекватны, необходимо оперировать с числами ЗНАЧИТЕЛЬНО большей точности, чем даже long double.
|
|||
|
||||
hello19 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 13.7.2011 Репутация: нет Всего: нет |
Как же тогда найти обратную матрицу для матрицы такого порядка?
Для меня главное скорость, а что же касается ресурсо, то их хватит и на работу вышеуказанного кода. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
hello19, смотри в сторону рациональных чисел с бесконечной точностью. Но тут уже 320 ГБ оперативной памяти не отделаешься. Кстати, у меня есть большие сомнения, что твой код в том виде, в котором он нам представлен, вообще будет адекватно работать на машинах с достаточным количеством ресурсов (если не секрет, как называется супер компьютер, к которому у тебя есть доступ?) - там используются совсем другие принципы построения программ (так как фактически они имеют не один мощный процессор с гигантским объемом ОЗУ, а тысячи обычных процессоров каждый со своей памятью обычного объема).
Это сообщение отредактировал(а) bsa - 22.7.2011, 10:08 |
|||
|
||||
Silent |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 1 Всего: 9 |
Сидел, обедал, читал любимый форум...
а потом чуть не подавился О_О иметь возможность запихнуть в ОЗУ 320Гб данных и писать такой код? уважаемый hello19, задачи матричной алгебры появились не вчера и не позавчера, их решали еще в бородатые годы, и есть же наработки, что мешает их посмотреть? Чтобы не быть голословным, пример: середина 60х, вычислительная машина М-20 (аж 20 000 операций в секунду!, 300 слов оперативной памяти!, аще круть) - и решали СЛАУ практически любого порядка (200го - за 9 минут). |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
|
|||
|
||||
newbieone |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.3.2010 Репутация: 1 Всего: 1 |
||||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Угу, у них же не было лишних 320ГБ памяти ![]() 2 ТС - обратись в раздел по алгоритмам, там быстрее скажут в какую сторону смотреть |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 4 Всего: 49 |
Это один сплошной косяк, который надо выкинуть и начать все сначала. Почитайте хотя бы Википедию, даже там можно найти описания методов обращения матриц с указанием сложности соответствующих алгоритмов. P.S. И "шедевры" вроде if(det) уберите. |
|||
|
||||
alexvs11 |
|
|||
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
надо сказать вычисление одного детерминанта зависнит надолго при таких размерностях
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |