# MGpredictability
https://github.com/jTarigo/MGpredictability
###### tags: `Entregable 8`
En construcción.
## Deps
* DynamicalSystems
* Plots
* SparseArrays
* Peaks
* Statistics
## Implementado
* definir type: **AbstractSystem**. Definir type: **MackeyGlass_System <: AbstractSystem**. Definir struct: **MG**. Toma 4 parametros $\alpha$, $\Gamma$, $N$ y $n$ que definen totalmente el sistema de Mackey-Glass.
* definir type: **AbstractSolver**. Definir struct: **Solver <: AbstractSolver**. Toma 1 parametro $alg$ que define de que manera se va a resolver numericamente el sistema definido por **abstractSystem**.
* definir type: **AbstractTrajectory**. Definir struct: **Trajectory <: AbstractTrajectory**. Contiene dos vectores, uno codifica el tiempo y el otro la variable $x$ del sistema de Mackey-Glass.
Actual:
```julia
struct Trajectory <: AbstractTrajectory
t::AbstractVector
x::AbstractVector
end
```
* definir funciones: **eom!** y **jacobian!** que definen la ecuacion de movimiento y el jacobiano de Mackey-Glass
* definir funcion: **DynSys(S::abstractSystem, init_cond::AbstractVector, algoirithm = Solver("discrete"))**. Devuelve el sistema dinamico como variable del tipo DynamicalSystem del paquete 'DynamicalSystems.jl'.
* definir funcion: **TimeSeries(S::abstractSystem, $\Delta t$ = 200., Transient = 1000.)**. Evoluciona el sistema un tiempo *Transient* y luego guarda los valores de *t* y *x* desde *Transient* hasta *Transient $+ \; \Delta t$* en una variable del tipo **abstractTrajectory**.
* definir type: **AbstractAttractor**. Definir struct: **Attractor <: AbstractAttractor**. Contiene el numero de picos de un atractor como **Int64**, el periodo del mismo como **Float64** y el orden de los picos como **Vector{Int64}**.
* definir funcion: **defineAttractor(X::Trajectory)**. Devuelve el **Atractor** de la trayectoria **X**. Si la trayectoria es caotica devuelve **Attractor(-1, -1, [-1])**. Si la trayectoria es un punto fijo devuelve **Attractor(0, 0, [])**.
## Pendientes
* Integrar isospike digrams
* Explorar los distintos algoritmos de cuatificacion de la predictibilidad de sistemas de 'DynamicalSystems.jl', principalmente *'Entropies.permentropy'*, *'ChaosTools.lyapunovspectrum'*, *'ChaosTools.lyapunov'*, *'ChaosTools.lyapunov_from_data'* y *'ChaosTools.basin_entropy'*.
* Implementar **basin_entropy** ya que el de *DynamicalSystems* como esta no funciona para MG.
* Calcular exponentes de Lyapunov
## Preguntas