Necesito resolver el mismo sistema lineal disperso (300x300 a 1000x1000) con muchos lados derechos (300 a 1000). Además de este primer problema, también me gustaría resolver diferentes sistemas, pero con los mismos elementos distintos de cero (solo valores diferentes), es decir, muchos sistemas dispersos con un patrón de dispersión constante. Mis matrices son indefinidas.
El rendimiento de la factorización e inicialización no es importante, pero el rendimiento de la etapa de resolución sí lo es. Actualmente estoy considerando PaStiX o Umfpack, y probablemente jugaré con Petsc (que admite ambos solucionadores) ¿Hay bibliotecas capaces de aprovechar mis necesidades específicas (vectorización, subprocesamiento múltiple) o debo confiar en solucionadores generales, y tal vez modificarlos ligeramente para mis necesidades?
¿Qué pasa si la matriz dispersa es más grande, hasta ?
fuente
No está del todo claro en su declaración del problema cuando habla de "los mismos elementos distintos de cero (solo valores diferentes)" ¿Está diciendo que la matriz tiene un patrón de dispersión constante pero los valores reales cambian? ¿O estás diciendo que la matriz es de hecho constante?
Suponiendo que la matriz dispersa es constante y que solo está cambiando el lado derecho, entonces debe buscar métodos que usen la factorización directa (de la forma ) de la matriz, y luego resuelva para cada lado derecho adelante / sustitución hacia atrás Una vez que se completa la factorización, cada solución será extremadamente rápida ( tiempo para factores completamente densos, pero para factores dispersos esto será proporcional al número de nonzeros en los factores). O ( n 2 )PA=LU O(n2)
Para múltiples lados derechos y sistemas de ecuaciones de este tamaño, los métodos iterativos generalmente no valen la pena.
Todos los paquetes que mencionó ofrecen métodos de factorización directa (aunque PetSc es conocido principalmente por sus solucionadores iterativos). Sin embargo, sus sistemas son tan pequeños que es poco probable que pueda obtener aceleraciones paralelas sustanciales, particularmente en un entorno de memoria distribuida.
Sugeriría usar Umfpack para este trabajo: PaStix y PetSc son excesivos.
fuente