Example #1
0
def test_sequential_update_mvar_missing_first(ft_ar2_mvar_kw, theta_ar2_mvar,
                                              Yt_ar2_mvar, Xt_ar2_mvar):
    """
    Test normal run in multi-variate case missing middle measurements
    """
    t = 3
    kf = Filter(ft_ar2_mvar_kw, Yt_ar2_mvar, Xt_ar2_mvar, for_smoother=True)
    kf.init_attr(theta_ar2_mvar)
    for t_ in range(t + 1):
        kf._sequential_update(t_)
    Mt = kf.ft(kf.theta, kf.T, x_0=Xt_ar2_mvar[0])

    Ht = Mt['Ht'][t][[1, 2]]
    Bt = Mt['Bt'][t]
    Dt = Mt['Dt'][t][[1, 2]]
    Ft = Mt['Ft'][t]
    Qt = Mt['Qt'][t]
    Rt = Mt['Rt'][t][[1, 2]][:, [1, 2]]
    Upsilon = Ht.dot(kf.P_star_t[t][0]).dot(Ht.T) + Rt
    K = kf.P_star_t[t][0].dot(Ht.T).dot(linalg.pinvh(Upsilon))
    v = kf.Yt[t][[0, 1]] - Ht.dot(kf.xi_t[t][0]) - Dt.dot(kf.Xt[t])

    expected_xi_t_nt = kf.xi_t[t][0] + K.dot(v)
    P_t_0 = kf.P_star_t[t][0]
    P_t_t = P_t_0 - P_t_0.dot(Ht.T).dot(
        linalg.pinvh(Upsilon)).dot(Ht).dot(P_t_0)
    expected_P_t_nt = P_t_t
    np.testing.assert_array_almost_equal(expected_P_t_nt,
                                         kf.P_star_t[t][kf.n_t[t]])
    np.testing.assert_array_almost_equal(expected_xi_t_nt,
                                         kf.xi_t[t][kf.n_t[t]])
Example #2
0
def test_sequential_update_mvar_full_obs(ft_ar2_mvar_kw, theta_ar2_mvar,
                                         Yt_ar2_mvar, Xt_ar2_mvar):
    """
    Test normal run in multi-variate case full measurements
    """
    t = 0
    kf = Filter(ft_ar2_mvar_kw, Yt_ar2_mvar, Xt_ar2_mvar, for_smoother=True)
    kf.init_attr(theta_ar2_mvar)
    kf._sequential_update(t)
    Mt = kf.ft(kf.theta, kf.T, x_0=Xt_ar2_mvar[0])

    Ht = Mt['Ht'][t]
    Bt = Mt['Bt'][t]
    Dt = Mt['Dt'][t]
    Ft = Mt['Ft'][t]
    Qt = Mt['Qt'][t]
    Rt = Mt['Rt'][t]
    Upsilon = Ht.dot(kf.P_star_t[t][0]).dot(Ht.T) + Rt
    K = kf.P_star_t[t][0].dot(Mt['Ht'][t].T).dot(linalg.pinvh(Upsilon))
    v = kf.Yt[t] - Ht.dot(kf.xi_t[t][0]) - Dt.dot(kf.Xt[t])

    expected_xi_t1_0 = Ft.dot(kf.xi_t[t][0] + K.dot(v)) + Bt.dot(kf.Xt[t])
    P_t_0 = kf.P_star_t[t][0]
    P_t_t = P_t_0 - P_t_0.dot(Ht.T).dot(
        linalg.pinvh(Upsilon)).dot(Ht).dot(P_t_0)
    expected_P_t1_0 = Ft.dot(P_t_t).dot(Ft.T) + Qt
    np.testing.assert_array_almost_equal(expected_P_t1_0,
                                         kf.P_star_t[t + 1][0])
    np.testing.assert_array_almost_equal(expected_xi_t1_0, kf.xi_t[t + 1][0])
Example #3
0
def test_sequential_update_mvar_all_missing(ft_ar2_mvar_kw, theta_ar2_mvar,
                                            Yt_ar2_mvar, Xt_ar2_mvar):
    """
    Test normal run in multi-variate case missing all measurements
    """
    t = 2
    kf = Filter(ft_ar2_mvar_kw, Yt_ar2_mvar, Xt_ar2_mvar, for_smoother=True)
    kf.init_attr(theta_ar2_mvar)
    for t_ in range(t + 1):
        kf._sequential_update(t_)
    Mt = kf.ft(kf.theta, kf.T, x_0=Xt_ar2_mvar[0])
    Bt = Mt['Bt'][t]
    Ft = Mt['Ft'][t]
    Qt = Mt['Qt'][t]

    expected_xi_t1_0 = Ft.dot(kf.xi_t[t][0]) + Bt.dot(kf.Xt[t])
    P_t_0 = kf.P_star_t[t][0]
    P_t_t = P_t_0
    expected_P_t1_0 = Ft.dot(P_t_t).dot(Ft.T) + Qt
    np.testing.assert_array_almost_equal(expected_P_t1_0,
                                         kf.P_star_t[t + 1][0])
    np.testing.assert_array_almost_equal(expected_xi_t1_0, kf.xi_t[t + 1][0])