Discretizadores: Discretizer
El tipo abstracto Discretizer
está pensado como una interfaz a las estructuras que permitan trabajar con una Ecuación Diferencial Ordinaria autónoma (un sistema continuo) de la forma
\[x'(t) = f_p(x(t), \alpha(t))\]
donde $\alpha$ es una función de $t$ conocida, y transformarlo en uno discreto
\[x_{n+1} = \mathcal{M}_p(x_n, \alpha_n)\]
El subíndice $p$ denota la posible dependencia de $f$ de algunos parámetros. Esto se hace mediante métodos numéricos como Euler, Runge Kutta, etc.
Para que funcione correctamente deben implementarse los siguientes métodos:
Métodos a implementar | Breve descripción |
---|---|
(::Discretizer)(x::AbstractArray,u::Real) | El método debe poder ser evaluado en un estado y un control |
jacobian_x(ds::Discretizer, x, α) | Debe contarse con la derivada con respecto al estado. |
Usaremos Euler progresivo como un ejemplo de cómo implementar la interfaz.
Método Euler progresivo
Dada una condición inicial $x(0) = x_0$, y un paso de tiempo $\Delta t$, definimos $t_{n+1} = t_{n} + \Delta t$. Denotamos $\alpha_n := \alpha(t_n)$. Definimos la sucesión $\{x_n \}_n$, intentando que $x_n \approx x(t_{n+1})$, mediante la recursión
\[x_{n+1} = x_n + \Delta t f_p(x_n, \alpha_n) =: \mathcal{M}_p(x_n, \alpha_n)\]
Para definir el discretizador, usaremos además la información del diferencial con respecto a $x$ de $f_p$, ya que esto es útil más adelante a la hora de definir un filtro de kalman extendido.
KalmanFilter.Euler
— Typestruct Euler <: KalmanFilter.Discretizer
Define un Discretizer
con el método de Euler progresivo.
Campos
f
La función tal que $x' = f(x,\alpha, p)$, donde $x$ es el estado, $\alpha$ un control, y $p$ son parámetros extra.
Dxf
$D_x f (x,\alpha, p)$, el diferencial de $f$ con respecto a $x$.
p
Parámetros extra $p$.
dt
Tamaño del paso temporal $\Delta t$, tal que $t_{n+1} = t_n + \Delta t$.
Esto permite definir los dos métodos necesarios de la interfaz
(eu::Euler)(x, α) = x + eu.dt * eu.f(x, α , eu.p)
jacobian_x(eu::Euler, x, α) = I + eu.dt * eu.Dxf(x, α, eu.p)
Donde I
es la matriz identidad dada por el paquete LinearAlgebra
.