Hier ist der Code-Schnipsel:
from pykalman import KalmanFilter
import numpy as np
kf = KalmanFilter()
(filtered_state_means, filtered_state_covariances) = kf.filter_update(filtered_state_mean = [[0],[0]], filtered_state_covariance = [[90000,0],[0,90000]], observation=np.asarray([[7],[2],[14]]),transition_matrix = np.asarray([[1,0],[0,1]]), observation_matrix = np.asarray([[2,1],[0,1],[5,1]]), observation_covariance = np.asarray([[.1622,0,0],[0,.1622,0],[0,0,.1622]]))
print filtered_state_means
print filtered_state_covariances
for x in range(0, 1000):
(filtered_state_means, filtered_state_covariances) = kf.filter_update(filtered_state_mean = filtered_state_means, filtered_state_covariance = filtered_state_covariances, observation=np.asarray([[7],[2],[14]]),transition_matrix = np.asarray([[1,0],[0,1]]), observation_matrix = np.asarray([[2,1],[0,1],[5,1]]), observation_covariance = np.asarray([[.1622,0,0],[0,.1622,0],[0,0,.1622]]))
print filtered_state_means
print filtered_state_covariances
filtered_state_covariance wurde groß gewählt, weil wir keine Ahnung, wo unsere filter_state_mean haben zunächst ist und die Beobachtungen sind nur [[y1 ], [y2], [y3]]. Beobachtungsmatrix ist [[x1,1], [x2,1], [x3,1]] und gibt somit das zweite Element als unseren Achsenabschnitt an. Stellen Sie sich folgendes vor: y1 = m * x1 + c wobei m und c Steigung und Schnittpunkt sind. In unserem Fall filtered_state_mean = [[m], [c]]. Beachten Sie, dass das neue filtered_state_means als filtered_state_mean für das neue kf.filter_update() (in der Iterationsschleife) verwendet wird, weil wir jetzt wissen, wo der Mittelwert bei filtered_state_covariance = filtered_state_covariances liegt. Iterating es 1000 Mal konvergiert das Mittel zum realen Wert. Wenn Sie über die Funktion wissen wollen/Methode der Link: https://pykalman.github.io/
Wenn der Systemzustand ändert sich nicht zwischen den Messungen, dann transition_matrix φ = I.
(auch vacuous Bewegungsschritt genannt) Ich bin nicht sicher, ob das, was ich jetzt sagen werde, wahr ist oder nicht. Also korrigieren Sie mich bitte, wenn ich falsch liege
observation_covariance Matrix muss der Größe m x m sein, wobei m die Anzahl der Beobachtungen ist (in unserem Fall = 3). Die diagonalen Elemente sind nur Varianzen. Ich glaube Varianz_y1, Varianz_y2 und Varianz_y3, und Elemente außerhalb der Diagonale sind Kovarianzen. Zum Beispiel ist Element (1, 2) in der Matrix die Standardabweichung von y1, (COMMA NOT PRODUCT) Standardabweichung von y2 und ist gleich Element (2,1). Ähnlich für andere Elemente. Kann jemand mir helfen, Unsicherheit in x1, x2 und x3 einzuschließen. Ich meine, wie implementieren Sie Unsicherheiten in x im obigen Code.
Bitte melden Sie die Gesamtheit der Fehlermeldung, – gboffi
Traceback (jüngste Aufforderung zuletzt): File "quicktest3.py", Zeile 17, in initial_state_mean = initial_state_matrix, observation_covariance = observation_covariance1) Datei „/ usr/local /lib/python2.7/site-packages/pykalman/standard.py ", Zeile 1027, in __init__ n_dim_state Datei" /usr/local/lib/python2.7/site-packages/pykalman/standard.py ", Zeile 78, in _determine_dimensional "Bitte überprüfen Sie ihre Werte." ValueError: Die Form aller Parameter ist nicht konsistent. Bitte überprüfen Sie ihre Werte erneut. –