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


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.)



3

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

PA=LUO(n2)

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

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

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


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

2
105

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

N106
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.