Я решаю физическую проблему, используя неявную числовую схему. Это приводит меня к решению линейного уравнения с трехдиагональной матрицей. Я закодировал этот алгоритм из Википедии. Интересно, есть ли эффективная библиотека, которая позволяет оптимизировать этот тип уравнения? Важным примечанием является то, что сама матрица изменяется только при изменении параметров системы, поэтому у меня была возможность предварительно рассчитать некоторые шаги алгоритма для получения хорошего бонуса производительности. Я использую C ++.
12
Ответы:
Возможно, вам следует начать с реализации LAPACK, например, gtsv , например, dgtsv . Если вам нужна версия с распределенной памятью, вы можете начать с pagtsv из ScaLAPACK.
РЕДАКТИРОВАТЬ: Поскольку ваша матрица меняется не очень часто, вы можете избежать избыточного факторинга трехдиагональной матрицы, разбив подпрограмму LAPACK? Gtsv на этап факторизации, gttrf и этап решения, gttrs. В ScaLAPACK существуют одноименные подпрограммы, которые служат той же цели.
источник
Для распределенных параллельных систем : я не пробовал ScaLAPACK, у которого есть параллельный трехдиагональный решатель, для которого есть примеры, доступные онлайн . Я с некоторым успехом попробовал метод, предложенный Дэвидом Моултоном в публикации LANL . Кодирование это может быть больше, чем вы хотите, но с помощью LAPACK, это просто вперед.
источник
Я нашел интересный рекурсивный алгоритм здесь на странице 975. Это выглядит многообещающим, я задаюсь вопросом, что более опытные люди говорят об этом.
источник