public static void ValidateProcess(IStochasticProcess process, IManifoldPoint point, double time, double eps, double tolerance)
        {
            var trivialEvolution = process.Apply(point, time: 0);

            Assert.That(process.StateSpace.GetTranslation(trivialEvolution.Expectation, point).Norm(), Is.LessThan(_tolerance));
            Assert.That(trivialEvolution.Covariance.FrobeniusNorm(), Is.LessThan(_tolerance));

            ValidateMappingDifferential(process.Apply(time), point, eps, tolerance);
        }
        public static StochasticManifoldPoint Apply(this IStochasticProcess process, StochasticManifoldPoint stochasticPoint, double time)
        {
            var diff       = process.ExpectationDifferential(stochasticPoint.Expectation, time);
            var prediction = process.Apply(stochasticPoint.Expectation, time);

            return(new StochasticManifoldPoint(prediction.Expectation, stochasticPoint.Covariance.Conjugate(diff) + prediction.Covariance));
        }
Beispiel #3
0
        public StochasticManifoldPoint Apply(IManifoldPoint point, double time)
        {
            var state = new State(point);

            var basePoint  = _baseProcess.Apply(state.BasePoint, time);
            var fiberPoint = FiberEvolution(state, basePoint, time);

            var answerExpectation = new ProductManifold.Point(basePoint.Expectation, fiberPoint.Point.Expectation);

            var answerCovariance = new SymmetricMatrix(_stateSpace.Dimension);

            answerCovariance.SetSubmatrix(0, basePoint.Covariance);
            answerCovariance.SetSubmatrix(_baseProcess.StateSpace.Dimension, fiberPoint.Point.Covariance);
            answerCovariance.SetSubmatrix(_baseProcess.StateSpace.Dimension, 0, fiberPoint.MixedCovariance);

            return(new StochasticManifoldPoint(answerExpectation, answerCovariance));
        }
 public void Predict(double time)
 {
     _estimate = _processModel.Apply(_estimate, time - _time);
     _time     = time;
 }
 public StochasticManifoldPoint Apply(IManifoldPoint point)
 {
     return(_process.Apply(point, _time));
 }