Buenas, una consulta. Si la matriz a almacenar es de tamaño pxp con p un número primo, qué se hace en ese caso? Se agregan k filas y columnas de ceros tal que p+k sea múltiplo de nb el tamaño del bloque? Yo creo que sí, no? Porque a lo sumo k sería nb - 1, no habría mucho problema.
También se espera que dentro de los bloques las matrices sean densas no? O sea, no tendríamos que volver a aplicar un formato de matriz dispersa dentro de estos bloques.
En el formato BCSR los bloques se almacenan como matrices densas del mismo tamaño. Existen otros formatos donde los bloques son de tamaño variable y son almacenados en formato disperso (sin incluir ceros).
No sé si en general nos puede tocar almacenar matrices rectangulares, estoy pensando en el caso de si nos toca resolver un sistema por mínimos cuadrados por ejemplo (aunque dudo que sea una matriz dispersa en ese caso), pero en fin, ¿los bloques seguirían siendo cuadrados o podría ser más eficiente almacenar bloques rectangulares?
Las matrices pueden ser rectangulares perfectamente. BCSR siempre utiliza bloques cuadrados, pero esto no necesariamente es una desventaja en matrices rectangulares, ya que los bloques en BCSR son pequeños (2x2, 3x3, etc.) y las dimensiones de la matriz pueden estar en el orden de los cientos de miles o incluso millones. Lo determinante es cómo se distribuyen los elementos distintos de cero dentro de la matriz. Existen formatos que utilizan bloques rectangulares o unidimensionales, pero sus ventajas no están relacionadas con el factor de forma de la matriz.
Si las dimensiones de la matriz no son múltiplos del tamaño de bloque se deben rellenar con ceros las filas y columnas que sobran, y tener esto en cuenta al trabajar con la matriz luego (por ejemplo al multiplicarla por un vector u otra matriz). En general los bloques usados en BSR son pequeños para evitar un sobrecosto grande por este motivo.