Вычислить все собственные значения очень большой и очень разреженной матрицы смежности

13

У меня есть два графика с почти n ~ 100000 узлов каждый. На обоих графиках каждый узел связан ровно с 3 другими узлами, поэтому матрица смежности является симметричной и очень разреженной.

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

Я пробовал scipyобертки вокруг ARPACK, но это занимает слишком много времени. Я нашел несколько библиотек, но они лучше всего работают для получения подмножества самых больших / самых маленьких собственных значений. Есть ли библиотека, которая работает для симметричных разреженных матриц с, возможно, параллельной реализацией, чтобы получить все собственные значения?

мессия
источник
6
Из любопытства, зачем именно вам нужны все собственные значения? Большинство задач такого размера являются аппроксимациями даже более крупных (или даже бесконечномерных) задач, и, таким образом, собственные значения небольших задач только приближают их к той проблеме, которую действительно хочется решить. Чаще всего качество аппроксимации является хорошим только для наименьших или наибольших собственных значений, а все остальные только аппроксимируются плохо и, следовательно, не представляют особого практического интереса.
Вольфганг Бангерт
@WolfgangBangerth: (Простите, если это очевидно для вас) Проблема в физике материалов. Это связано с плотным связыванием материалов для получения зонной структуры, вибрационных и электрических свойств. Чтобы получить их, мне нужен полный спектр собственных значений. Кстати, в этом нет ничего нового, и это восходит к 70-м и 80-м годам, но так как моя система аморфна, мне нужна была очень большая система, чтобы получить хорошие результаты. Хотя большинство людей заботятся только о кристаллах, что чрезвычайно легко по сравнению с моим случаем.
Махди
2
@Mahdi: Ну, я имел в виду, что физические свойства определяются спектром некоторого оператора с частными производными. Я подозреваю (но, конечно, не знаю, потому что вы не описываете, откуда возникла проблема), что имеющаяся у вас проблема с большими матричными собственными значениями является лишь приближением к проблеме PDE. Следовательно, ваши собственные значения также будут только приблизительными.
Вольфганг Бангерт 19.09.16

Ответы:

8

Вы можете использовать сдвиг-инвертирование спектрального преобразования [1] и вычислять диапазон частот за диапазоном.

Техника также объясняется в моей статье [2]. Помимо реализации в [1], реализация доступна на C ++ в моем программном обеспечении Graphite [3] ( обновление 17 января : теперь все перенесено на версию 3 геограммы / графита ), которую я использовал для вычисления собственных функций оператора Лапласа для меш с до 1 миллиона вершин (проблема, которая похожа на вашу).

Как это устроено:

A(V,λ)A(V,1/λ)A1AA1ALLtAx=bAσIdσ(AσId)1σ

[1] http://www.mcs.anl.gov/uploads/cels/papers/P1263.pdf

[2] http://alice.loria.fr/index.php/publications.html?redirect=0&Paper=ManifoldHarmonics@2008

[3] http://alice.loria.fr/software/graphite/doc/html/

BrunoLevy
источник
Спасибо Бруно! Это выглядит очень многообещающе, я посмотрю на них!
Махди
1

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

Гил
источник