Матрицы большого размера
Необходимо найти решение системы линейных уравнений A*x=b, но выделить память под матрицу таких размеров сразу не возможно.
Необходимо найти решение системы линейных уравнений A*x=b, но выделить память под матрицу таких размеров сразу не возможно.
ИМХО один выход - База данных:)
Пошукайте различные математические методы решения систем. Память таки изменила, возможно попробовать итеративными методами. Начните с википедии.
А вообще, эта задача не для ПЭВМ с её скромными объёмами памяти и ОС.
1. Как правило, в задачах, решаемых конечно-разностным методом или методом МКЭ, бОльшая часть элементов имеют значение, равное 0. В этом случае применяются разреженные матрицы (sparse matrix). Алгоритмы для работы с такими матрицами имеется в библиотеке boost.ublas.
2. Второй вариант - это когда большая часть элементов функционально зависит от некоторого значения. Тогда можно вычислять значения таких матриц "налету", но возрастет нагрузка на процессор.
3. Если же бОльшая часть элементов являются независимыми и ненулевыми, то при таких объемах можно воспользоваться распределенными вычислениями. Сам таким вариантом матриц я не имел дело, могу только посоветовать библиотеку ScaLAPACK и заглянуть на сайт http://parallel.ru. Там имеется много информации по этому направлению.
Если использовать Embeded database, то можно получить вполне приемлемую скорость записи/считывания. Можно и миллион строк вносить в базу довольно таки быстро, главное знать как. И в этом случае стараться не пользоваться всякими тяжеловесными фрэймворками, кот. еще больше будут тормозить.
К примеру в Embeded JavaDB можно очень шустро внести мильен строк без использования хайбернейта. Скорость кстате, вполне радует. Так что не отметайте этот вариан так скоро.
К примеру в Embeded JavaDB можно очень шустро внести мильен строк без использования хайбернейта. Скорость кстате, вполне радует. Так что не отметайте этот вариан так скоро.
А вы прикидывали объем памяти для одной такой матрицы (50M x 50M)?
По моим скромным подсчетам - это десятки петабайт.
Имхо, задачи с такими размерностями решать "влоб" практически невозможно. Ну по крайней мере на сегодняшний день.
По моим скромным подсчетам - это десятки петабайт.
Имхо, задачи с такими размерностями решать "влоб" практически невозможно. Ну по крайней мере на сегодняшний день.
Ну почему же. Возможно - если у вас имеется высокопроизводительный вычислительный кластер или data center. Понятное дело, что на домашнем компьютере подобные задачи впринципе не решаются :)
Необходимо найти решение системы линейных уравнений A*x=b, но выделить память под матрицу таких размеров сразу не возможно.
Мне гораздо интересней что за задача и предметная область.
Где требуется решать системы линейных уравнений в 50 миллионов уравнений? Какая у вас математическая модель?
В рамках какой мат. дисциплины она построена и проанализирована?
Как и кем решаются подобные задачи в мире?
Распределенность, кластеры -- здесь это вторично.