Okishio's theorem: Difference between revisions
en>Epicity95 m Removed the word "mathematical" from the first sentence. |
|||
Line 1: | Line 1: | ||
In [[mathematics]], the '''Euler–Maruyama method''' is a method for the approximate [[numerical analysis|numerical solution]] of a [[stochastic differential equation]] (SDE). It is a simple generalization of the [[Euler method]] for [[ordinary differential equation]]s to stochastic differential equations. It is named after [[Leonhard Euler]] and [[Gisiro Maruyama]]. | |||
Consider the stochastic differential equation (see [[Itō calculus]]) | |||
:<math>\mathrm{d} X_t = a(X_t) \, \mathrm{d} t + b(X_t) \, \mathrm{d} W_t,</math> | |||
with [[initial condition]] ''X''<sub>0</sub> = ''x''<sub>0</sub>, where ''W''<sub>''t''</sub> stands for the [[Wiener process]], and suppose that we wish to solve this SDE on some interval of time [0, ''T'']. Then the '''Euler–Maruyama approximation''' to the true solution ''X'' is the [[Markov chain]] ''Y'' defined as follows: | |||
* partition the interval [0, ''T''] into ''N'' equal subintervals of width <math>\Delta t>0</math>: | |||
::<math>0 = \tau_{0} < \tau_{1} < \cdots < \tau_{N} = T \mbox{ and } \Delta t = T/N;</math> | |||
* set ''Y''<sub>0</sub> = ''x''<sub>0</sub>; | |||
* recursively define ''Y''<sub>''n''</sub> for 1 ≤ ''n'' ≤ ''N'' by | |||
::<math>\, Y_{n + 1} = Y_n + a(Y_n) \Delta t + b(Y_n) \Delta W_n,</math> | |||
:where | |||
::<math>\Delta W_{n} = W_{\tau_{n + 1}} - W_{\tau_n}.</math> | |||
The [[random variable]]s Δ''W''<sub>''n''</sub> are [[independent and identically distributed]] [[normal distribution|normal random variables]] with [[expected value]] zero and [[variance]] <math>\Delta t</math>. | |||
==Example== | |||
The following [[Python (programming language)|Python]] code implements Euler–Maruyama to solve the [[Ornstein–Uhlenbeck process]]: | |||
<pre> | |||
import numpy as np | |||
import matplotlib.pyplot as plt | |||
import math | |||
import random | |||
tBegin=0 | |||
tEnd=2 | |||
dt=.00001 | |||
t = np.arange(tBegin, tEnd, dt) | |||
N = t.size | |||
IC=0 | |||
theta=1 | |||
mu=1.2 | |||
sigma=0.3 | |||
sqrtdt = math.sqrt(dt) | |||
y = np.zeros(N) | |||
y[0] = IC | |||
for i in xrange(1,N): | |||
y[i] = y[i-1] + dt*(theta*(mu-y[i-1])) + sigma*sqrtdt*random.gauss(0,1) | |||
ax = plt.subplot(111) | |||
ax.plot(t,y) | |||
plt.show() | |||
</pre> | |||
== See also == | |||
* [[Milstein method]] | |||
* [[Runge-Kutta method (SDE)]] | |||
==References== | |||
* {{cite book | author=Kloeden, P.E., & Platen, E. | title=Numerical Solution of Stochastic Differential Equations | publisher=Springer, Berlin | year=1992 | isbn=978-3-540-54062-5 | doi = 10.1007/978-3-662-12616-5}} | |||
{{DEFAULTSORT:Euler-Maruyama method}} | |||
[[Category:Numerical differential equations]] | |||
[[Category:Stochastic differential equations]] |
Latest revision as of 01:12, 5 October 2013
In mathematics, the Euler–Maruyama method is a method for the approximate numerical solution of a stochastic differential equation (SDE). It is a simple generalization of the Euler method for ordinary differential equations to stochastic differential equations. It is named after Leonhard Euler and Gisiro Maruyama.
Consider the stochastic differential equation (see Itō calculus)
with initial condition X0 = x0, where Wt stands for the Wiener process, and suppose that we wish to solve this SDE on some interval of time [0, T]. Then the Euler–Maruyama approximation to the true solution X is the Markov chain Y defined as follows:
- set Y0 = x0;
- recursively define Yn for 1 ≤ n ≤ N by
- where
The random variables ΔWn are independent and identically distributed normal random variables with expected value zero and variance .
Example
The following Python code implements Euler–Maruyama to solve the Ornstein–Uhlenbeck process:
import numpy as np import matplotlib.pyplot as plt import math import random tBegin=0 tEnd=2 dt=.00001 t = np.arange(tBegin, tEnd, dt) N = t.size IC=0 theta=1 mu=1.2 sigma=0.3 sqrtdt = math.sqrt(dt) y = np.zeros(N) y[0] = IC for i in xrange(1,N): y[i] = y[i-1] + dt*(theta*(mu-y[i-1])) + sigma*sqrtdt*random.gauss(0,1) ax = plt.subplot(111) ax.plot(t,y) plt.show()
See also
References
- 20 year-old Real Estate Agent Rusty from Saint-Paul, has hobbies and interests which includes monopoly, property developers in singapore and poker. Will soon undertake a contiki trip that may include going to the Lower Valley of the Omo.
My blog: http://www.primaboinca.com/view_profile.php?userid=5889534