DiffEqNoiseProcess.jl: Noise Processes for Stochastic Modeling
DiffEqNoiseProcess.jl provides a comprehensive suite of noise processes for stochastic differential equations and random differential equations. The NoiseProcess types are distributionally-exact, meaning they are generated directly according to their analytical distributions rather than as solutions to SDEs.
Key Features
- Mathematically rigorous: All processes maintain distributional exactness
- Comprehensive collection: Wiener processes, Ornstein-Uhlenbeck, geometric Brownian motion, compound Poisson, and more
- Flexible interface: Works seamlessly with the DifferentialEquations.jl ecosystem
- Memory efficient: Includes virtual processes and wrappers for large-scale simulations
- Bridging support: Conditional processes for specific boundary conditions
Installation
To install DiffEqNoiseProcess.jl, use the Julia package manager:
using Pkg
Pkg.add("DiffEqNoiseProcess")Quick Start
Basic Wiener Process
Create and simulate a standard Brownian motion:
using DiffEqNoiseProcess, SciMLBase
# Create a Wiener process: WienerProcess(t0, W0, Z0)
W = WienerProcess(0.0, 0.0, 1.0)
# Simulate it over time interval [0, 1]
prob = NoiseProblem(W, (0.0, 1.0))
sol = solve(prob; dt = 0.01)
println("Final Brownian motion value: $(sol.u[end])")Final Brownian motion value: 0.6132439379743437Using Noise in SDE Problems
Noise processes integrate directly with SDE problems:
using SciMLBase
# Define SDE: dX = μX dt + σX dW (geometric Brownian motion)
f(u, p, t) = 0.05 * u # 5% drift
g(u, p, t) = 0.2 * u # 20% volatility
# Use custom geometric Brownian motion noise
gbm_noise = GeometricBrownianMotionProcess(0.05, 0.2, 0.0, 100.0, 100.0)
# Create SDE problem (would normally solve this)
# prob = SDEProblem(f, g, 100.0, (0.0, 1.0), noise = gbm_noise)t: 1-element Vector{Float64}:
0.0
u: 1-element Vector{Float64}:
100.0Ensemble Simulations
Generate multiple noise realizations:
# Create ensemble problem for Monte Carlo simulation
enprob = EnsembleProblem(prob)
ensemble_sol = solve(enprob; dt = 0.01, trajectories = 100)
println("Generated $(length(ensemble_sol.u)) noise trajectories")Generated 100 noise trajectoriesAvailable Noise Processes
DiffEqNoiseProcess.jl includes a rich collection of noise processes:
Classic Processes
- WienerProcess: Standard Brownian motion
- RealWienerProcess: Scalar Brownian motion
- CorrelatedWienerProcess: Multi-dimensional correlated noise
- OrnsteinUhlenbeckProcess: Mean-reverting process
- GeometricBrownianMotionProcess: For financial modeling
- CompoundPoissonProcess: Jump processes
Bridge Processes
- BrownianBridge: Brownian motion with fixed endpoints
- GeometricBrownianBridge: GBM with boundary conditions
Advanced Features
- NoiseFunction: Custom noise from functions
- NoiseGrid: Noise from pre-computed data
- NoiseWrapper: Reuse previous simulations
- VirtualBrownianTree: Memory-efficient alternative
- NoiseApproximation: Colored noise via SDE solutions
Documentation Structure
This documentation is organized as follows:
- Basic Usage Tutorial: Get started with fundamental concepts
- Noise Process Types: Comprehensive guide to all available processes
- Advanced Features: Custom processes, wrappers, and optimization
- API Reference: Complete function and type documentation
- Interface API: Step management and internal functions
Mathematical Foundation
All noise processes in this package maintain mathematical rigor through:
- Distributional exactness: Processes follow their theoretical distributions exactly
- Rejection Sampling with Memory (RSWM): Ensures correctness when adaptive stepping is used
- Proper bridging: Conditional processes respect boundary conditions
- Interpolation consistency: Values between grid points maintain distributional properties
Contributing
Please refer to the SciML ColPrac: Contributor's Guide on Collaborative Practices for Community Packages for guidance on PRs, issues, and other matters relating to contributing to SciML.
See the SciML Style Guide for common coding practices and other style decisions.
There are a few community forums:
- The #diffeq-bridged and #sciml-bridged channels in the Julia Slack
- The #diffeq-bridged and #sciml-bridged channels in the Julia Zulip
- On the Julia Discourse forums
- See also SciML Community page
Reproducibility
The documentation of this SciML package was built using these direct dependencies,
Status `~/work/DiffEqNoiseProcess.jl/DiffEqNoiseProcess.jl/docs/Project.toml`
[77a26b50] DiffEqNoiseProcess v5.33.0 `~/work/DiffEqNoiseProcess.jl/DiffEqNoiseProcess.jl`
[31c24e10] Distributions v0.25.129
[e30172f5] Documenter v1.17.0
[0bca4576] SciMLBase v3.31.0
[10745b16] Statistics v1.11.1
[9a3f8284] Random v1.11.0and using this machine and Julia version.
Julia Version 1.12.6
Commit 15346901f00 (2026-04-09 19:20 UTC)
Build Info:
Official https://julialang.org release
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 4 × Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
WORD_SIZE: 64
LLVM: libLLVM-18.1.7 (ORCJIT, icelake-server)
GC: Built with stock GC
Threads: 1 default, 1 interactive, 1 GC (on 4 virtual cores)A more complete overview of all dependencies and their versions is also provided.
Status `~/work/DiffEqNoiseProcess.jl/DiffEqNoiseProcess.jl/docs/Manifest.toml`
[47edcb42] ADTypes v1.22.1
[a4c015fc] ANSIColoredPrinters v0.0.1
[1520ce14] AbstractTrees v0.4.5
[7d9f7c33] Accessors v0.1.45
[79e6a3ab] Adapt v4.7.0
[66dad0bd] AliasTables v1.1.3
[4fba245c] ArrayInterface v7.27.0
[70df07ce] BracketingNonlinearSolve v1.12.2
[944b1d66] CodecZlib v0.7.8
[38540f10] CommonSolve v0.2.9
[34da2185] Compat v4.18.1
[a33af91c] CompositionsBase v0.1.2
[2569d6c7] ConcreteStructs v0.2.5
[187b0558] ConstructionBase v1.6.0
[9a962f9c] DataAPI v1.16.0
[864edb3b] DataStructures v0.19.5
[2b5f629d] DiffEqBase v7.6.0
[77a26b50] DiffEqNoiseProcess v5.33.0 `~/work/DiffEqNoiseProcess.jl/DiffEqNoiseProcess.jl`
[a0c0ee7d] DifferentiationInterface v0.7.18
[31c24e10] Distributions v0.25.129
[ffbed154] DocStringExtensions v0.9.5
[e30172f5] Documenter v1.17.0
[4e289a0a] EnumX v1.0.7
[f151be2c] EnzymeCore v0.8.21
[e2ba6199] ExprTools v0.1.10
[7034ab61] FastBroadcast v1.3.3
[9aa1b823] FastClosures v0.3.2
[a4df4552] FastPower v1.3.3
[1a297f60] FillArrays v1.16.0
[069b7b12] FunctionWrappers v1.1.3
[77dc65aa] FunctionWrappersWrappers v1.10.0
[46192b85] GPUArraysCore v0.2.0
[a0844989] Gamma v1.1.0
[d7ba0133] Git v1.5.0
[34004b35] HypergeometricFunctions v0.3.29
[b5f81e59] IOCapture v1.0.0
[3587e190] InverseFunctions v0.1.17
[92d709cd] IrrationalConstants v0.2.6
[82899510] IteratorInterfaceExtensions v1.0.0
[692b3bcd] JLLWrappers v1.8.0
[682c06a0] JSON v1.6.1
[0e77f7df] LazilyInitializedFields v1.3.0
[2ab3a3ac] LogExpFunctions v1.0.1
[e6f89c97] LoggingExtras v1.2.0
[1914dd2f] MacroTools v0.5.16
[d0879d2d] MarkdownAST v0.1.3
[bb5d69b7] MaybeInplace v0.1.5
[e1d29d7a] Missings v1.2.0
[46d2c3a1] MuladdMacro v0.2.6
[be0214bd] NonlinearSolveBase v2.33.0
⌅ [bac558e1] OrderedCollections v1.8.2
[90014a1f] PDMats v0.11.40
[69de0a69] Parsers v2.8.6
[e409e4f3] PoissonRandom v0.4.10
[d236fae5] PreallocationTools v1.2.1
[aea7be01] PrecompileTools v1.3.4
[21216c6a] Preferences v1.5.2
[43287f4e] PtrArrays v1.4.0
[1fd47b50] QuadGK v2.11.3
[3cdcf5f2] RecipesBase v1.3.4
[731186ca] RecursiveArrayTools v4.3.2
[189a3867] Reexport v1.2.2
[2792f1a3] RegistryInstances v0.1.0
[ae5879a3] ResettableStacks v1.2.1
[79098fc4] Rmath v0.9.0
[f2b01f46] Roots v3.0.1
[7e49a35a] RuntimeGeneratedFunctions v0.5.21
[0bca4576] SciMLBase v3.31.0
[19f34311] SciMLJacobianOperators v0.1.14
[a6db7da4] SciMLLogging v2.0.1
[c0aeaf25] SciMLOperators v1.23.0
[431bcebd] SciMLPublic v1.2.1
[53ae85a6] SciMLStructures v1.10.1
[efcf1570] Setfield v1.1.2
[a2af1166] SortingAlgorithms v1.2.3
[276daf66] SpecialFunctions v2.8.0
[90137ffa] StaticArrays v1.9.18
[1e83bf80] StaticArraysCore v1.4.4
[10745b16] Statistics v1.11.1
[82ae8749] StatsAPI v1.8.0
[2913bbd2] StatsBase v0.34.12
[4c63d2b9] StatsFuns v2.2.0
[ec057cc2] StructUtils v2.8.2
[2efcf032] SymbolicIndexingInterface v0.3.49
[a759f4b9] TimerOutputs v0.5.29
[3bb67fe8] TranscodingStreams v0.11.3
[781d530d] TruncatedStacktraces v1.4.0
[2e619515] Expat_jll v2.8.1+0
[020c3dae] Git_LFS_jll v3.7.1+0
[f8c6e375] Git_jll v2.54.0+0
[94ce4f54] Libiconv_jll v1.18.0+0
[9bd350c2] OpenSSH_jll v10.4.1+0
[efe28fd5] OpenSpecFun_jll v0.5.6+0
[f50d1b31] Rmath_jll v0.5.1+0
[0dad84c5] ArgTools v1.1.2
[56f22d72] Artifacts v1.11.0
[2a0f44e3] Base64 v1.11.0
[ade2ca70] Dates v1.11.0
[8ba89e20] Distributed v1.11.0
[f43a241f] Downloads v1.7.0
[7b1f6079] FileWatching v1.11.0
[9fa8497b] Future v1.11.0
[b77e0a4c] InteractiveUtils v1.11.0
[ac6e5ff7] JuliaSyntaxHighlighting v1.12.0
[b27032c2] LibCURL v0.6.4
[76f85450] LibGit2 v1.11.0
[8f399da3] Libdl v1.11.0
[37e2e46d] LinearAlgebra v1.12.0
[56ddb016] Logging v1.11.0
[d6f4376e] Markdown v1.11.0
[ca575930] NetworkOptions v1.3.0
[44cfe95a] Pkg v1.12.1
[de0858da] Printf v1.11.0
[3fa0cd96] REPL v1.11.0
[9a3f8284] Random v1.11.0
[ea8e919c] SHA v0.7.0
[9e88b42a] Serialization v1.11.0
[6462fe0b] Sockets v1.11.0
[2f01184e] SparseArrays v1.12.0
[f489334b] StyledStrings v1.11.0
[4607b0f0] SuiteSparse
[fa267f1f] TOML v1.0.3
[a4e569a6] Tar v1.10.0
[8dfed614] Test v1.11.0
[cf7118a7] UUIDs v1.11.0
[4ec0a83e] Unicode v1.11.0
[e66e0078] CompilerSupportLibraries_jll v1.3.0+1
[deac9b47] LibCURL_jll v8.15.0+0
[e37daf67] LibGit2_jll v1.9.0+0
[29816b5a] LibSSH2_jll v1.11.3+1
[14a3606d] MozillaCACerts_jll v2025.11.4
[4536629a] OpenBLAS_jll v0.3.29+0
[05823500] OpenLibm_jll v0.8.7+0
[458c3c95] OpenSSL_jll v3.5.4+0
[efcefdf7] PCRE2_jll v10.44.0+1
[bea87d4a] SuiteSparse_jll v7.8.3+2
[83775a58] Zlib_jll v1.3.1+2
[8e850b90] libblastrampoline_jll v5.15.0+0
[8e850ede] nghttp2_jll v1.64.0+1
[3f19e933] p7zip_jll v17.7.0+0
Info Packages marked with ⌅ have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated -m`You can also download the manifest file and the project file.