我正在学习Kalman滤波器,发现Lag-One协方差平滑器的方程及其在pykalman中的实现是不同的。我不知道为什么。
在Robert H.Shumway,David S.Stoffer的书中,“时间序列分析及其 应用程序(第四版)。等式在第300页上给出
我可以找到的其他文献中的公式也是这种形式。
但是在pykalman(https://github.com/pykalman/pykalman/blob/master/pykalman/standard.py)中,他们以不同的方式进行了计算。
def _smooth_pair(smoothed_state_covariances, kalman_smoothing_gain):
n_timesteps, n_dim_state, _ = smoothed_state_covariances.shape
pairwise_covariances = np.zeros((n_timesteps, n_dim_state, n_dim_state))
for t in range(1, n_timesteps):
pairwise_covariances[t] = (
np.dot(smoothed_state_covariances[t],
kalman_smoothing_gain[t - 1].T)
)
return pairwise_covariances
事实上,我在python中都尝试过,结果略有不同。我找不到它们之间的明显联系,也找不到任何文献中的第二个方程。有人可以给我一些提示吗?