Можно ли использовать Lapack для вычисления собственных значений и собственных векторов больших разреженных матриц?

Если бы у меня была квадратная матрица, равная 1000 на 1000, можно было бы рассчитать собственные векторы и собственные значения для этой матрицы? И если это может длиться долго? Также, что касается матрицы размером 10 000 на 10000 или даже матрицы размером 1 000 000 на 1 000 000?

Обратите внимание, что это будут разреженные матрицы, в основном заполненные 0s (матрицы будут графиками, представляющими социальные сети). Существуют ли какие-либо специальные процедуры в Lapack для работы с разреженными матрицами? Я вижу рекомендацию Арпака. Но это позволит вычислять очень большие матрицы?

Ответ 1

LAPACK не имеет специальной поддержки, встроенной для разреженных матриц, но ARPACK делает. В зависимости от машины, на которой вы планируете запускать это, это может исключить использование LAPACK, так как вы можете исчерпать память для очень больших матриц. См. http://www.netlib.org/utk/people/JackDongarra/la-sw.html для сводки различных библиотек линейных алгебр.

Нет никакого способа дать вам значимую оценку того, как долго эти вычисления будут принимать без подробностей о том, какие матрицы вы ожидаете (симметричные будут во много раз быстрее), какой процессор вы планируете запускать, сколько памяти вы доступны и т.д.

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

Ответ 2

Если ваши матрицы разрежены, вам, вероятно, лучше использовать пакет разреженная матрица. Дополнительную информацию см. В статье StackOverflow .

Используя lapack, вы можете сделать 1000 x 1000 за пару секунд (в зависимости от вашей машины). 10000 x 10000 будет принимать в 1000 раз дольше, поскольку все алгоритмы имеют тенденцию быть O (n ^ 3).

Ответ 3

Lapack поддерживает только плотные и полосатые матрицы (без поддержки общих разреженных матриц). Поэтому, если ваша разреженная матрица не группируется (из вашего описания это звучит так, будто это будет общая разреженная матрица, обычно хранящаяся в схеме хранения сжатых строк), тогда lapack - это не то, что вы хотите использовать.

Для больших разреженных матриц Арпак будет хорошим местом для начала.