ensemble_kalman_filter
cuthbert.enkf.ensemble_kalman_filter
Implements the high-level Ensemble Kalman Filter (EnKF).
See Algorithm 10.2, Sanz-Alonso et al., Inverse Problems and Data Assimilation. Based in part on the CD-Dynamax implementation.
EnKFState
Bases: NamedTuple
Ensemble Kalman filter state.
key
instance-attribute
ensemble
instance-attribute
model_inputs
instance-attribute
log_normalizing_constant
instance-attribute
n_particles
property
Number of particles.
mean
property
Ensemble mean.
chol_cov
property
Generalised Cholesky factor of the ensemble sample covariance.
build_filter(init_sample, get_dynamics, get_observations, n_particles, inflation=0.0, perturbed_obs=True)
Builds an Ensemble Kalman Filter object.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
init_sample
|
InitSample
|
Function to sample from the initial distribution from key and model inputs. |
required |
get_dynamics
|
GetEnKFDynamics
|
Function to get dynamics function (x_t, key) -> x_{t+1} ~ p(x_{t+1} | x_t) from model inputs. |
required |
get_observations
|
GetEnKFObservations
|
Function to get observation function, chol_R, and y from model inputs. |
required |
n_particles
|
int
|
Number of particles. |
required |
inflation
|
float
|
Multiplicative inflation factor for ensemble deviations. |
0.0
|
perturbed_obs
|
bool
|
If True, use perturbed observations (stochastic EnKF). |
True
|
Returns:
| Type | Description |
|---|---|
Filter
|
Filter object for the EnKF. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
Source code in cuthbert/enkf/ensemble_kalman_filter.py
init_prepare(model_inputs, init_sample, n_particles, key=None)
Prepare the initial state for the EnKF.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model_inputs
|
ArrayTreeLike
|
Model inputs. |
required |
init_sample
|
InitSample
|
Function to sample from the initial distribution from key and model inputs. |
required |
n_particles
|
int
|
Number of particles. |
required |
key
|
KeyArray | None
|
JAX random key. |
None
|
Returns:
| Type | Description |
|---|---|
EnKFState
|
Initial EnKF state. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If key is None. |
Source code in cuthbert/enkf/ensemble_kalman_filter.py
filter_prepare(model_inputs, init_sample, n_particles, key=None)
Prepare a state for an EnKF step.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model_inputs
|
ArrayTreeLike
|
Model inputs. |
required |
init_sample
|
InitSample
|
Function to sample from the initial distribution from key and model inputs. |
required |
n_particles
|
int
|
Number of particles. |
required |
key
|
KeyArray | None
|
JAX random key. |
None
|
Returns:
| Type | Description |
|---|---|
EnKFState
|
Prepared EnKF state with dummy ensemble. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If key is None. |
Source code in cuthbert/enkf/ensemble_kalman_filter.py
filter_combine(state_1, state_2, get_dynamics, get_observations, inflation=0.0, perturbed_obs=True)
Combine previous EnKF state with prepared state for current step.
Implements the EnKF predict + update cycle.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
state_1
|
EnKFState
|
EnKF state from the previous time step. |
required |
state_2
|
EnKFState
|
EnKF state prepared for the current step. |
required |
get_dynamics
|
GetEnKFDynamics
|
Function to get dynamics function and chol_Q from model inputs. |
required |
get_observations
|
GetEnKFObservations
|
Function to get observation function, chol_R, and y from model inputs. |
required |
inflation
|
float
|
Multiplicative inflation factor. |
0.0
|
perturbed_obs
|
bool
|
If True, use perturbed observations. |
True
|
Returns:
| Type | Description |
|---|---|
EnKFState
|
Updated EnKF state. |