diabayes.solver.ODESolver.bayesian_inversion#
- ODESolver.bayesian_inversion(t: Float[Array, 'Nt'], mu: Float[Array, 'Nt'], noise_std: Float, y0: Variables, params: RSFParams | CNSParams, friction_constants: RSFConstants, block_constants: SpringBlockConstants | InertialSpringBlockConstants, Nparticles: int = 1000, Nsteps: int = 150, rng: None | int | Array = None) BayesianSolution [source]#
A Bayesian inversion routine using the Stein Variational Inference method.
- Parameters:
t (Array) – A vector or time values (in units of seconds). The time steps do not need to be uniform
mu (Array) – The observed friction curve sampled at
t
noise_std (Float) – An estimate of the standard deviation of the noise in the measured friction curve. A conservative value is recommended, i.e. if the noise has a standard deviation of $10^{-3}$, a good starting point would be to set
noise_std = 0.5e-3
y0 (Variables) – The initial values for the modelled friction and any state variables
params (_Params) – The initial guess for the invertible parameters that characterise the forward problem. It is recommended to use the result from
ODESolver.max_likelihood_inversion
. The prior distribution will be centered around this initial guessfriction_constants (_Constants) – The non-invertible constants that characterise the forward problem
block_constants (_BlockConstants) – The stress transfer constants (e.g. stiffness and loading rate)
Nparticles (int) – The number of particles (= posterior samples) to include. A higher value gives a more accurate estimation of the posterior distribution, at a higher computational cost.
Nsteps (int) – The number of iterations before convergence is expected to be achieved. It is recommended to start with a value of 100 and then see if an equilibrium was actually achieved. Increasing this value beyond the point of equilibrium does not do anything.
rng (None, int, jax.random.PRNGKey) – The random seed used to initialise the particle swarm distribution. If
None
, the current time will be used as a seed, which leads to different result for each realisation. When an integer is provided, a newjax.random.PRNGKey
is generated.
- Returns:
result – The result of the inversion incapsulated in a
BayesianSolution
container, which provides access to the full convergence chains, as well as diagnostic and visualisation routines.- Return type:
diabayes.BayesianSolution
Notes
This method is currently only compatible with standard rate-and-state friction models.