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 implementar | Breve 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 , Fn | De 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.SimpleLinearUpdater
— Typestruct 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.NLUpdater
— Typemutable 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
.