Unitful + DiffEq + different physical quantities + derivatives?

RecursiveArrayTools.jl has an ArrayPartition which usually works for this. For Example:

using Unitful, DifferentialEquations, RecursiveArrayTools, Plots, UnitfulRecipes

function f!(du, u, p, t)
    du[1] = p[1] * sin(2π * t * p[2])
    du[2] = u[1]
end

function setupProblem(amplitude, frequency)
    u0 = ArrayPartition([0.0u"m/s"], [0.0u"m"])
    p = [amplitude, frequency]
    problem = ODEProblem(f!, u0, (0.0u"s", 10.0u"s"), p)
end

prob = setupProblem(0.1u"m/s^2", 1.0u"Hz")
soln = solve(prob)
plot(soln, vars=(0, 2))
3 Likes