Estoy resolviendo un problema físico usando un esquema numérico implícito. Esto me lleva a resolver una ecuación lineal con matriz tridiagonal. He codificado este algoritmo de Wikipedia. Me pregunto si hay una biblioteca eficiente que permita resolver este tipo de ecuaciones de manera optimizada. Una nota importante es que la matriz en sí misma solo cambia cuando los parámetros del sistema están cambiando, por lo que tuve la oportunidad de calcular previamente algunos pasos del algoritmo para obtener una buena bonificación de rendimiento. Estoy usando C ++.
12
Respuestas:
Probablemente debería comenzar con la implementación LAPACK,? Gtsv, por ejemplo, dgtsv . Si desea una versión de memoria distribuida, es posible que desee comenzar con p? Gtsv de ScaLAPACK.
EDITAR: Dado que su matriz no cambia muy a menudo, puede evitar la factorización redundante de la matriz tridiagonal separando la rutina LAPACK? Gtsv en el paso de factorización,? Gttrf, y la etapa de resolución,? Gttrs. Existen rutinas con nombres similares en ScaLAPACK que tienen el mismo propósito.
fuente
Para sistemas paralelos distribuidos : no he probado ScaLAPACK, que tiene un solucionador tridiagonal paralelo, para el cual hay ejemplos disponibles en línea . He intentado con cierto éxito un método propuesto por David Moulton en una publicación de LANL . Codificar esto puede ser más de lo que quieres hacer, pero al usar LAPACK, es sencillo.
fuente
Encontré un algoritmo recursivo interesante aquí en la página 975. Parece prometedor, me pregunto qué dicen las personas más experimentadas al respecto.
fuente