Surrogates.jl is a library for generating surrogate approximations to computationally expensive simulations. It has the following high-dimensional function approximators:
- Kriging using Stheno
- Radial Basis
- Second Order Polynomial
- Support Vector Machines (Wait for LIBSVM resolution)
- Neural Networks
- Random Forests
- Lobachevsky splines
- Polynomial expansions
- Variable fidelity
- Mixture of experts (Waiting GaussianMixtures package to work on v1.5)
- Gradient Enhanced Kriging
ExponentialUtilities.jl is a library for efficient computation of matrix exponentials. While Julia has a built-in
exp(A) method, ExponentialUtilities.jl offers many features around this to improve performance in scientific contexts, including:
- Faster methods for (non-allocating) matrix exponentials via
- Methods for computing matrix exponential that are generic to number types and arrays (i.e. GPUs)
- Methods for computing arnoldi iterations on Krylov subspaces
- Direct computation of
exp(t*A)*v, i.e. exponentiation of a matrix times a vector, without computing the matrix exponential
- Direct computation of
ϕ_0(z) = exp(z)and
ϕ_(k+1)(z) = (ϕ_k(z) - 1) / z
ExponentialUtilities.jl includes complex adaptive time stepping techniques such as KIOPS in order to perform these calculations in a fast and numerically-stable way.
QuasiMonteCarlo.jl is a library for fast generation of ow discrepency Quasi-Monte Carlo samples, using methods like:
GridSample(dx)where the grid is given by
lb:dx[i]:ubin the ith direction.
UniformSamplefor uniformly distributed random numbers.
SobolSamplefor the Sobol sequence.
LatinHypercubeSamplefor a Latin Hypercube.
LatticeRuleSamplefor a randomly-shifted rank-1 lattice rule.
base[i]is the base in the ith direction.
GoldenSamplefor a Golden Ratio sequence.
KroneckerSample(alpha, s0)for a Kronecker sequence, where alpha is an length-d vector of irrational numbers (often sqrt(d)) and s0 is a length-d seed vector (often 0).
sampleris any sampler above and
x0is a vector of either
NaNfor a free dimension or some scalar for a constrained dimension.
PoissonRandom.jl is just fast Poisson random number generation for Poisson processes, like chemical master equations.
PreallocationTools.jl is a library of tools for writing non-allocating code that interacts well with advanced features like automatic differentiation and symbolics.
RuntimeGeneratedFunctions.jl allows for staged programming in Julia, compiling functions at runtime with full optimizations. This is used by many libraries such as ModelingToolkit.jl to allow for runtime code generation for improved performance.
Distributions.jl is a library for defining distributions in Julia. It's used all throughout the SciML libraries for specifications of probability distributions.
For full compatibility with automatic differentiation, see DistributionsAD.jl
FFTW.jl is the preferred library for fast Fourier Transformations on the CPU.
SpecialFunctions.jl is a library of implementations of special functions, like Bessel functions and error functions (
erf). This library is compatible with automatic differentiation.
LoopVectorization.jl is a library which provides the
@tturbo macros for accelerating the computation of loops. This can be used to accelerating the model functions sent to the equation solvers, for example, accelerating handwritten PDE discretizations.
Polyester.jl is a cheaper version of threads for Julia which use a set pool of threads for lower overhead. Note that Polyester does not compose with the standard Julia composable theading infrastructure, and thus one must take care to not compose two levels of Polyester as this will oversubscribe the computation and lead to performance degredation. Many SciML solvers have options to use Polyseter for threading to achieve the top performance.
Tullio.jl is a library for fast tensor calculations with Einstein notation. It allows for defining operations which are compatible with automatic differentiation, GPUs, and more.
ParallelStencil.jl is a library for writing high level code for parallelized stencil computations. It is compatible with SciML equation solvers and is thus a good way to generate GPU and distributed parallel model code.
DataInterpolations.jl is a library of one-dimensional interpolation schemes which are composable with automatic differentiation and the SciML ecosystem. It includes direct interpolation methods and regression techniques for handling noisy data. Its methods include:
ConstantInterpolation(u,t)- A piecewise constant interpolation.
LinearInterpolation(u,t)- A linear interpolation.
QuadraticInterpolation(u,t)- A quadratic interpolation.
LagrangeInterpolation(u,t,n)- A Lagrange interpolation of order
QuadraticSpline(u,t)- A quadratic spline interpolation.
CubicSpline(u,t)- A cubic spline interpolation.
BSplineInterpolation(u,t,d,pVec,knotVec)- An interpolation B-spline. This is a B-spline which hits each of the data points. The argument choices are: -
d- degree of B-spline -
pVec- Symbol to Parameters Vector,
pVec = :Uniformfor uniform spaced parameters and
pVec = :ArcLenfor parameters generated by chord length method. -
knotVec- Symbol to Knot Vector,
knotVec = :Uniformfor uniform knot vector,
knotVec = :Averagefor average spaced knot vector.
BSplineApprox(u,t,d,h,pVec,knotVec)- A regression B-spline which smooths the fitting curve. The argument choices are the same as the
BSplineInterpolation, with the additional parameter
h<length(t)which is the number of control points to use, with smaller
hindicating more smoothing.
Curvefit(u,t,m,p,alg)- An interpolation which is done by fitting a user-given functional form
pis the vector of parameters. The user's input
pis a an initial value for a least-square fitting,
algis the algorithm choice to use for optimize the cost function (sum of squared deviations) via
ps are used in the interpolation.
These interpolations match the SciML interfaces and have direct support for packages like ModelingToolkit.jl.
StaticCompiler.jl is a package for generating static binaries from Julia code. It only supports a subset of Julia, so not all equation solver algorithms are compatible with StaticCompiler.jl.
PackageCompiler.jl is a package for generating shared libraries from Julia code. It the entirety of Julia by bundling a system image with the Julia runtime, thus it builds complete binaries that can hold all of the functionality of SciML. It can also be used to generate new system images to decrease startup times and remove JIT-compilation from SciML usage.