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.
fuente
Respuestas:
Para el filtrado de Kalman en particular, en lugar de la informática
fuente
Tenemos un algoritmo robusto para el filtro Ensemble Kalman (y Kalman regular). Es adecuado para matrices dispersas y cómputo paralelo porque se basa en matrices ortogonales y está relacionado con los algoritmos de raíz cuadrada o UD.
Estaría encantado de enviar el periódico.
Thomas, SJ, J. Hacker y J. Anderson, (2009): una formulación robusta del conjunto de filtros de Kalman Quart J. Royal Met. Soc, vol 135, 507-521,
(El PDF del editor es gratuito ).
fuente
Hace mucho tiempo tuve la oportunidad de trabajar en la reducción de la dimensionalidad que se ocupa del procesamiento de datos que se encuentran en grandes conjuntos. La idea básica detrás de esto es que procesa los datos a través de unos pocos pasos para orientarlos de la manera en que la mayoría de la información puede calcularse a partir de ellos.
Funciona bastante bien para matrices también y se usa en gran medida. La mejor parte es que ni siquiera necesita programarlo, ya que hay bibliotecas estándar disponibles para ello. Las principales herramientas matemáticas como Matlab y Mathematica también admiten esta funcionalidad directamente.
Hay dos algoritmos principales que logran esto: análisis de componentes principales y descomposición de valores singulares.
Lo que estos algoritmos realmente logran es encontrar esos datos que realmente afectan su lectura por un margen significativo. Internet está lleno de información sobre estos algoritmos. Esto le mostrará cómo lo está haciendo Apache.
fuente
Disculpas por no agregar a la discusión por un tiempo, pero me complacería publicar el resumen del documento, pero también me gustaría explicar las razones por las cuales los cálculos se organizan de manera diferente a los enfoques estándar de KF de EnKF
fuente