Actualizar el sistema: KalmanUpdater

El tipo abstracto KalmanUpdater está pensado como una interfaz a las estructuras que permitan actualizar el sistema desde un estado $x_{n}$ a un estado $x_{n+1}$. Se espera que sean, o bien lineales de la forma

\[x_{n+1} = M_n x_n + B_n u_n + F_n N_n\]

o bien, en caso de ser no lineales $x_{n+1} = \mathcal{M}(x_n, u_n)$, que puedan ser linealizados a la forma anterior.

Para que funciones correctamente deben implementarse los siguientes métodos:

Métodos a implementarBreve descripción
update!(L::KalmanUpdater, hatx, control)un método que permita actualizar al iterador y dejarlo listo para la siguiente iteración. Cuando se usan matrices $M_n := M, B_n := B, F_n:= F$ contantes se puede dejar en blanco, pero debería usarse, por ejemplo, para linearlizar en torno a $\hat{x}_n$ cuando se usa un KalmanUpdater no lineal.
Mn, Bn, FnDe la linearización en el estado actual
(::KalmanUpdater)(x::AbstractArray, u::Real, error)Debe poder evaluarse en esa firma. Por ejemplo, para el caso no lineal, udpater(x,u,ε) podría devolver $\mathcal{M}(x,u) + Fε$.

SimpleLinearUpdater

KalmanFilter.SimpleLinearUpdaterType
struct SimpleLinearUpdater{T} <: KalmanFilter.KalmanUpdater

Define un actualizador lineal constante.

Define un actualizador lineal del sistema, que permite calcular el estado $x_{n+1}$ a partir del estado $x_{n}$ y un control escalar $u_n$ según

\[x_{n+1} = M x_n + B u_n + F N_n\]

donde $N_n$ es un número aleatorio (dado por una variable aleatorio normal $\mathcal{N}(0,1)$).

Campos

  • M::AbstractArray{T,2} where T

    Matriz $M$

  • B::AbstractArray{T,1} where T

    Vector $B$

  • F::AbstractArray{T,1} where T

    Vector $F$

NLUpdater

KalmanFilter.NLUpdaterType
mutable struct NLUpdater <: KalmanFilter.KalmanUpdater

Define un actualizador dado por la discretización de una ODE.

Define un actualizador posiblemente no lineal del sistema, a partir de la discretización de una Ecuación Diferencial Ordinaria. Esto permite calcular el estado $x_{n+1}$ a partir del estado $x_{n}$ y el control $u_n$ según

\[x_{n+1} = \mathcal{M}(x_n, u_n) + F N_n\]

donde $N_n$ es un número aleatorio (dado por una variable aleatorio normal $\mathcal{N}(0,1)$) y $\mathcal{M}$ está dada por un Discretizer.