# Trying to use Measurement.jl with DifferentialEquations.jl

**URL:** <https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655>\
**Category:** Modelling & Simulations\
**Tags:** diffeq, differentiation, ode\
**Created:** [March 6, 2020, 6:35pm UTC](https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655 "2020-03-06T18:35:21Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Hossein\_Haghi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hossein_haghi/32/9413_2.png) [@Hossein\_Haghi](https://discourse.julialang.org/u/Hossein_Haghi)\
**Post date:** [March 6, 2020, 6:35pm UTC](https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655/1 "2020-03-06T18:35:21Z")

</div>

In the example below I am trying to use Measurement.jl with DiffernetialEquations.jl to solve an ODE with error propagation.

```julia
clearconsole()
@time using DifferentialEquations, Measurements, MATLAB

function Buckle(du,u,p,t)
R0, f, ps, kai, ks, Rbreak, sr0,alphapa=p
rhoL=998;
vL=1e-3;
c=1481;
pinf0=1.01e5;
k=7/5;

SR=0
if u[1]>=(R0/sqrt(sr0/kai +1))
    SR=@. kai*(((u[1]/(R0/sqrt(sr0/kai +1)))^2)-1)
elseif u[1]>= Rbreak*R0
    SR=S
end

du[1]=u[2];
du[2]=(1/(rhoL*u[1]))*(-1.5*rhoL*u[2]^2+(pinf0+2*sr0/R0)*((R0/u[1])^(3*k))*(1-3*k*u[2]/c)-4*vL*u[2]/u[1]-4*(ks/(1+alphapa*abs(u[2])/u[1]))*u[2]/(u[1]^2)-2*SR*exp(-kais*(u[1]/R0-1))/u[1]-pinf0-ps*sin(2*pi*f*t));

end
#################
### Parameters ##
#################
R0=1e-6
ps=10e3
f=1e6±0.001e-5

sr0=0.05
kai=1.8
kais=0
ks=1.8e-8
Rbreak=1.01
alphapa=0
###############
###############
###############
p=[R0, f, ps, kai, ks, Rbreak, sr0,alphapa,kais]
u0=[R0,0]
tspan=(0,1/f)
prob = ODEProblem(Buckle,u0,tspan,p)
@time sol = solve(prob,SSPRK104(),dt=1e-10,saveat=0.01/f,reltol=1e-10,abstol=1e-10)

```

I can only use `±` on `R0` in my parameter list. I encounter an error stating

```julia
MethodError: no method matching Float64(::Measurement{Float64})
Closest candidates are:
  Float64(::Real, !Matched::RoundingMode) where T<:AbstractFloat at rounding.jl:200
  Float64(::T) where T<:Number at boot.jl:718
  Float64(!Matched::Int8) at float.jl:60

```

when I try to include `±` for `ps`, `f`, `sr0`, `kai`, `kais`, `ks`, `Rbreak` and `alphapa`. Am I doing something wrong or is my model incompatible with this option?

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [March 6, 2020, 8:09pm UTC](https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655/2 "2020-03-06T20:09:22Z")

</div>

Make your initial condition be a Measurement so that the uncertainties can propagate along the solution.

---

<div class="post-metadata">

**Author:** ![Hossein\_Haghi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hossein_haghi/32/9413_2.png) [@Hossein\_Haghi](https://discourse.julialang.org/u/Hossein_Haghi)\
**Post date:** [March 6, 2020, 8:16pm UTC](https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655/3 "2020-03-06T20:16:16Z")

</div>

Like u0=[R0±0, 0±0] ?

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [March 6, 2020, 8:25pm UTC](https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655/4 "2020-03-06T20:25:44Z")

</div>

Yes, and probably also the time span:

```julia
tspan = (0 ± 0, 1 / f)

```

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [March 6, 2020, 8:32pm UTC](https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655/5 "2020-03-06T20:32:29Z")

</div>

> [@giordano](#):
>
> Yes, and probably also the time span:

You shouldn’t need to do that unless you’re using continuous event handling.

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [March 6, 2020, 8:40pm UTC](https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655/6 "2020-03-06T20:40:58Z")

</div>

`f` is already a `Measurement` though

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [March 6, 2020, 8:48pm UTC](https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655/7 "2020-03-06T20:48:08Z")

</div>

Oh, then it should just promote correctly anyways.

---

<div class="post-metadata">

**Author:** ![Hossein\_Haghi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hossein_haghi/32/9413_2.png) [@Hossein\_Haghi](https://discourse.julialang.org/u/Hossein_Haghi)\
**Post date:** [March 6, 2020, 9:00pm UTC](https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655/8 "2020-03-06T21:00:47Z")

</div>

> [@ChrisRackauckas](#):
>
> Make your initial condition be a Measurement so that the uncertainties can propagate along the solution.

Thank you. This solved the issue.

---

<div class="post-metadata">

**Author:** ![Hossein\_Haghi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hossein_haghi/32/9413_2.png) [@Hossein\_Haghi](https://discourse.julialang.org/u/Hossein_Haghi)\
**Post date:** [March 6, 2020, 9:13pm UTC](https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655/9 "2020-03-06T21:13:05Z")

</div>

this works well without a `callback` now. what should I change to make it compatible with `DiffEqCallbacks`?

```julia
using DiffEqCallbacks
u0=[R0±0,0±0]
tspan=(0,1/f)
saved_values = SavedValues(Float64, Array{Float64})
cb = SavingCallback((u,t,integrator)->integrator(t,Val{1}), saved_values, saveat = 0:0.01/f:1/f)
prob = ODEProblem(Buckle,u0,tspan,p)
@time sol = solve(prob,SSPRK104(),dt=1e-11,saveat=0.01/f,reltol=1e-10,abstol=1e-10,callback=cb)

```

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [March 6, 2020, 9:57pm UTC](https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655/10 "2020-03-06T21:57:15Z")

</div>

> [@Hossein\_Haghi](#):
>
> saved\_values = SavedValues(Float64, Array{Float64})

You just said right here that the solution should be a `Float64`, but you want it to be a Measurement.

---

<div class="post-metadata">

**Author:** ![Hossein\_Haghi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hossein_haghi/32/9413_2.png) [@Hossein\_Haghi](https://discourse.julialang.org/u/Hossein_Haghi)\
**Post date:** [March 6, 2020, 10:12pm UTC](https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655/11 "2020-03-06T22:12:24Z")

</div>

> [@ChrisRackauckas](#):
>
> You just said right here that the solution should be a `Float64` , but you want it to be a Measurement.

So how do I change it to `Measurement`? It might be obvious but I’m a rookie at Julia now.

---

<div class="post-metadata">

**Author:** ![Hossein\_Haghi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hossein_haghi/32/9413_2.png) [@Hossein\_Haghi](https://discourse.julialang.org/u/Hossein_Haghi)\
**Post date:** [March 6, 2020, 10:14pm UTC](https://discourse.julialang.org/t/trying-to-use-measurement-jl-with-differentialequations-jl/35655/12 "2020-03-06T22:14:23Z")

</div>

I think I found it

```julia
saved_values = SavedValues(Float64, Array{Measurement{Float64}})

```

fixes it
