Ich habe einen Kalman-Filter-basierten Modellierungscode, den ich für eine regionale ionosphärische Kartierungsanwendung in Echtzeit entwickelt habe. Der Code assimiliert Daten von verschiedenen Sensoren mithilfe eines Kalman-Filters in eine Karte (beschrieben durch eine Reihe von Basisfunktionen).
Ich versuche, dies auf einen größeren Bereich und mehr Sensoren zu skalieren, aber der Matrixalgebra-Teil des Kalman-Filters wird aufgrund der großen Matrizen (Tausende von Zeilen / Spalten) sehr langsam. Ich vermute, der beste Weg, um das Laufzeitproblem anzugreifen, besteht darin, die Tatsache zu nutzen, dass diese Matrizen mit 80% oder mehr der gesamten Elemente Null normalerweise sehr spärlich sind. Der Grund dafür ist, dass jeder Sensor einen Vorspannungsparameter hat, der gemeinsam mit den Kartenkoeffizienten geschätzt wird. Dies wird in der Spalte für diesen Sensor in der Kalman H-Matrix als 1 angezeigt, in den Spalten für jeden anderen Sensor- und Kartenkoeffizienten als Null. Es gibt Hunderte von Sensoren, die jeweils 8-10 Beobachtungen in jeder Epoche liefern, daher viele Nullen.
Ich könnte versuchen, die Komponenten des Kalman-Filters mit spärlichen Algorithmen zu implementieren, insbesondere mit Multiplikation und Inversion *, aber ich frage mich, ob es einen noch besseren Ansatz gibt, der den Kalman-Filter in eine andere Form umwandelt, die für Fälle mit Matrizen besser geeignet ist spärlich? Ich weiß, dass ich einen Ensemble-Kalman-Filter oder ähnliches verwenden könnte, aber wenn möglich möchte ich die Optimalität des reinen linearen Kalman-Filters beibehalten. Das gesamte Datenvolumen ist nicht unerschwinglich, nur die großen, spärlichen Matrizen, die sich aus dem linearen Modell ergeben.
In Bezug auf die Implementierung erfolgt dies in IDL, die Kernmatrixalgebra erfolgt jedoch über Aufrufe externer optimierter LA-Bibliotheken (insbesondere ATLAS).
* Ich weiß, dass eine optimale Kalman-Filterimplementierung eine Inversion vermeidet und stattdessen eine UD-Zerlegung verwendet. Ich denke darüber nach, so etwas zu implementieren, damit das die Antwort sein kann, aber ich bin gespannt, ob es angesichts der spärlichen Matrizen eine bessere Lösung gibt.