Source code for stonesoup.predictor.ensemble

from .base import Property
from ..models.transition import TransitionModel
from .kalman import KalmanPredictor
from ..types.prediction import Prediction


[docs] class EnsemblePredictor(KalmanPredictor): r"""Ensemble Kalman Filter Predictor class The EnKF predicts the state by treating each column of the ensemble matrix as a state vector. The state is propagated through time by applying the transition function to each member (vector) of the ensemble. .. math:: \hat{X}_k = [f(x_1), f(x_2), ..., f(x_M)] """ transition_model: TransitionModel = Property(doc="The transition model to be used.")
[docs] def predict(self, prior, timestamp=None, **kwargs): """Ensemble Kalman Filter prediction step Parameters ---------- prior : :class:`~.EnsembleState` A prior state object control_input : :class:`~.State`, optional The control input. It will only have an effect if :attr:`control_model` is not `None` (the default is `None`) timestamp: :class:`datetime.datetime`, optional A timestamp signifying when the prediction is performed (the default is `None`) Returns ------- : :class:`~.EnsembleStatePrediction` The predicted state """ # Compute time_interval time_interval = self._predict_over_interval(prior, timestamp) # This block of code propagates each column through the transition model. pred_ensemble = self.transition_model.function( prior, noise=True, time_interval=time_interval) return Prediction.from_state(prior, pred_ensemble, timestamp=timestamp, transition_model=self.transition_model, prior=prior)