Собственный определитель разреженной матрицы равен нулю - PullRequest
0 голосов
/ 20 декабря 2018

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

Чтобы вычислить определитель матрицы, я строю решатель sparseLU для каждого блока матрицы, который затем может дать мнеопределитель матрицы.Но, начиная с определенного измерения (около 130 * 130), я получаю результат, что все детерминанты равны 0. Это не какое-то особое измерение в моей задаче (матрица имеет блоки 32 * 32), поэтому я считаю, что эта проблема связанак некоторому алгоритму усечения, применяемому Эйгеном, когда детерминанты просто опускаются ниже некоторых порогов.

Мой поиск такого механизма не привел к приличным результатам.Моя матрица имеет размеры около 16k * 16k, и все ненулевые элементы находятся на 96 элементах рядом с диагональю.

Реализован ли какой-либо механизм усечения в Eigen, и могу ли я каким-то образом контролировать его пороги?

1 Ответ

0 голосов
/ 20 декабря 2018

Это очень вероятно из-за недостаточного значения, т. Е. Определитель рассчитывается как произведение множества чисел, меньших 1.0.Если вы вычислите произведение 130 значений вокруг 0.5, вы окажетесь у границы того, что может быть представлено с плавающей точкой одинарной точности.

Вы можете использовать методы logAbsDeterminant и signDeterminant, чтобы получить значимые результаты.

...