# Extensibility of the language

## DifferentialEquations

A package for solving differential equations, similar to `odesolve`

in Matlab.

Example:

```
using DifferentialEquations
function lotka_volterra(du,u,p,t)
x, y = u
α, β, δ, γ = p
du[1] = dx = α*x - β*x*y
du[2] = dy = -δ*y + γ*x*y
end
u0 = [1.0,1.0]
tspan = (0.0,10.0)
p = [1.5,1.0,3.0,1.0]
prob = ODEProblem(lotka_volterra,u0,tspan,p)
sol = solve(prob)
using Plots
plot(sol)
```

## Measurements

A package defining "numbers with precision" and complete algebra on these numbers:

```
using Measurements
a = 4.5 ± 0.1
b = 3.8 ± 0.4
2a + b
sin(a)/cos(a) - tan(a)
```

It also defines recipes for Plots.jl how to plot such numbers.

## Starting ODE from an interval

```
using Measurements
u0 = [1.0±0.1,1.0±0.01]
prob = ODEProblem(lotka_volterra,u0,tspan,p)
sol = solve(prob)
plot(sol,denseplot=false)
```

- all algebraic operations are defined,
- passes all grid refinement techniques
- plot uses the correct plotting for intervals

## Integration with other toolkits

Flux: toolkit for modelling Neural Networks. Neural network is a function.

- integration with Measurements,
- Integration with ODE (think of NN as part of the ODE)

Turing: Probabilistic modelling toolkit

- integration with FLux (NN)
- interation with ODE
- using arbitrary bijective transformations, Bijectors.jl