Tengo un código de modelado basado en el filtro Kalman que he desarrollado para una aplicación de mapeo ionosférico regional casi en tiempo real. El código asimila datos de diferentes sensores en un mapa (descrito por un conjunto de funciones básicas) utilizando un filtro Kalman.
Estoy tratando de escalar esto a una región más grande y más sensores, sin embargo, la parte de álgebra matricial del filtro de Kalman se está volviendo muy lenta, debido a las grandes matrices (miles de filas / columnas) involucradas. Sospecho que la mejor manera de atacar el problema del tiempo de ejecución es utilizar el hecho de que estas matrices suelen ser muy escasas con un 80% o más del total de elementos cero. La razón de esto es que cada sensor tiene un parámetro de polarización que se estima conjuntamente con los coeficientes del mapa. Esto se muestra como un 1 en la columna para ese sensor en la matriz Kalman H, con cero en las columnas para cada otro sensor y coeficiente de mapa. Hay cientos de sensores cada uno contribuyendo 8-10 observaciones en cada época, por lo tanto, muchos ceros.
Podría considerar implementar los componentes del filtro de Kalman usando algoritmos dispersos, específicamente multiplicación e inversión *, pero me pregunto si existe un enfoque aún mejor que relanza el filtro de Kalman en una forma diferente más adecuada para los casos en que las matrices son ¿escaso? Sé que podría usar un filtro de Kalman de conjunto o algo similar, pero si es posible, me gustaría conservar la optimización del filtro lineal puro de Kalman; el volumen total de datos no es prohibitivo, solo las grandes matrices dispersas que resultan del modelo lineal.
En términos de implementación, esto se realiza en IDL, sin embargo, el álgebra de la matriz central se realiza a través de llamadas a bibliotecas externas optimizadas de LA (específicamente ATLAS).
* Sé que una implementación óptima del filtro de Kalman evita la inversión y en su lugar usa una descomposición UD. Estoy considerando intentar implementar algo como esto, por lo que esa puede ser la respuesta, pero estoy buscando si hay una mejor solución dada la escasez de matrices.