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)); }
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)); }