# ODESolution¶

class probnum.diffeq.ODESolution(times, rvs, solver)[source]

Bases: probnum.filtsmooth.filtsmoothposterior.FiltSmoothPosterior

Gaussian IVP filtering solution of an ODE problem

Parameters: times (array_like) – Times of the discrete-time solution. rvs (list of RandomVariable) – Estimated states (in the state-space model view) of the discrete-time solution. solver (GaussianIVPFilter) – Solver used to compute the discrete-time solution.

GaussianIVPFilter
ODE solver that behaves like a Gaussian filter.
KalmanPosterior
Posterior over states after Gaussian filtering/smoothing.

Examples

>>> from probnum.diffeq import logistic, probsolve_ivp
>>> from probnum import random_variables as rvs
>>> initrv = rvs.Dirac(0.15)
>>> ivp = logistic(timespan=[0., 1.5], initrv=initrv, params=(4, 1))
>>> solution = probsolve_ivp(ivp, method="ekf0", step=0.1)
>>> # Mean of the discrete-time solution
>>> print(solution.y.mean())
[[0.15      ]
[0.2076198 ]
[0.27932997]
[0.3649165 ]
[0.46054129]
[0.55945475]
[0.65374523]
[0.73686744]
[0.8053776 ]
[0.85895587]
[0.89928283]
[0.92882899]
[0.95007559]
[0.96515825]
[0.97577054]
[0.9831919 ]]
>>> # Times of the discrete-time solution
>>> print(solution.t)
[0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.  1.1 1.2 1.3 1.4 1.5]
>>> # Individual entries of the discrete-time solution can be accessed with
>>> print(solution)
<(1,) Normal with dtype=float64>
>>> print(solution.mean)
[0.55945475]
>>> # Evaluate the continuous-time solution at a new time point t=0.65
>>> print(solution(0.65).mean)
[0.69702861]


Attributes Summary

 dy Derivatives of the discrete-time solution t Times of the discrete-time solution y Probabilistic discrete-time solution

Methods Summary

 __call__(t[, smoothed]) Evaluate the time-continuous solution at time t.

Attributes Documentation

dy

Derivatives of the discrete-time solution

Type: list of RandomVariable
t

Times of the discrete-time solution

Type: np.ndarray
y

Probabilistic discrete-time solution

Probabilistic discrete-time solution at times $$t_1, ..., t_N$$, as a list of random variables. To return means and covariances use y.mean and y.cov.

Type: list of RandomVariable

Methods Documentation

__call__(t, smoothed=True)[source]

Evaluate the time-continuous solution at time t.

KalmanPosterior.__call__ does the main algorithmic work to return the posterior for a given location. All that is left to do here is to (1) undo the preconditioning, and (2) to slice the state_rv in order to return only the rv for the function value.

Parameters: t (float) – Location / time at which to evaluate the continuous ODE solution. smoothed (bool, optional) – If True (default) perform smooth interpolation. If False perform a prediction from the previous location, without smoothing. Probabilistic estimate of the continuous-time solution at time t. RandomVariable