Preciso resolver o mesmo sistema linear esparso (300x300 a 1000x1000) com muitos lados do lado direito (300 a 1000). Além deste primeiro problema, eu também gostaria de resolver sistemas diferentes, mas com os mesmos elementos diferentes de zero (apenas valores diferentes), ou seja, muitos sistemas esparsos com padrão de esparsidade constante. Minhas matrizes são indefinidas.
O desempenho da fatoração e inicialização não é importante, mas o desempenho do estágio de resolução é. Atualmente, estou pensando em PaStiX ou Umfpack, e provavelmente vou brincar com o Petsc (que suporta ambos o solucionador) Existem bibliotecas capazes de tirar proveito de minhas necessidades específicas (vetorização, multiencadeamento) ou devo confiar em solucionadores gerais e talvez modificá-los um pouco para as minhas necessidades?
E se a matriz esparsa for maior, até ?
fonte
Você não é muito claro em sua declaração do problema quando fala sobre "os mesmos elementos diferentes de zero (apenas valores diferentes)". Você está dizendo que a matriz tem um padrão de escarsidade constante, mas os valores reais mudam? Ou você está dizendo que a matriz é de fato constante?
Supondo que a matriz esparsa seja constante e que apenas o lado direito esteja sendo alterado, você deve procurar métodos que usem a fatoração direta (no formato ) da matriz e, em seguida, resolver cada lado direito com a frente / substituição para trás. Quando a fatoração estiver concluída, cada solução terá um tempo extremamente rápido ( para fatores completamente densos, mas para fatores esparsos isso será proporcional ao número de não-zeros nos fatores). S ( n 2 )PA=LU O(n2)
Para vários lados do lado direito e sistemas de equações desse tamanho, os métodos iterativos geralmente não valem a pena.
Todos os pacotes que você mencionou oferecem métodos de fatoração direta (embora o PetSc seja conhecido principalmente por seus solucionadores iterativos.) No entanto, seus sistemas são tão pequenos que é improvável que você possa obter acelerações paralelas substanciais, principalmente em um ambiente de memória distribuída.
Eu sugiro usar o Umfpack para este trabalho - PaStix e PetSc são um exagero.
fonte