@classmethod<EOL><INDENT>def cont_discr_rts_smoother(cls,state_dim, filter_means, filter_covars,<EOL>p_dynamic_callables=None, X=None, F=None,L=None,Qc=None):<DEDENT>
f_a = lambda k,m,A: np.dot(A, m) <EOL>if p_dynamic_callables is None: <EOL><INDENT>p_dynamic_callables = cls._cont_to_discrete_object(cls, X, F,L,Qc,f_a,compute_derivatives=False,<EOL>grad_params_no=None, P_inf=None, dP_inf=None, dF = None, dQc=None)<EOL><DEDENT>no_steps = filter_covars.shape[<NUM_LIT:0>]-<NUM_LIT:1><EOL>M = np.empty(filter_means.shape) <EOL>P = np.empty(filter_covars.shape) <EOL>if print_verbose:<EOL><INDENT>print("<STR_LIT>")<EOL><DEDENT>M[-<NUM_LIT:1>,:,:] = filter_means[-<NUM_LIT:1>,:,:]<EOL>P[-<NUM_LIT:1>,:,:] = filter_covars[-<NUM_LIT:1>,:,:]<EOL>for k in range(no_steps-<NUM_LIT:1>,-<NUM_LIT:1>,-<NUM_LIT:1>):<EOL><INDENT>prev_mean = filter_means[k,:] <EOL>m_pred, P_pred, tmp1, tmp2 =cls._kalman_prediction_step(k, prev_mean,<EOL>filter_covars[k,:,:], p_dynamic_callables,<EOL>calc_grad_log_likelihood=False)<EOL>p_m = filter_means[k,:]<EOL>p_m_prev_step = M[(k+<NUM_LIT:1>),:]<EOL>m_upd, P_upd, tmp_G = cls._rts_smoother_update_step(k,<EOL>p_m ,filter_covars[k,:,:],<EOL>m_pred, P_pred, p_m_prev_step ,P[(k+<NUM_LIT:1>),:,:], p_dynamic_callables)<EOL>M[k,:,:] = m_upd<EOL>P[k,:,:] = P_upd<EOL><DEDENT>return (M, P)<EOL>
Continuos-discrete Rauch–Tung–Striebel(RTS) smoother.

This function implements Rauch–Tung–Striebel(RTS) smoother algorithm
based on the results of _cont_discr_kalman_filter_raw.

Model:
    d/dt x(t) =  F * x(t) + L * w(t);         w(t) ~ N(0, Qc)
    y_{k} = H_{k} * x_{k} + r_{k};            r_{k-1} ~ N(0, R_{k})

Returns estimated smoother distributions x_{k} ~ N(m_{k}, P(k))

Input:
--------------

filter_means: (no_steps+1,state_dim) matrix or (no_steps+1,state_dim, time_series_no) 3D array
    Results of the Kalman Filter means estimation.

filter_covars: (no_steps+1, state_dim, state_dim) 3D array
    Results of the Kalman Filter covariance estimation.

Dynamic_callables: object or None
    Object form the filter phase which provides functions for computing
    A, Q, dA, dQ fro  discrete model from the continuos model.

 X, F, L, Qc: matrices
     If AQcomp is None, these matrices are used to create this object from scratch.

Output:
-------------

M: (no_steps+1,state_dim) matrix
    Smoothed estimates of the state means

P: (no_steps+1,state_dim, state_dim) 3D array
    Smoothed estimates of the state covariances