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.

See also

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[5])
<(1,) Normal with dtype=float64>
>>> print(solution[5].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.
Returns:

Probabilistic estimate of the continuous-time solution at time t.

Return type:

RandomVariable