¿Cómo reordenar las variables para producir una matriz con bandas de ancho de banda mínimo?

15

Estoy tratando de resolver una ecuación de Poisson en 2D por diferencias finitas. En el proceso, obtengo una matriz dispersa con solo variables en cada ecuación. Por ejemplo, si las variables fueran , entonces la discretización produciría:5 5U

Uyo-1,j+Uyo+1,j-4 4Uyo,j+Uyo,j-1+Uyo,j+1=Fyo,j

Sé que puedo resolver este sistema mediante un método iterativo, pero se me ocurrió pensar que si ordenaba las variables de manera adecuada, podría obtener una matriz con bandas que podría resolverse mediante un método directo (es decir, eliminación gaussiana w / o pivotante). es posible? ¿Hay alguna estrategia para hacer esto para otros sistemas dispersos, quizás menos estructurados?

Paul
fuente
2
¿Algo como Cuthill-McKee, entonces?
JM
Interesante ... ¡nunca antes había oído hablar del algoritmo Cuthill-McKee! :)
Paul
1
También hay un Reverse Cuthill-McKee también.
Geoff Oxberry
1
Espero que quede claro a partir de las respuestas, pero no desea utilizar un solucionador en bandas para este problema, ni elegir un orden que minimice el ancho de banda. Quizás la pregunta o la respuesta elegida se puedan editar para aclarar esto, de lo contrario me temo que este mito se perpetuará. Realicé una comparación visual y comparé el relleno en scicomp.stackexchange.com/a/880/119 .
Jed Brown
@JedBrown: En realidad, no estoy trabajando con un problema de Poisson, per se ... Mi problema tiene una estructura similar al problema de Poisson ... Las indicaciones de las variables (i's y j's) son exactamente las mismas, y la matriz es diagonalmente dominante con las entradas fuera de la diagonal (dentro de la misma fila) sumadas exactamente a la suma de la entrada diagonal.
Paul

Respuestas:

13

Este es un problema bien estudiado en el campo de los solucionadores dispersos directos. Recomiendo leer la descripción general de Joseph Liu del método multifrontal para tener una mejor idea de cómo los reordenamientos y los supernodos afectan el tiempo de llenado y solución.

La disección anidada es una forma extremadamente común de generar el reordenamiento, y esencialmente consiste en una partición gráfica recursiva. MeTiS es el estándar de facto para la partición de gráficos, y puede leer sobre algunas de las ideas detrás de esto aquí . Otro paquete de uso común es SCOTCH , y Chaco también es importante, ya que sus autores introdujeron la partición de gráficos multinivel , que también es la idea fundamental detrás de MeTiS .

George y Liu mostraron en su libro clásico que las soluciones 2d de dispersión directa solo requieren trabajo y memoria, mientras que 3d sparse-direct requiere trabajo y memoria.O ( n log n ) O ( n 2 ) O ( n 4 / 3 )O(norte3/ /2)O(norteIniciar sesiónnorte)O(norte2)O(norte4 4/ /3)

Jack Poulson
fuente
¿Tiene una cita para la referencia de George y Liu?
Paul
Adicional; Estaba a punto de salir del auto cuando lo envié por primera vez. Sé que existe una versión gratuita del libro en línea en algún lugar (Jed sabe dónde está), pero no pude encontrarlo.
Jack Poulson
Actualicé el enlace para señalar el PDF del libro en lugar de la reseña del libro.
Jed Brown
@JedBrown ¡Esa fue una gran referencia! ¡Muchas gracias! :)
Paul
1
@Alexander Todos atribuyen el 3D a George y Liu, aunque no sé si lo señalan explícitamente en el libro. Sin embargo, es obvio por la teoría. El separador de vértice mínimo para una rejilla es n 2 / 3 = m × m . La matriz densa asociado con ese supernode tiene ( n 2 / 3 ) 2 = n 4 / 3 entradas y requiere ( n 2 / 3 ) 3 = n 2norte=metro×metro×metronorte2/ /3=metro×metro(norte2/ /3)2=norte4 4/ /3(norte2/ /3)3=norte2operaciones a factorizar. El término logarítmico en el caso 2D es más sutil y se trata en el Capítulo 8 sobre Disección anidada, que logra el límite inferior.
Jed Brown
5

Cuthill-McKee es el estándar de facto para lo que quieres hacer. Si desea jugar con este método, hay una implementación fácil de usar del algoritmo (y su reverso) en la Biblioteca de gráficos Boost (BGL), y la documentación contiene ejemplos de cómo usarlo.

Wolfgang Bangerth
fuente
en realidad invierte Cuhill-McKee; Por lo general, da menos relleno. Pero un orden de disección anidado es muy superior a un orden de ancho de banda bajo.
Arnold Neumaier
4

Hablando de métodos multifrontales, Tim Davis , que trabaja en métodos multifrontales para la factorización LU ( UMFPACK ) tiene una serie de rutinas que reordenarán las matrices para minimizar el llenado. Puede encontrarlos aquí como parte de SuiteSparse . SuiteSparse usa MeTiS.

Otra cosa a tener en cuenta: en algunos problemas, puede ser inteligente al ordenar variables para que se agrupen o se acerquen a patrones, lo que puede ahorrarle el problema (y el tiempo de CPU) de llamar a estos algoritmos. Sin embargo, este reordenamiento inteligente requiere una visión de su parte y no es tan general como los algoritmos de reordenamiento basados ​​en la teoría de gráficos que la gente ha mencionado en sus respuestas aquí.

Geoff Oxberry
fuente
De nada, Paul. Si te gusta, vota.
Geoff Oxberry
3

Hay un algoritmo llamado ADI (Alternando la dirección implícita) en los círculos matemáticos aplicados y el operador Split en los círculos de física que hace básicamente lo que usted describe. Es un método iterativo, y sigue este procedimiento básico:

  1. Por cada valor de , relájese en la dirección x . Esta matriz debe ser tridiagonal, por lo que se puede resolver directamente en relativamente poco tiempo.yX

  2. Para cada valor de , relájese en la dirección y . De nuevo, esto debería ser bastante rápido.Xy

  3. Repita 1 y 2 hasta que el error sea tan pequeño como desee.

No conozco la complejidad formal de este algoritmo, pero he encontrado que converge en menos iteraciones que cosas como Jacobi y Gauss-Seidel cada vez que lo uso.

Dan
fuente
2
Si decide ir por la ruta de división del operador, algo de lo que debe tener cuidado es que se sabe que la división del operador puede ocasionar errores en las soluciones de estado estacionario en algunos casos. (Uno de mis compañeros de laboratorio ha desarrollado una forma de superar esta dificultad, pero no creo que lo haya publicado aún). Además, se sabe que la división del operador causa errores numéricos. Hay formas bien establecidas de estimar estos errores a posteriori ; Don Estep ha hecho un excelente trabajo en esa área.
Geoff Oxberry
@ GeoffOxberry Parece que te estás refiriendo a una división diferente. Puede usar ADI en un esquema totalmente implícito que no tiene error de división porque realmente resuelve el sistema. También hay métodos IMEX que controlan rigurosamente los errores de división.
Jed Brown
Xy
Nunca he oído hablar de Godunov y Strang separándose. Tiendo a dividir mi operador con la fórmula Baker-Campbell-Hausdorf. ¿Es eso lo mismo?
Dan