Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/matthieugomez/InfinitesimalGenerators.jl
A set of tools to work with Markov Processes
https://github.com/matthieugomez/InfinitesimalGenerators.jl
Last synced: 3 months ago
JSON representation
A set of tools to work with Markov Processes
- Host: GitHub
- URL: https://github.com/matthieugomez/InfinitesimalGenerators.jl
- Owner: matthieugomez
- License: other
- Created: 2019-04-03T20:06:22.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-06-22T14:12:24.000Z (5 months ago)
- Last Synced: 2024-06-23T05:49:30.421Z (5 months ago)
- Language: Julia
- Homepage:
- Size: 290 KB
- Stars: 9
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
- awesome-sciml - matthieugomez/InfinitesimalGenerators.jl: A set of tools to work with Markov Processes
README
[![Build status](https://github.com/matthieugomez/InfinitesimalGenerators.jl/workflows/CI/badge.svg)](https://github.com/matthieugomez/InfinitesimalGenerators.jl/actions)
This package provides a set of tools to work with Markov Processes defined on a 1-dimensional grid
# Markov Processes
The package allows you to compute compute expectations involving Markov processes```julia
using InfinitesimalGenerators
# Create a diffusion process (here, the Ornstein–Uhlenbeck dx = -0.03 * x * dt + 0.01 * dZ_t)
# Note that the package assumes reflecting boundaries at the limits
x = range(-1, 1, length = 100)
μx = .- 0.03 .* x
σx = 0.01 .* ones(length(x))
X = DiffusionProcess(x, μx, σx)# Return its stationary distribution
g = stationary_distribution(X)# Return the associated generator as a matrix (i.e. the operator `f -> ∂_tE[f(x_t)|x_0=x]`)
MX = generator(X)# Use the generator to compute E[∫_0^T e^{-∫_0^t v(x_s)ds}f(x_t)dt + e^{-∫_0^T v(x_s)ds}ψ(x_T) | x_0 = x]
feynman_kac(MX, range(0, 100, step = 1/12); f = zeros(length(x)), ψ = ones(length(x)), v = zeros(length(x)))
```# Additive Functionals
- `M = AdditiveFunctional(X, μm, σm)` creates, given a discretized Markov Process, the Additive Functional with drift `μm` and volatility `σm`
- `generator(M)` returns its associated generator (i.e. the operator `f -> ∂_tE[e^{m}f(x_t)|x_0=x]`)
- `cgf(m)` returns the long run scaled CGF of `m`
- `tail_index(m)` returns the tail index of the stationary distribution of `e^m`# Derivative
The package also allows you to compute (lazy) first and second derivatives of a function on a grid using a finite difference schemes```julia
using InfinitesimalGenerators
x = range(-1, 1, length = 100)
f = sin.(x)
FirstDerivative(x, f, direction = :upward, bc = (0, 0))
FirstDerivative(x, f, direction = :downward, bc = (0, 0))
SecondDerivative(x, f, bc = (0, 0))
```
The argument `bc` refers to the value of the first-derivative at each limit of the grid. This argument defaults to zero, which is the right condition when solving problems with reflecting boundaries.## Related Packages
- [SimpleDifferentialOperators](https://github.com/QuantEcon/SimpleDifferentialOperators.jl) contains more general tools to define operators with different boundary counditions. In contrast, InfinitesimalGenerators always assumes reflecting boundaries.