{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Julia and DifferentialEquations.jl\n", "\n", "## Chris Rackauckas, \n", "\n", "## MIT, University of Maryland, UC Irvine" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Julia's in a nutshell: it's like R/MATLAB/Python, but faster!\n", "\n", "#### But there is a lot more than that!\n", "\n", "![benchmarks](https://julialang.org/images/benchmarks.svg)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Julia has fantastic language interopability\n", "\n", "Julia has macros and code generation tools which are utilized by interop packages for seamless integration.\n", "\n", "![interop](https://github.com/UCIDataScienceInitiative/IntroToJulia/raw/master/assets/Julia_Interop_Test.jpg-large)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Julia's Syntax is Familiar\n", "\n", "Source: Higham: An Algorithmic Introduction to Numerical Simulation of Stochastic Differential Equations" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "%BPATH1 Brownian path simulation\n", "function [t,W]=BPATH1(T,N)\n", "randn('state',100)\n", "dt = T/N;\n", "dW = zeros(10,N);\n", "W = zeros(10,N);\n", "\n", "dW(:,1) = sqrt(dt)*randn(1,10);\n", "W(:,1) = dW(:,1);\n", "\n", "for j = 2:N\n", " dW(:,j) = sqrt(dt)*randn(1,10);\n", " W(:,j) = W(:,j-1) + dW(:,j);\n", "end\n", "t = [0:dt:T-dt];\n", "end\n", "\n", "% In Another File...\n", "\n", "f = @() BPATH1(1,10000);\n", "timeit(f,2)\n", "[t,W] = BPATH1(1,10000);\n", "plot(t,W,'r-')\n", "xlabel('t','FontSize',16)\n", "ylabel('W(t)','FontSize',16,'Rotation',0)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 1.530038 seconds (1.99 M allocations: 155.214 MiB, 12.95% gc time)\n", " 0.187599 seconds (500.01 k allocations: " ] }, { "data": { "text/html": [ " \n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "80.872 MiB, 50.71% gc time)\n" ] }, { "data": { "image/png": "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" }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using Random\n", "function bpath(T,N)\n", " Random.seed!(100)\n", " dt = T/N\n", " dW = zeros(10,N)\n", " W = zeros(10,N)\n", "\n", " dW[:,1] = sqrt(dt)*randn(10)\n", " W[:,1] = dW[:,1]\n", "\n", " for j = 2:N\n", " dW[:,j] .= sqrt(dt)*randn(10)\n", " W[:,j] .= W[:,j-1] .+ dW[:,j]\n", " end\n", " [0:dt:T-dt],W\n", "end # Translation took < 1 minute\n", "@time t,W = bpath(1,100000)\n", "@time t,W = bpath(1,100000)\n", "# 10x speedup over MATLAB\n", "using Plots; gr(fmt = :png)\n", "plot(t,W',color=:red,xlabel=\"t\",ylabel=\"W(t)\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Julia's Syntax is Concise and Mathematical\n", "\n", "[MATLAB, Julia, Python Syntax Comparison](http://cheatsheets.quantecon.org/)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Julia's Engineering and Design Tradeoffs\n", "\n", "- Type structures cannot be changed after created (less dynamism but memory layout can be optimized for)\n", "- All functions are JIT compiled via LLVM (interactive lags but massive runtime improvements)\n", "- All functions specialize on the types of arguments (more compilation but gives generic programming structures)\n", "- Julia is interactive (use it like MATLAB/Python/R, but makes it harder to get binaries)\n", "- Julia has great methods for handling mutation (more optimization opportunities like C/Fortran, but more cognative burden)\n", "- Julia's Base library and most packages are written in Julia (you can understand the source, but learn a new package)\n", "- Julia has extensive tooling for code generation and metaprogramming (concise and more optimizations, but some codes can be for experienced users)\n", "\n", "To me, this gives me a language with a lot of depth which works well for computationally-expensive scientific computing applications." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Julia is about Generic Programming for Speed\n", "\n", "## Object-Oriented Programming: R/Python/C++. Centered around building representations of data\n", "\n", "## Type-Dispatch Programming: Julia. Centered around implementing the generic template of the algorithm, and letting the data type choose how to efficiently implement the algorithm\n", "\n", "### Result: algorithms and packages automatically compose in an efficient way, and using the high level abstractions of the language is a proper and efficient way to design scalable codes!" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "; Function f\n", "; Location: In[1]:1\n", "; Function Attrs: uwtable\n", "define i64 @julia_f_34741(i64, i64) #0 {\n", "top:\n", "; Function +; {\n", "; Location: int.jl:53\n", " %2 = add i64 %1, %0\n", ";}\n", " ret i64 %2\n", "}\n", "\n", "; Function f\n", "; Location: In[1]:1\n", "; Function Attrs: uwtable\n", "define double @julia_f_34744(double, double) #0 {\n", "top:\n", "; Function +; {\n", "; Location: float.jl:395\n", " %2 = fadd double %0, %1\n", ";}\n", " ret double %2\n", "}\n" ] } ], "source": [ "f(x,y) = x + y\n", "@code_llvm f(1,1)\n", "@code_llvm f(1.0,1.0)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# DifferentialEquations.jl\n", "\n", "DifferentialEquations.jl is the core differential equation solver package in Julia. In a nutshell, it provides solvers for:\n", "\n", "- ODEs\n", "- DAEs\n", "- SODEs, SDAEs\n", "- Discrete stochastic (Gillespie) equations, mixed with ODEs/SDEs (jump diffusions)\n", "- DDEs\n", "- PDEs\n", "\n", "It provides wrappers to the common C++ and Fortran libraries, along with native Julia implementations with efficient genric algorithms." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Case Study: Lotka-Volterra in many ways\n", "\n", "First, the basic ODE with functions" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0\n", "\n", "\n", "2\n", "\n", "\n", "4\n", "\n", "\n", "6\n", "\n", "\n", "8\n", "\n", "\n", "10\n", "\n", "\n", "1\n", "\n", "\n", "2\n", "\n", "\n", "3\n", "\n", "\n", "4\n", "\n", "\n", "5\n", "\n", "\n", "6\n", "\n", "\n", "7\n", "\n", "\n", "t\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "u1(t)\n", "\n", "\n", "\n", "u2(t)\n", "\n", "\n" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using DifferentialEquations\n", "function f(du,u,p,t)\n", " x, y = u\n", " α,β,γ,δ = p\n", " du[1] = α*x - β*x*y\n", " du[2] = -γ*y + δ*x*y\n", "end\n", "p = (1.5,1.0,3.0,1.0); u0 = [1.0;1.0]\n", "tspan = (0.0,10.0)\n", "prob1 = ODEProblem(f,u0,tspan,p)\n", "sol = solve(prob1)\n", "using Plots; plot(sol)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## DSLs and Metaprogramming for Syntactic Sugar\n", "\n", "Now let's use a DSL defined by a macro:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "f = @ode_def LotkaVolterra begin\n", " dx = α*x - β*x*y\n", " dy = -γ*y + δ*x*y\n", "end α β γ δ\n", "\n", "f = @ode_def LotkaVolterra begin\n", " d🐁 = α*🐁 - β*🐁*🐈\n", " d🐈 = -γ*🐈 + δ*🐁*🐈\n", "end α β γ δ\n", "\n", "sir_model = @reaction_network SIR begin\n", " c1, s + i --> 2i\n", " c2, i --> r\n", "end c1 c2" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Using Generic Algorithms for Optimizations\n", "\n", "Let's specialize the speed of the integrator for small array equations by utilizing static arrays" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "using StaticArrays\n", "static_u0 = @SVector [1.0,1.0]\n", "function f2(u,p,t)\n", " x, y = u\n", " α,β,γ,δ = p\n", " @SVector [α*x - β*x*y, -γ*y + δ*x*y]\n", "end\n", "prob2 = ODEProblem(f2,static_u0,tspan,p)\n", "sol = solve(prob2);" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "BenchmarkTools.Trial: \n", " memory estimate: 66.47 KiB\n", " allocs estimate: 509\n", " --------------\n", " minimum time: 64.944 μs (0.00% GC)\n", " median time: 123.846 μs (0.00% GC)\n", " mean time: 166.556 μs (11.31% GC)\n", " maximum time: 9.024 ms (95.28% GC)\n", " --------------\n", " samples: 10000\n", " evals/sample: 1" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using BenchmarkTools\n", "@benchmark solve(prob1)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "BenchmarkTools.Trial: \n", " memory estimate: 66.83 KiB\n", " allocs estimate: 243\n", " --------------\n", " minimum time: 48.330 μs (0.00% GC)\n", " median time: 88.355 μs (0.00% GC)\n", " mean time: 116.859 μs (10.88% GC)\n", " maximum time: 8.732 ms (96.34% GC)\n", " --------------\n", " samples: 10000\n", " evals/sample: 1" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@benchmark solve(prob2)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Optimize the Solver By Choosing from the Largest Set of Methods\n", "\n", "http://docs.juliadiffeq.org/latest/solvers/ode_solve.html\n", "\n", "https://github.com/JuliaDiffEq/DiffEqBenchmarks.jl" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "BenchmarkTools.Trial: \n", " memory estimate: 56.77 KiB\n", " allocs estimate: 119\n", " --------------\n", " minimum time: 22.656 μs (0.00% GC)\n", " median time: 49.840 μs (0.00% GC)\n", " mean time: 62.234 μs (14.02% GC)\n", " maximum time: 4.155 ms (97.28% GC)\n", " --------------\n", " samples: 10000\n", " evals/sample: 1" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@benchmark solve(prob2,Vern9())" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "BenchmarkTools.Trial: \n", " memory estimate: 63.77 KiB\n", " allocs estimate: 765\n", " --------------\n", " minimum time: 143.481 μs (0.00% GC)\n", " median time: 233.346 μs (0.00% GC)\n", " mean time: 278.571 μs (7.13% GC)\n", " maximum time: 8.286 ms (94.75% GC)\n", " --------------\n", " samples: 10000\n", " evals/sample: 1" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using LSODA\n", "@benchmark solve(prob1,lsoda()) # Default method of SciPy, deSolve, etc." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Generic Algorithms to Propogate Uncertainty" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "scrolled": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0\n", "\n", "\n", "2\n", "\n", "\n", "4\n", "\n", "\n", "6\n", "\n", "\n", "8\n", "\n", "\n", "10\n", "\n", "\n", "0\n", "\n", "\n", "2\n", "\n", "\n", "4\n", "\n", "\n", "6\n", "\n", "\n", "8\n", "\n", "\n", "t\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "u1(t)\n", "\n", "\n", "\n", "u2(t)\n", "\n", "\n" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using Measurements\n", "u0 = [1.0 ± 0.0 ,1.0 ± 0.0]\n", "p = (1.5 ± 0.0,1.0 ± 0.1,3.0 ± 0.2,1.0 ± 0.1)\n", "prob_error = ODEProblem(f,u0,tspan,p)\n", "sol = solve(prob_error,Tsit5(), saveat=0.2)\n", "plot(sol)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Generic Algorithms to Calculate Sensitivities" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0.0\n", "\n", "\n", "2.5\n", "\n", "\n", "5.0\n", "\n", "\n", "7.5\n", "\n", "\n", "10.0\n", "\n", "\n", "-30\n", "\n", "\n", "-20\n", "\n", "\n", "-10\n", "\n", "\n", "0\n", "\n", "\n", "10\n", "\n", "\n", "20\n", "\n", "\n", "dx/da\n", "\n", "\n", "Time\n", "\n", "\n", "\n", "\n", "\n", "\n", "y1\n", "\n", "\n" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using ForwardDiff: Dual\n", "p1dual = Dual{Float64}(1.5, (1.0, 0.0))\n", "p2dual = Dual{Float64}(1.0, (0.0, 1.0))\n", "pdual = (p1dual, p2dual, 3.0, 1.0)\n", "u0 = [Dual{Float64}(1.0, (0.0, 0.0)),Dual{Float64}(1.0, (0.0, 0.0))]\n", "prob_dual = ODEProblem(f,u0,tspan,pdual)\n", "sol_dual = solve(prob_dual,Tsit5(), saveat=0.2)\n", "\n", "timepoints = [i for i in sol_dual.t]\n", "sensitivity_forward_diff = [i[1].partials.values[1] for i in sol_dual.u]\n", "Plots.plot(timepoints,sensitivity_forward_diff,title=\"dx/da\",lw=3,xaxis=\"Time\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Generic Algorithms for Arbitrary Precision" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "2-element Array{BigFloat,1}:\n", " 1.010967945441596789719381858565413753168637694636043181123471126802488483367416 \n", " 9.590701157969237149065086474592525107928794966861429243883755987604756818548128e-01" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p = big.((1.5,1.0,3.0,1.0)); u0 = big.([1.0,1.0])\n", "tspan = big.((0.0,10.0))\n", "prob1 = ODEProblem(f,u0,tspan,p)\n", "sol = solve(prob1,Vern9(),abstol=1e-25,reltol=1e-25)\n", "sol[10]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Generic Algorithms for Units" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "ename": "Unitful.DimensionError", "evalue": "DimensionError: 1.5 kg s^-1 and 1.0 kg^2 s^-1 are not dimensionally compatible.", "output_type": "error", "traceback": [ "DimensionError: 1.5 kg s^-1 and 1.0 kg^2 s^-1 are not dimensionally compatible.", "", "Stacktrace:", " [1] -(::Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1), Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1)),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))}}}, ::Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(2//1), Unitful.Dimension{:Time}(-1//1))},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 2//1), Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1)),Unitful.Dimensions{(Unitful.Dimension{:Mass}(2//1), Unitful.Dimension{:Time}(-1//1))}}}) at C:\\Users\\Chris Rackauckas\\.julia\\dev\\Unitful\\src\\quantities.jl:85", " [2] f(::Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1), Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1)),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))}}},1}, ::Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1}, ::NTuple{4,Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)}}}}, ::Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}}) at .\\In[32]:5", " [3] (::ODEFunction{true,typeof(f),LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing})(::Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1), Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1)),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))}}},1}, ::Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1}, ::Vararg{Any,N} where N) at C:\\Users\\Chris Rackauckas\\.julia\\dev\\DiffEqBase\\src\\diffeqfunction.jl:106", " [4] initialize!(::OrdinaryDiffEq.ODEIntegrator{Tsit5,Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},NTuple{4,Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)}}}},Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)}}},Float64,Float64,Array{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1), Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1)),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))}}},1},1},ODESolution{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},2,Array{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},1},Nothing,Nothing,Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},1},Array{Array{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1), Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1)),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))}}},1},1},1},ODEProblem{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Tuple{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}}},true,NTuple{4,Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)}}}},ODEFunction{true,typeof(f),LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Nothing,DiffEqBase.StandardODEProblem},Tsit5,OrdinaryDiffEq.InterpolationData{ODEFunction{true,typeof(f),LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Array{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},1},Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},1},Array{Array{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1), Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1)),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))}}},1},1},1},OrdinaryDiffEq.Tsit5Cache{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1), Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1)),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))}}},1},Array{Float64,1},OrdinaryDiffEq.Tsit5ConstantCache{Float64,Float64}}}},ODEFunction{true,typeof(f),LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},OrdinaryDiffEq.Tsit5Cache{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1), Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1)),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))}}},1},Array{Float64,1},OrdinaryDiffEq.Tsit5ConstantCache{Float64,Float64}},OrdinaryDiffEq.DEOptions{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Float64,Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},typeof(DiffEqBase.ODE_DEFAULT_NORM),typeof(LinearAlgebra.opnorm),CallbackSet{Tuple{},Tuple{}},typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN),typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE),typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK),DataStructures.BinaryHeap{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},DataStructures.LessThan},DataStructures.BinaryHeap{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},DataStructures.LessThan},Nothing,Nothing,Int64,Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},1},Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},1},Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},1}},Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1), Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1)),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))}}},1}}, ::OrdinaryDiffEq.Tsit5Cache{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1), Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1)),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1), Unitful.Dimension{:Time}(-1//1))}}},1},Array{Float64,1},OrdinaryDiffEq.Tsit5ConstantCache{Float64,Float64}}) at C:\\Users\\Chris Rackauckas\\.julia\\dev\\OrdinaryDiffEq\\src\\perform_step\\low_order_rk_perform_step.jl:580", " [5] #__init#203(::Int64, ::Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},1}, ::Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},1}, ::Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},1}, ::Nothing, ::Bool, ::Nothing, ::Bool, ::Bool, ::Nothing, ::Bool, ::Bool, ::Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}}, ::Bool, ::Rational{Int64}, ::Nothing, ::Nothing, ::Int64, ::Rational{Int64}, ::Int64, ::Int64, ::Rational{Int64}, ::Bool, ::Int64, ::Nothing, ::Nothing, ::Int64, ::Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}}, ::Float64, ::typeof(DiffEqBase.ODE_DEFAULT_NORM), ::typeof(LinearAlgebra.opnorm), ::typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), ::typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Int64, ::String, ::typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), ::Nothing, ::Bool, ::Bool, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(DiffEqBase.__init), ::ODEProblem{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Tuple{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}}},true,NTuple{4,Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)}}}},ODEFunction{true,typeof(f),LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Nothing,DiffEqBase.StandardODEProblem}, ::Tsit5, ::Array{Any,1}, ::Array{Any,1}, ::Array{Any,1}, ::Type{Val{true}}) at C:\\Users\\Chris Rackauckas\\.julia\\dev\\OrdinaryDiffEq\\src\\solve.jl:260", " [6] __init(::ODEProblem{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Tuple{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}}},true,NTuple{4,Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)}}}},ODEFunction{true,typeof(f),LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Nothing,DiffEqBase.StandardODEProblem}, ::Tsit5, ::Array{Any,1}, ::Array{Any,1}, ::Array{Any,1}, ::Type{Val{true}}) at C:\\Users\\Chris Rackauckas\\.julia\\dev\\OrdinaryDiffEq\\src\\solve.jl:61", " [7] #__solve#202(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::ODEProblem{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Tuple{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}}},true,NTuple{4,Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)}}}},ODEFunction{true,typeof(f),LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Nothing,DiffEqBase.StandardODEProblem}, ::Tsit5, ::Array{Any,1}, ::Array{Any,1}, ::Array{Any,1}, ::Type{Val{true}}) at C:\\Users\\Chris Rackauckas\\.julia\\dev\\OrdinaryDiffEq\\src\\solve.jl:6", " [8] __solve at C:\\Users\\Chris Rackauckas\\.julia\\dev\\OrdinaryDiffEq\\src\\solve.jl:6 [inlined] (repeats 3 times)", " [9] #solve#429(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::ODEProblem{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Tuple{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}}},true,NTuple{4,Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)}}}},ODEFunction{true,typeof(f),LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Nothing,DiffEqBase.StandardODEProblem}, ::Tsit5) at C:\\Users\\Chris Rackauckas\\.julia\\dev\\DiffEqBase\\src\\solve.jl:37", " [10] solve(::ODEProblem{Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1},Tuple{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}},Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}}},true,NTuple{4,Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Second,Unitful.Dimensions{(Unitful.Dimension{:Time}(1//1),)}}(0, -1//1),),Unitful.Dimensions{(Unitful.Dimension{:Time}(-1//1),)}}}},ODEFunction{true,typeof(f),LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Nothing,DiffEqBase.StandardODEProblem}, ::Tsit5) at C:\\Users\\Chris Rackauckas\\.julia\\dev\\DiffEqBase\\src\\solve.jl:25", " [11] top-level scope at In[62]:5" ] } ], "source": [ "using Unitful\n", "p = (1.5,1.0,3.0,1.0)./u\"s\"; u0 = [1.0u\"kg\",1.0u\"kg\"]\n", "tspan = (0.0u\"s\",10.0u\"s\")\n", "prob_units = ODEProblem(f,u0,tspan,p)\n", "sol = solve(prob_units,Tsit5())" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "(2.2640893954264825 s, Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}}[4.39301 kg, 4.19467 kg])" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#= \n", "f = @ode_def LotkaVolterra begin\n", " d🐁 = α*🐁 - β*🐁*🐈\n", " d🐈 = -γ*🐈 + δ*🐁*🐈\n", "end α β γ δ\n", "=#\n", "p = (1.5,1.0/u\"kg\",3.0,1.0/u\"kg\")./u\"s\"; u0 = [1.0u\"kg\",1.0u\"kg\"]\n", "tspan = (0.0u\"s\",10.0u\"s\")\n", "prob_units = ODEProblem(f,u0,tspan,p)\n", "sol = solve(prob_units,Tsit5())\n", "sol.t[10],sol[10]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Other Features of DifferentialEquations.jl" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## The solution is a continuous function by default" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "2-element Array{Quantity{Float64,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)},Unitful.FreeUnits{(Unitful.Unit{:Gram,Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}(3, 1//1),),Unitful.Dimensions{(Unitful.Dimension{:Mass}(1//1),)}}},1}:\n", " 5.338696330932268 kg\n", " 3.608369936346481 kg" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sol(5.5u\"s\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Easily Change to Stochastic Differential Equations" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0\n", "\n", "\n", "2\n", "\n", "\n", "4\n", "\n", "\n", "6\n", "\n", "\n", "8\n", "\n", "\n", "10\n", "\n", "\n", "0\n", "\n", "\n", "2\n", "\n", "\n", "4\n", "\n", "\n", "6\n", "\n", "\n", "t\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "u1(t)\n", "\n", "\n", "\n", "u2(t)\n", "\n", "\n" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using DifferentialEquations\n", "function g(du,u,p,t)\n", " du[1] = 0.2u[1]\n", " du[2] = 0.2u[2]\n", "end\n", "p = (1.5,1.0,3.0,1.0); u0 = [1.0;1.0]\n", "tspan = (0.0,10.0)\n", "prob1 = SDEProblem(f,g,u0,tspan,p)\n", "sol = solve(prob1)\n", "using Plots; plot(sol)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## And Delay Differential Equations" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0\n", "\n", "\n", "2\n", "\n", "\n", "4\n", "\n", "\n", "6\n", "\n", "\n", "8\n", "\n", "\n", "10\n", "\n", "\n", "0\n", "\n", "\n", "1\n", "\n", "\n", "2\n", "\n", "\n", "3\n", "\n", "\n", "4\n", "\n", "\n", "5\n", "\n", "\n", "t\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "u1(t)\n", "\n", "\n", "\n", "u2(t)\n", "\n", "\n" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function f(du,u,h,p,t)\n", " x, y = u\n", " α,β,γ,δ = p\n", " du[1] = α*h(p,t-1)[1] - β*x*y\n", " du[2] = -γ*y + δ*x*y\n", "end\n", "p = (1.5,1.0,3.0,1.0); u0 = [1.0;1.0]\n", "tspan = (0.0,10.0)\n", "_h(p,t) = ones(2)\n", "prob1 = DDEProblem(f,u0,_h,tspan,p)\n", "sol = solve(prob1)\n", "using Plots; plot(sol)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Usable from R, Python, and the Web!\n", "\n", "- diffeqr (R) : https://cran.r-project.org/web/packages/diffeqr/index.html\n", "- diffeqpy (Python) : https://github.com/JuliaDiffEq/diffeqpy\n", "- DifferentialEquations.jl Online (Web Browser): http://app.juliadiffeq.org/\n", "- Interact.jl + WebAssembly.jl: Compile DifferentialEquations.jl models to the browser!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## DifferentialEquations.jl has a large active developer-base\n", "\n", "#### Let us know what you need!" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Julia 1.0.0", "language": "julia", "name": "julia-1.0" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.0.0" } }, "nbformat": 4, "nbformat_minor": 2 }