Разреженный линейный решатель для многих правых частей

12

Мне нужно решить ту же самую разреженную линейную систему (от 300x300 до 1000x1000) со многими правыми сторонами (от 300 до 1000). В дополнение к этой первой проблеме, я также хотел бы решить различные системы, но с одинаковыми ненулевыми элементами (только с разными значениями), то есть с множеством разреженных систем с постоянной конфигурацией разреженности. Мои матрицы неопределенны.

Производительность факторизации и инициализации не важна, но производительность этапа решения есть. В настоящее время я рассматриваю PaStiX или Umfpack и, возможно, поиграюсь с Petsc (который поддерживает оба солвера). Существуют ли библиотеки, способные воспользоваться моими конкретными потребностями (векторизация, многопоточность), или я должен полагаться на общие решатели, и Может быть, немного изменить их для моих нужд?

Что, если разреженная матрица больше, до ?106×106

нат чуф
источник

Ответы:

10

Не принимая во внимание дискуссию о том, использовать ли прямые или итерационные решатели, я просто хочу добавить два момента:

  1. Существуют методы Крылова для систем с несколькими правыми частями (так называемые блочные методы Крылова ). В качестве дополнительного бонуса, они часто имеют более быструю сходимость, чем стандартные методы Крылова, поскольку пространство Крылова построено из большего набора векторов. См. Dianne P. O'Leary, Алгоритм градиента сопряженных блоков и смежные методы . Линейная алгебра и ее приложения 29 (1980), стр. 239-322. и Мартин Х. Гуткнехт, Методы пространственных блоков Крылова для линейных систем с несколькими правыми частями: введение (2007).

  2. Если у вас есть разные матрицы с одним и тем же шаблоном разреженности, вы можете предварительно вычислить символьную факторизацию для первой матрицы, которую можно повторно использовать для вычисления числовой факторизации для этой и последующих матриц. (В UMFPACK вы можете сделать это, используя umfpack di symbolicи передавая результат umfpack_di_numeric.)

Кристиан Клэйсон
источник
9

O(N)

Вольфганг Бангерт
источник
4
O(N2)O(N4/3)O(N4/3)N
3
O(N)O(N4/3)
2
105n<300k
3

Вы не совсем ясно сформулировали проблему, когда говорите о «одинаковых ненулевых элементах (просто разных значениях)». Вы говорите, что матрица имеет постоянную разреженность, но фактические значения меняются? Или вы говорите, что матрица на самом деле постоянна?

PA=LUO(n2)

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

Все упомянутые вами пакеты предлагают методы прямой факторизации (хотя PetSc в основном известен своими итеративными решателями). Однако ваши системы настолько малы, что маловероятно, что вы сможете получить существенное параллельное ускорение, особенно в среде распределенной памяти.

Я бы предложил использовать Umfpack для этой работы - PaStix и PetSc излишни.

Брайан Борхерс
источник
Спасибо за Ваш ответ. Для пояснения: сначала я попросил одну матрицу со многими правыми частями, а затем еще одна проблема - это набор матриц с одинаковым значением разреженности, но значения меняются, каждая из которых должна быть решена для многих прав. Вспомогательный вопрос: что, если разреженная матрица теперь составляет от 10 ^ 5x10 ^ 5 до 10 ^ 6x10 ^ 6?
Nat Chouf
2
105
Использование итеративного метода для более крупных систем с единственной правой частью может иметь смысл, особенно если вам не нужны очень точные решения и особенно если вы можете найти эффективный предварительный кондиционер или ваши системы уже хорошо подготовлены. Однако, если ваши системы плохо подготовлены, вам нужны точные решения, и вы не можете найти хорошего предварительного кондиционера, то вам, вероятно, все равно будет лучше с прямой факторизацией.
Брайан Борхерс
N106