В моем проекте мне нужно решать пару трехдиагональных матриц на каждом временном шаге, поэтому очень важно иметь хороший решатель для них. Я сделал свою собственную реализацию, просто классический способ сделать это, описанный в Википедии. Затем я попытался использовать Lapack вместо этого, и, к моему удивлению, это было медленнее!
Теперь внутри Лапака кажется, что он решает с помощью факторизации LU, и я удивляюсь, почему, разве это не сложнее, чем могло бы быть?
Кроме того, я нашел алгоритм в книге «Численные рецепты» с сайта nr.com, который рекурсивно делит систему на более мелкие трехдиагональные задачи. Это выглядело многообещающе. Есть ли еще какие-нибудь вкусности?
Обновление: размер проблемы около 1000х1000. Я использовал GotoBLAS, он также предоставляет библиотеку Lapack 3.1.1. Проблема не симметрична. Я использовал процедуру Лапака для общих трехдиагональных матриц.