Estoy usando ublas :: Matriz comprimida para trabajar con UMFPACK, un solucionador lineal disperso. Como realizo una simulación, cada vez que el sistema lineal se construye de forma ligeramente diferente puede implicar aumentar/reducir la matriz de coeficientes y algunas multiplicaciones de matrices dispersas. La escala del sistema lineal es alrededor de 25k.¿Hay alguna manera eficiente de cambiar dinámicamente la compress_matrix en boost?
Incluso hay un parche de encuadernación para impulsar el trabajo con UMFPACK, todavía tengo que cambiar la matriz de vez en cuando, a veces incluso averiguar el número de valores distintos de cero llevaría mucho tiempo (idealmente, tengo para dar la cantidad de valores distintos de cero cuando inicializo una matriz). Además, utilizo ublas :: range para anexar columnas/filas dinámicamente.
Entonces mi pregunta es: ¿hay alguna manera eficiente de hacer esto? En este momento es demasiado lento para mí. Transponer una matriz con dimensiones como 15k cuesta casi 6s y agregar aproximadamente 12k filas es rápido (porque supongo que es una matriz principal), pero agregar el mismo número de columnas a la matriz puede costar hasta 20s (supongo que por el mismo razonar como arriba, así que incluso usé una matriz columna-principal, el tiempo total requerido sería el mismo).
Un poco desesperado aquí. Cualquier sugerencia es bienvenida.
Saludos.
Como tenía casi 30 vistas pero no había respuestas, creo que mi pregunta no es muy clara. Así que aquí hay algunos detalles. – He01
Como estoy haciendo simulación, para cada paso de tiempo, he ensamblado un sistema lineal y lo he solucionado, que básicamente es AX = B. Sin embargo, la matriz de coeficientes A generalmente está compuesta por tres matrices. Una matriz de pesos, dos matrices de coeficientes para restricciones blandas y restricciones duras, respectivamente, que no se pueden calcular previamente. (ver el siguiente comentario) – He01
Como resolver el sistema lineal es el resultado de minimizar una función cuadrática en un sentido al menos cuadrado, tengo que hacer una multiplicación matriz-matriz para hacer una matriz T y una multiplicación matriz-vector para hacer B para integrar la matriz de restricción suave el sistema lineal. Luego tengo que agregar la matriz de restricción dura a la parte inferior y a la derecha de T para hacer A. Finalmente, después de que A y B terminen, puedo ingresarlos en UMFPack. (Ver el siguiente comentario) – He01