def predict(self, u=None):
        """
        Predict next state (prior) using the IMM state propagation
        equations.

        Parameters
        ----------

        u : np.array, optional
            Control vector. If not `None`, it is multiplied by B
            to create the control input into the system.
        """

        # compute mixed initial conditions
        xs, Ps = [], []
        for i, (f, w) in enumerate(zip(self.filters, self.omega.T)):
            x = zeros(self.x.shape)
            for kf, wj in zip(self.filters, w):
                x += kf.x * wj
            xs.append(x)

            P = zeros(self.P.shape)
            for kf, wj in zip(self.filters, w):
                y = kf.x - x
                P += wj * (outer(y, y) + kf.P)
            Ps.append(P)

        #  compute each filter's prior using the mixed initial conditions
        for i, f in enumerate(self.filters):
            # propagate using the mixed state estimate and covariance
            f.x = xs[i].copy()
            f.P = Ps[i].copy()
            f.predict(u)

        # compute mixed IMM state and covariance and save posterior estimate
        self._compute_state_estimate()
        self.x_prior = self.x.copy()
        self.P_prior = self.P.copy()
def predict ( self , u = None ) : xs , Ps = [ ] , [ ] for i , ( f , w ) in enumerate ( zip ( self . filters , self . omega . T ) ) : x = zeros ( self . x . shape ) for kf , wj in zip ( self . filters , w ) : x += kf . x * wj xs . append ( x ) P = zeros ( self . P . shape ) for kf , wj in zip ( self . filters , w ) : y = kf . x - x P += wj * ( outer ( y , y ) + kf . P ) Ps . append ( P ) for i , f in enumerate ( self . filters ) : f . x = xs [ i ] . copy ( ) f . P = Ps [ i ] . copy ( ) f . predict ( u ) self . _compute_state_estimate ( ) self . x_prior = self . x . copy ( ) self . P_prior = self . P . copy ( )
Predict next state (prior) using the IMM state propagation
        equations.

        Parameters
        ----------

        u : np.array, optional
            Control vector. If not `None`, it is multiplied by B
            to create the control input into the system.