Recent advancements in differential equation solver software
October 16 2019 in Differential Equations, Julia, Mathematics, Scientific ML, Uncategorized | Tags: | Author: Christopher Rackauckas
This was a talk given at the Modelica Jubilee Symposium – Future Directions of System Modeling and Simulation.
Recent Advancements in Differential Equation Solver Software
Since the time of the ancient Fortran methods like dop853 and DASSL were created, many advancements in numerical analysis, computational methods, and hardware have accelerated computing. However, many applications of differential equations still rely on the same older software, possibly to their own detriment. In this talk we will describe the recent advancements being made in differential equation solver software, focusing on the Julia-based DifferentialEquations.jl ecosystem. We will show how high order Rosenbrock and IMEX methods have been proven advantageous over traditional BDF implementations in certain problem domains, and the types of issues that give rise to general performance characteristics between the methods. Extensions of these solver … READ MORE
Scientific AI: Domain Models with Integrated Machine Learning
July 25 2019 in Uncategorized | Tags: | Author: Christopher Rackauckas
Modeling practice seems to be partitioned into scientific models defined by mechanistic differential equations and machine learning models defined by parameterizations of neural networks. While the ability for interpretable mechanistic models to extrapolate from little information is seemingly at odds with the big data “model-free” approach of neural networks, the next step in scientific progress is to utilize these methodologies together in order to emphasize their strengths while mitigating weaknesses. In this talk we will describe four separate ways that we are merging differential equations and deep learning through the power of the DifferentialEquations.jl and Flux.jl libraries. Data-driven hypothesis generation of model structure, automated real-time control of dynamical systems, accelerated of PDE solving, and memory-efficient deep learning workflows will all shown to be derived from this common computational structure of … READ MORE
Zero-Cost Abstractions in Julia: Indexing Vectors by Name with LabelledArrays
November 12 2018 in Uncategorized | Tags: | Author: Christopher Rackauckas
The ability to build robust array type abstractions without overhead is one of the most fantastic features of Julia. It can be surprising how much one can do with the idea of an array to end up with better code. In this blog post I want to show how you can utilize Julia’s interface tools and @generated functions to build these kinds of zero-cost abstractions.
What is a zero-cost abstraction?
First let’s define a zero-cost abstraction. A zero-abstraction is a coding tool that has a zero run time cost associated with using it. Essentially what it does is it transforms into the fastest possible code during compilation so that its use has no effect on the run time of your code.
Example: Diagonal Matrices
A quick example is simple type wrappers in Julia. An example of this from the standard library is the Diagonal … READ MORE
The Nonlinear Effect of Code Speed on Productivity
October 29 2018 in Uncategorized | Tags: | Author: Christopher Rackauckas
I obsess over code performance, probably a little bit too much. But there’s a big reason for wanting a code to run in less than an hour instead of slightly more than two hours. The reason is because a code’s speed interacts with how we go about our day, and this speed can have a nonlinear effect on our productivity.
Here’s a concrete example. When I was a PhD student, I had a project which was solving ensembles of stochastic partial differential equations which were a model of the zebrafish hindbrain. Each run of this ensemble took about two hours and ten minutes to perform. For a good chunk of time, I needed to keep running these ensembles in order to manually check the output to tweak the model until it started to look realistic. Tweaking the model took only a … READ MORE
Solving Partial Differential Equations with Julia
August 8 2018 in Differential Equations, HPC, Julia, Mathematics, Programming, Uncategorized | Tags: | Author: Christopher Rackauckas
Here is a talk from JuliaCon 2018 where I describe how to use the tooling across the Julia ecosystem to solve partial differential equations (PDEs), and how the different areas of the ecosystem are evolving to give top-notch PDE solver support.
Intro to solving differential equations in Julia
March 5 2018 in Uncategorized | Tags: | Author: Christopher Rackauckas
I did a livestream tutorial for solving differential equations in Julia and thought I should archive this in my blog. I hope this is interesting.
DifferentialEquations.jl 2.0: State of the Ecosystem
May 8 2017 in CUDA, Differential Equations, HPC, Julia, Mathematics, Stochastics, Uncategorized | Tags: | Author: Christopher Rackauckas
In this blog post I want to summarize what we have accomplished with DifferentialEquations’ 2.0 release and detail where we are going next. I want to put the design changes and development work into a larger context so that way everyone can better understand what has been achieved, and better understand how we are planning to tackle our next challenges.
If you find this project interesting and would like to support our work, please star our Github repository. Thanks!
Now let’s get started.
DifferentialEquations.jl 1.0: The Core
Before we start talking about 2.0, let’s understand first what 1.0 was all about. DifferentialEquations.jl 1.0 was about answering a single question: how can we put the wide array of differential equations into one simple and efficient interface. The result of this was the common interface explained in the first blog post. Essentially, we created … READ MORE
Some Fun With Julia Types: Symbolic Expressions in the ODE Solver
May 4 2017 in Differential Equations, Julia, Mathematics, Uncategorized | Tags: | Author: Christopher Rackauckas
In Julia, you can naturally write generic algorithms which work on any type which has specific “actions”. For example, an “AbstractArray” is a type which has a specific set of functions implemented. This means that in any generically-written algorithm that wants an array, you can give it an AbstractArray and it will “just work”. This kind of abstraction makes it easy to write a simple algorithm and then use that same exact code for other purposes. For example, distributed computing can be done by just passing in a DistributedArray, and the algorithm can be accomplished on the GPU by using a GPUArrays. Because Julia’s functions will auto-specialize on the types you give it, Julia automatically makes efficient versions specifically for the types you pass in which, at compile-time, strips away the costs of the abstraction.
This means … READ MORE
6 Months of DifferentialEquations.jl: Where We Are and Where We Are Going
December 15 2016 in Differential Equations, Julia, Mathematics, Programming, Stochastics, Uncategorized | Tags: DifferentialEquations.jl, julia | Author: Christopher Rackauckas
So around 6 months ago, DifferentialEquations.jl was first registered. It was at first made to be a library which can solve “some” types of differential equations, and that “some” didn’t even include ordinary differential equations. The focus was mostly fast algorithms for stochastic differential equations and partial differential equations.
Needless to say, Julia makes you too productive. Ambitions grew. By the first release announcement, much had already changed. Not only were there ordinary differential equation solvers, there were many. But the key difference was a change in focus. Instead of just looking to give a production-quality library of fast methods, a major goal of DifferentialEquations.jl became to unify the various existing packages of Julia to give one user-friendly interface.
Since that release announcement, we have made enormous progress. At this point, I believe we have both the most expansive and flexible … READ MORE
Holding off on Julia for a little bit… you should blog!
March 28 2016 in Uncategorized | Tags: | Author: Christopher Rackauckas
I think I am going to stop posting on Julia for a little bit. I looked at JuliaBloggers.com and realized my blog is hogging it to much. Since I have gone through a pretty good arc, starting at writing FEM code to multiple GPU / Xeon Phi computing, I think that means I will focus on a few other topics for a little bit. However, I will be doing a blog post on native Xeon Phi usage via Julia’s ParallelAccelerator.jl sometime soon, so be prepared for that.
In the meantime, stay tuned for topics like stochastic numerics, theoretical biology, Mathematica, and HPCs in the near future.
If you have the time, start up your own Julia blog and start contributing to JuliaBloggers!