({{, (RefLink[ItoProcess, paclet:ref/ItoProcess])[{a,b},x,t]
represents an Ito process x(t), where dx(t)==a(t,x(t))dt+b(t,x(t)).dw(t).}, {, (RefLink[ItoProcess, paclet:ref/ItoProcess])[{a,b,c},x,t]
represents an Ito process y(t)==c(t,x(t)), where dx(t)==a(t,x(t))dt+b(t,x(t)).dw(t) .}, {, (RefLink[ItoProcess, paclet:ref/ItoProcess])[…,{x,(Subscript[x, 0])},{t,(Subscript[t, 0])}]
uses initial condition x((Subscript[t, 0]))==(Subscript[x, 0]).}, {, (RefLink[ItoProcess, paclet:ref/ItoProcess])[…,…,…,Σ]
uses a Wiener process w(t), with covariance Σ.}, {, (RefLink[ItoProcess, paclet:ref/ItoProcess])[proc]
converts proc to a standard Ito process whenever possible. }, {, (RefLink[ItoProcess, paclet:ref/ItoProcess])[sdeqns,expr,x,t,w\[Distributed]dproc]
represents an Ito process specified by a stochastic differential equation sdeqns, output expression expr, with state x and time t, driven by w following the process dproc. }})

OpenersNotesSection(Spacer1)Details and Options

(RefLink[ItoProcess, paclet:ref/ItoProcess]) is also known as Ito diffusion or stochastic differential equation (SDE).

(RefLink[ItoProcess, paclet:ref/ItoProcess]) is a continuous-time and continuous-state random process.

If the drift a is an n-dimensional vector and the diffusion b an n×m-dimensional matrix, the process is n-dimensional and driven by an m-dimensional (RefLink[WienerProcess, paclet:ref/WienerProcess]).

Common specifications for coefficients a and b include:

A stochastic differential equation dx(t)==a(t,x(t))dt+b(t,x(t))dw(t) is sometimes written as an integral equation x(t)-x((Subscript[t, 0]))==(∫_(Subscript[t, 0])^t)a(τ,x(τ))dτ+(∫_(Subscript[t, 0])^t)b(τ,x(τ))dw(τ).

The default initial time (Subscript[t, 0]) is taken to be zero, and the default initial state (Subscript[x, 0]) is zero.

The default covariance Σ is the identity matrix.

For a general covariance Σ, (RefLink[ItoProcess, paclet:ref/ItoProcess]) canonicalizes the process by converting the diffusion matrix b to b.(Σ^(1/2)), with (Σ^(1/2)) the lower Cholesky factor of Σ when possible.

A standard Ito process has output y(t), consisting of a subset of differential states x(t).

Processes proc that can be converted to standard (RefLink[ItoProcess, paclet:ref/ItoProcess]) form include (RefLink[OrnsteinUhlenbeckProcess, paclet:ref/OrnsteinUhlenbeckProcess]), (RefLink[GeometricBrownianMotionProcess, paclet:ref/GeometricBrownianMotionProcess]), (RefLink[StratonovichProcess, paclet:ref/StratonovichProcess]), and (RefLink[ItoProcess, paclet:ref/ItoProcess]).

Converting an (RefLink[ItoProcess, paclet:ref/ItoProcess]) to standard form automatically makes use of Ito's lemma.

The stochastic differential equations in sdeqns can be of the form dx(t)==a(t,x(t))dt+b(t,x(t))dw(t), where d is (RefLink[\[DifferentialD], paclet:ref/character/DifferentialD]), which can be input using (Key0[esc]) dd (Key0[esc]). The differentials dx(t) and dw(t) are taken to be Ito differentials.

The output expression expr can be any expression involving x[t] and t.

The driving process dproc can be any process that can be converted to a standard Ito process.

(RefLink[Method, paclet:ref/Method]) settings in (RefLink[RandomFunction, paclet:ref/RandomFunction]) specific to (RefLink[ItoProcess, paclet:ref/ItoProcess]) include:

(RefLink[ItoProcess, paclet:ref/ItoProcess]) can be used with such functions as (RefLink[RandomFunction, paclet:ref/RandomFunction]), (RefLink[CovarianceFunction, paclet:ref/CovarianceFunction]), (RefLink[PDF, paclet:ref/PDF]), and (RefLink[Expectation, paclet:ref/Expectation]).

OpenersPrimaryExamplesSection(Spacer1)Examples  (26)

OpenersExampleSection0(Spacer1)Basic Examples  (1)

Define a process by its stochastic differential equation:

proc=ItoProcess[\[DifferentialD]x[t]==-x[t]\[DifferentialD]t+(Sqrt[1+x[t]^2])\[DifferentialD]w[t],x[t],{x,1},t,w\[Distributed]WienerProcess[]]

Simulate the process:

RandomFunction[proc,{0.,5.,0.01}]

ListLinePlot[%,Filling->Axis]

Compute mean function:

Mean[proc[t]]

Compute covariance function:

CovarianceFunction[proc,s,t]

Plot3D[%,{s,0,5},{t,0,5},ColorFunction->"Rainbow"]

OpenersExampleSection1(Spacer1)Scope  (16)

OpenersExampleSubsection0(Spacer1)Basic Uses  (9)

Define a Wiener process with drift μ and diffusion σ from the stochastic differential equation (SDE) dx(t)==μ dt+σ dw(t):

ItoProcess[{μ,σ},{x,0},t]

Directly convert from the parametric process:

ItoProcess[WienerProcess[μ,σ]]

Define a process y(t)==c(x(t)), where dx(t)==μ dt+σ dw(t):

ItoProcess[{μ,σ,c[x[t]]},{x,0},t]

Use differential notation to define the same process:

ItoProcess[\[DifferentialD]x[t]==μ \[DifferentialD]t+σ \[DifferentialD]w[t],c[x[t]],{x,0},t,w\[Distributed]WienerProcess[]]

Define a vector process dx(t)==v(t) dt,dv(t)==-x(t) dt+dw(t) with output x(t):

ItoProcess[{{v,-x},{0,1},x},{{x,v},{x0,v0}},{t,0}]

Using differential notation:

ItoProcess[{\[DifferentialD]x[t]==v[t] \[DifferentialD]t,\[DifferentialD]v[t]==-x[t]\[DifferentialD]t+\[DifferentialD]w[t]},x[t],{{x,v},{x0,v0}},t,w\[Distributed]WienerProcess[]]

Define a vector process {x(t),((x(t))^2)}, where dx(t)==μ dt+σ dw(t):

ItoProcess[{μ,σ,{x,x^2}},{x,0},t]

Using differential notation:

ItoProcess[\[DifferentialD]x[t]==μ\[DifferentialD]t+σ \[DifferentialD]w[t],{x[t],x[t]^2},{x,0},t,w\[Distributed]WienerProcess[]]

Define a vector process {x(t),y(t)} where dx(t)==y(t) dt+d(Subscript[w, 1])(t),dy(t)==-x(t) dt+d(Subscript[w, 2])(t):

ItoProcess[{{y,-x},{{1,0},{0,1}}},{{x,y},{0,0}},t]

Using differential notation:

ItoProcess[{\[DifferentialD]x[t]==y[t]\[DifferentialD]t+\[DifferentialD]w1[t],\[DifferentialD]y[t]==-x[t]\[DifferentialD]t+\[DifferentialD]w2[t]},{x[t],y[t]},{{x,y},{0,0}},t,{w1\[Distributed]WienerProcess[],w2\[Distributed]WienerProcess[]}]

Define a process driven by two correlated Wiener processes: »

Σ={{1,3/5},{3/5,1}};

b={{(Subscript[σ, 1]),(Subscript[σ, 2])}};
proc=ItoProcess[{{1-x[t]},b,x[t]},{{x},{1/2}},{t,0},Σ]

The canonicalized process has diffusion matrix equal to b.((CholeskyDecomposition[Σ])^ᵀ), with b the diffusion matrix before canonicalization:

bnew=proc[[1,2]]

bnew==b.CholeskyDecomposition[Σ]\[Transpose]

Define a scalar process x(t)==(∫_0^t)(Subscript[w, 1])(t)d(Subscript[w, 2])(t) corresponding to the SDE dx(t)==(Subscript[w, 1])(t) d(Subscript[w, 2])(t):

ItoProcess[\[DifferentialD]x[t]==(Subscript[w, 1])[t]\[DifferentialD](Subscript[w, 2])[t],x[t],{x,0},t,{(Subscript[w, 1])\[Distributed]WienerProcess[],(Subscript[w, 2])\[Distributed]WienerProcess[]}]

Define vector process x(t)==(∫_0^t)(Subscript[w, 1])(τ)d(Subscript[w, 2])(τ) and y(t)==(∫_0^t)(Subscript[w, 1])(τ)d(Subscript[w, 1])(τ) corresponding to the SDE dx(t)==(Subscript[w, 1])(t) d(Subscript[w, 2])(t) and dy(t)==(Subscript[w, 1])(t) d(Subscript[w, 1])(t):

ItoProcess[{\[DifferentialD]x[t]==(Subscript[w, 1])[t]\[DifferentialD](Subscript[w, 2])[t],\[DifferentialD]y[t]==(Subscript[w, 1])[t]\[DifferentialD](Subscript[w, 1])[t]},{x[t],y[t]},{{x,y},{0,0}},t,{(Subscript[w, 1])\[Distributed]WienerProcess[],(Subscript[w, 2])\[Distributed]WienerProcess[]}]

Define a process corresponding to the 2D correlated Wiener process:

noise𝒫[σ1_,σ2_,ρ_]=Refine[ItoProcess[{{0,0},{{σ1,0},{0,σ2}}},{{w1,w2},{0,0}},t,{{1,ρ},{ρ,1}}],-1<ρ<1];

Define vector process driven by correlated 2D Wiener process:

ItoProcess[{\[DifferentialD]s[t]==μ s[t]\[DifferentialD]t+(Sqrt[r[t]])s[t]\[DifferentialD]n1[t],\[DifferentialD]r[t]==θ(μ-r[t])\[DifferentialD]t+(Sqrt[r[t]])\[DifferentialD]n2[t]
},{s[t],r[t]},{{s,r},{s0,r0}},t,{n1,n2}\[Distributed]noise𝒫[(Subscript[σ, 1]),(Subscript[σ, 2]),ρ]]

OpenersExampleSubsection1(Spacer1)Special Ito Processes  (5)

An Ito process corresponding to the (RefLink[WienerProcess, paclet:ref/WienerProcess]):

ItoProcess[WienerProcess[μ,σ]]

An Ito process corresponding to the (RefLink[GeometricBrownianMotionProcess, paclet:ref/GeometricBrownianMotionProcess]):

ItoProcess[GeometricBrownianMotionProcess[μ,σ,x0]]

An Ito process corresponding to the (RefLink[BrownianBridgeProcess, paclet:ref/BrownianBridgeProcess]):

ItoProcess[BrownianBridgeProcess[σ,{(Subscript[t, 1]),a},{(Subscript[t, 2]),b}]]

An Ito process corresponding to the (RefLink[OrnsteinUhlenbeckProcess, paclet:ref/OrnsteinUhlenbeckProcess]):

ItoProcess[OrnsteinUhlenbeckProcess[μ,σ,θ,x0]]

An Ito process corresponding to the (RefLink[CoxIngersollRossProcess, paclet:ref/CoxIngersollRossProcess]):

ItoProcess[CoxIngersollRossProcess[μ,σ,θ,x0]]

OpenersExampleSubsection2(Spacer1)Process Slice Properties  (2)

Define Jacobi diffusion process:

Jacobi𝒫[x0_]:=ItoProcess[\[DifferentialD]x[t]==(1/2-x[t])\[DifferentialD]t+(Sqrt[x[t](1-x[t])])\[DifferentialD]w[t],x[t],{x,x0},t,w\[Distributed]WienerProcess[]]

Compute low-order cumulants of time-slice distribution:

Table[Cumulant[Jacobi𝒫[x0][t],r],{r,1,4}]

Find the limit of infinite time horizon:

Limit[%,t->∞]

Compare with cumulants of the uniform distribution:

Table[Cumulant[UniformDistribution[],r],{r,1,4}]

Define a vector process given by a system of linear SDEs:

proc[{σ1_,σ2_},{x0_,y0_}]=ItoProcess[\[DifferentialD]x[t]==-(x[t]+y[t])\[DifferentialD]t+σ1 \[DifferentialD]w[t]&&\[DifferentialD]y[t]==-2x[t]\[DifferentialD]t+σ2\[DifferentialD]w[t],{x[t],y[t]},{{x,y},{x0,y0}},t,w\[Distributed]WienerProcess[]]

Find the probability density function of the time-slice distribution:

PDF[proc[{1,-1},{1/2,-1/4}][t],{x,y}]

Compute cross-covariance of x(t) and y(t):

cov=Covariance[proc[{(Subscript[σ, 1]),(Subscript[σ, 2])},{x0,y0}][t],1,2]

Infinite time horizon limit exists only if (Subscript[σ, 1])==(Subscript[σ, 2]):

Collect[cov,E^_,Simplify]

OpenersExampleSection3(Spacer1)Applications  (5)

OpenersExampleSubsubsection0(Spacer1)Computing Properties  (3)

Compute cross-covariance of the Ornstein–Uhlenbeck process x(t) and its underlying Wiener process w(t):

joint𝒫=ItoProcess[\[DifferentialD]x[t]==θ(μ-x[t])\[DifferentialD]t+σ \[DifferentialD]w[t],{x[t],w[t]},{x,x0},t,w\[Distributed]WienerProcess[]]

Covariance[joint𝒫[t],1,2]

Compute moments of the process x(t)==(∫_0^t)((w(t))^2)dt, where w(t) is the standard Wiener process:

ItoProcess[\[DifferentialD]x[t]==w[t]^2\[DifferentialD]t,x[t],{x,0},t,w\[Distributed]WienerProcess[]]

Table[Moment[%[t],r],{r,0,8}]

Vector Ito process driven by scalar noise (1D oscillator driven by white noise):

proc=ItoProcess[{\[DifferentialD]x[t]==v[t]\[DifferentialD]t,\[DifferentialD]v[t]==-x[t]\[DifferentialD]t+\[DifferentialD]n[t]},x[t],{{x,v},{1,0}},t,n\[Distributed]WienerProcess[]]

Simulate process paths:

path=RandomFunction[proc,{0.,2. Pi,0.05},12,Method->"StochasticRungeKutta"];

ListLinePlot[path]

Compute mean and variance functions:

mf[t_]=Mean[proc[t]]

vf[t_]=Simplify[Variance[proc[t]]]

Plot mean function and the standard deviation band, together with generated paths:

Show[Plot[{mf[t]-(Sqrt[vf[t]]),mf[t]+(Sqrt[vf[t]]),mf[t]},{t,0,2Pi},Filling->{1->{2}}],ListLinePlot[path],PlotRange->All]

OpenersExampleSubsubsection1(Spacer1)Martingales  (1)

Determine values of α and β for which the process x(t)==exp(α w(t)+β t) is a martingale, where w(t) is the standard Wiener process:

x𝒫=ItoProcess[{0,1,Exp[α w[t]+β t]},{w,0},t]

Convert to the standard form:

st𝒫=ItoProcess[x𝒫]

Zero drift coefficient of the standard form is a necessary condition for x(t) to be a martingale:

Solve[st𝒫[[1,1]]==0,{α,β}]

OpenersExampleSubsubsection2(Spacer1)Modeling  (1)

The Gompertz curve is typically used in the modeling of a growth process, such as tumor growth. By assuming Gaussian noise in the logarithm of the growth process, you can write the model as a stochastic differential equation:

proc=ItoProcess[\[DifferentialD]X[t]==-α Exp[-α t]Log[X0/K]X[t]\[DifferentialD]t+σ X[t]\[DifferentialD]W[t],X[t],{X,X0},t,W\[Distributed]WienerProcess[]]

Mean of the process is the usual Gompertz curve:

Mean[proc[t]]

Slice distribution of the process at time t obeys (RefLink[LogNormalDistribution, paclet:ref/LogNormalDistribution]):

PDF[proc[t],x]

Simulate the process with (Subscript[X, 0])=1, K=2, σ=0.1, and α=0.3 from t=0 to 10:

proc1=proc/.{X0->1,K->2,σ->0.1,α->0.3};

sample=RandomFunction[proc1,{0,10,0.01}];

Visualize the sampled path:

ListLinePlot[sample,Filling->Axis]

Generate a thousand samples with the same conditions, then visualize the paths and slice data at t=10:

samples=RandomFunction[proc1,{0,10,0.1},1000];

GraphicsRow[{ListLinePlot[samples,ImageSize->250,PlotRange->All,
AspectRatio->3/4,BaseStyle->Directive[Thin,Opacity[0.5]],PlotRangePadding->{{0,.25},{.5,.5}}],Histogram[samples["SliceData",10],Automatic,"PDF"]}]

OpenersExampleSection4(Spacer1)Properties & Relations  (2)

Convert (RefLink[StratonovichProcess, paclet:ref/StratonovichProcess]) to (RefLink[ItoProcess, paclet:ref/ItoProcess]):

StratonovichProcess[\[DifferentialD]x[t]==a[t,x[t]]\[DifferentialD]t+b[t,x[t]]\[DifferentialD]w[t],x[t],{x,x0},t,w\[Distributed]WienerProcess[]]

ItoProcess[%]

Convert back:

StratonovichProcess[%]

Transformed Wiener processes are related to (RefLink[ItoProcess, paclet:ref/ItoProcess]):

𝒫1=TransformedProcess[b[t]^2,b\[Distributed]WienerProcess[],t];
𝒫2=ItoProcess[{0,1,b[t]^2},b,t];

Mean and variance functions agree:

{Mean[𝒫1[t]]==Mean[𝒫2[t]],Variance[𝒫1[t]]==Variance[𝒫2[t]]}

OpenersExampleSection5(Spacer1)Possible Issues  (2)

(RefLink[ItoProcess, paclet:ref/ItoProcess]) does not support random initial conditions, so cannot be represented:

ItoProcess[OrnsteinUhlenbeckProcess[μ,σ,θ]]

ItoProcess[\[DifferentialD]x[t]==a\[DifferentialD]t+b x[t]\[DifferentialD]y[t],x[t],{x,x0},t,y\[Distributed]OrnsteinUhlenbeckProcess[μ,σ,θ]]

But it supports processes with fixed initial condition:

ItoProcess[OrnsteinUhlenbeckProcess[μ,σ,θ,(Subscript[x, 0])]]

ItoProcess[\[DifferentialD]x[t]==a\[DifferentialD]t+b x[t]\[DifferentialD]y[t],x[t],{x,x0},t,y\[Distributed]OrnsteinUhlenbeckProcess[μ,σ,θ,x0]]

Initial time of the driven process needs to match with (RefLink[ItoProcess, paclet:ref/ItoProcess]):

ItoProcess[\[DifferentialD]x[t]==-x[t] \[DifferentialD]t+\[DifferentialD]w[t],x[t],{x,1},{t,3},w\[Distributed]OrnsteinUhlenbeckProcess[0,1,1,1]]//ProcessParameterQ

With matching initial time, this can be represented:

ItoProcess[\[DifferentialD]x[t]==-x[t] \[DifferentialD]t+\[DifferentialD]w[t],x[t],{x,1},{t,0},w\[Distributed]OrnsteinUhlenbeckProcess[0,1,1,1]]//ProcessParameterQ

({{DocumentationFooterIconsRelatedFunction.png, ({{See Also}, {(RefLink[WienerProcess, paclet:ref/WienerProcess])  ▪  (RefLink[OrnsteinUhlenbeckProcess, paclet:ref/OrnsteinUhlenbeckProcess])  ▪  (RefLink[GeometricBrownianMotionProcess, paclet:ref/GeometricBrownianMotionProcess])  ▪  (RefLink[StratonovichProcess, paclet:ref/StratonovichProcess])  ▪  (RefLink[TransformedProcess, paclet:ref/TransformedProcess])  ▪  (RefLink[AffineStateSpaceModel, paclet:ref/AffineStateSpaceModel])}})}})

({{DocumentationFooterIconsRelatedGuide.png, ({{Related Guides}, {▪(RefLinkPlain[Stochastic Differential Equation Processes, paclet:guide/StochasticDifferentialEquationProcesses])}, {▪(RefLinkPlain[Financial Computation, paclet:guide/Finance])}, {▪(RefLinkPlain[Probability & Statistics, paclet:guide/ProbabilityAndStatistics])}, {▪(RefLinkPlain[Random Processes, paclet:guide/RandomProcesses])}, {▪(RefLinkPlain[Finite Markov Processes, paclet:guide/MarkovProcesses])}, {▪(RefLinkPlain[Scientific Models, paclet:guide/ScientificModels])}})}})