'This method is for updating in the finite horizon case.  It
shifts the current value function
.. math::
V_t(x) = x\' P_t x + d_t
and the optimal policy :math:`F_t` one step *back* in time,
replacing the pair :math:`P_t` and :math:`d_t` with
:math:`P_{t-1}` and :math:`d_{t-1}`, and :math:`F_t` with
:math:`F_{t-1}`'

def update_values(self):

    (Q, R, A, B, N, C) = (self.Q, self.R, self.A, self.B, self.N, self.C)
    (P, d) = (self.P, self.d)
    S1 = (Q + (self.beta * dot(B.T, dot(P, B))))
    S2 = ((self.beta * dot(B.T, dot(P, A))) + N)
    S3 = (self.beta * dot(A.T, dot(P, A)))
    self.F = solve(S1, S2)
    new_P = ((R - dot(S2.T, self.F)) + S3)
    new_d = (self.beta * (d + np.trace(dot(P, dot(C, C.T)))))
    (self.P, self.d) = (new_P, new_d)
