<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Automatic Code Generation for Stochastic Runge-Kutta Methods</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Migran N. Gevorkyan</string-name>
          <email>gevorkyan_mn@rudn.university</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Anastasiya V. Demidova</string-name>
          <email>demidova_av@rudn.university</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Anna V. Korolkova</string-name>
          <email>korolkova_av@rudn.university</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Dmitry S. Kulyabov</string-name>
          <email>kulyabov_ds@rudn.university</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Applied Probability and Informatics, Peoples' Friendship University of Russia (RUDN University)</institution>
          ,
          <addr-line>6 Miklukho-Maklaya str., Moscow, 117198</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Laboratory of Information Technologies Joint Institute for Nuclear Research 6 Joliot-Curie</institution>
          ,
          <addr-line>Dubna, Moscow region, 141980</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2018</year>
      </pub-date>
      <fpage>90</fpage>
      <lpage>100</lpage>
      <abstract>
        <p>In this paper we consider in detail the realization of Runge-Kutta stochastic numerical methods with weak and strong convergence for systems of stochastic diferential equations in Ito form. The algorithm for generating the Wiener stochastic process, the algorithm for approximation of Ito stochastic integrals, and the code generation algorithms for numerical schemes are described. Python and Julia languages are used. The Jinja2 template engine is used for the code generation .</p>
      </abstract>
      <kwd-group>
        <kwd>and phrases</kwd>
        <kwd>stochastic diferential equations</kwd>
        <kwd>stochastic numeric methods</kwd>
        <kwd>automatic code generation</kwd>
        <kwd>Python</kwd>
        <kwd>Julia</kwd>
        <kwd>the template engine</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Copyright © 2018 for the individual papers by the papers’ authors. Copying permitted for private and
academic purposes. This volume is published and copyrighted by its editors.</p>
      <p>In: K. E. Samouylov, L. A. Sevastianov, D. S. Kulyabov (eds.): Selected Papers of the VIII Conference
“Information and Telecommunication Technologies and Mathematical Modeling of High-Tech Systems”,
Moscow, Russia, 20-Apr-2018, published at http://ceur-ws.org</p>
    </sec>
    <sec id="sec-2">
      <title>1. Introduction</title>
      <p>
        This article is divided into three sections. In the first section we define the Wiener
stochastic process and describe its implementation in Python and Julia . In the second
section the approximation algorithm of Ito integrals is given. Finally, in the third part
we introduce the details of code generator implementation for stochastic numerical
methods [
        <xref ref-type="bibr" rid="ref1 ref2">1, 2</xref>
        ] (in Python language with use of Jinja2 template engine)
2.
      </p>
    </sec>
    <sec id="sec-3">
      <title>Stochastic Wiener process 2.1.</title>
    </sec>
    <sec id="sec-4">
      <title>The Definition and Properties</title>
      <p>
        The stochastic process  (),  &gt; 0 is called scalar Wiener process if the following
conditions are true [
        <xref ref-type="bibr" rid="ref3 ref4">3, 4</xref>
        ]:
– P{ (0) = 0} = 1, or, in other words,  (0) = 0 is almost certain;
–  () is the process with independent increments, i.e. { }0− 1 are independent
random variables:  =  (+1) −  ( ) and 0 6 0 &lt; 1 &lt; 2 &lt; . . . &lt;  6  ;
–  =  (+1) −  ( ) ∼  (0, +1 −  ) where 0 6 +1 &lt;  &lt; ,  =
0, 1, . . . ,  − 1
      </p>
      <p>The symbol  ∼  (0, ) denotes that  is normally distributed random
variable with expected value E[ ] =  = 0 and variance D[ ] =  2 = .</p>
      <p>The Wiener process is the model of Brownian motion (random walk). If we consider
the process  () in time points 0 = 0 &lt; 1 &lt; 2 &lt; . . . &lt; − 1 &lt;  when it experiences
random additive changes, then directly from the definition of Wiener process follows:
 (1) =  (0) +
0,  (2) =  (1) +
1, . . . ,  ( ) =  (− 1) +
− 1,
where  ∼  (0, ), ∀ = 0, . . . ,  − 1.</p>
      <p>In the case of a multidimensional stochastic process one has to generate  sequences
of  normally distributed random variables.</p>
      <p>2.2.</p>
    </sec>
    <sec id="sec-5">
      <title>Program generation of Wiener process</title>
      <p>To simulate a one-dimensional Wiener process, it is necessary to generate  normally
distributed random numbers 1, . . . ,  and to construct their cumulative sums
1,
1 + 2,
1 + 2 + 3,
.
.
.
1 + 2 + 3 + . . . − 1,
1 + 2 + 3 + . . . − 1 +  .</p>
      <p>The result will be the simulated sample path of the Wiener process  () or — using a
diferent terminology — concrete implementation of the Wiener process.</p>
      <p>In the case of a multidimensional random process,  sequences of  normally
distributed random variables should be generated (that is,  arrays, each of  elements).</p>
      <p>
        We implemented Wiener process generator in Python [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] and Julia [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. To generate
an array of numbers distributed according to the standard normal distribution in
the case of Python, we used the function random.normal from the NumPy [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] library
and, in the case of Julia, the built-in randn function. Both functions give qualitative
pseudorandom sequences, since their work uses generators of uniformly distributed
pseudorandom numbers based on an algorithm called Mersenne’s vortex [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] (Mersenne
Twister), and generators of pseudorandom normally distributed numbers use the Box–
Mueller transformation [?, 9].
      </p>
      <p>To generate the Wiener process in Python one should use the WienerProcess class.
The following code gives an example of this class usage.
import stochastic
N = 100
T = (0.0, 10.0)
W = stochastic.WienerProcess(N=N, time_interval=T)
print("Step size: ", W.dt)
print("Time points: ", W.t)
print("Process iterations: ", W.dx)
print("Wiener Process trajectory: ", W.x)
print("Intervals numbers: ", len(W.dx))
print("Points number: ", len(W.x))</p>
      <p>
        The class constructor does not have any required arguments. By default, a process is
generated on a time interval [
        <xref ref-type="bibr" rid="ref1">0, 1</xref>
        ], which is divided into 1000 parts (N=1000). Thus, by
default, a path consisting of 1001 points with step dt equal to 0.001. An example of
Wiener trajectories is shown on fig. 1.
      </p>
      <p>10
5
t
W 0
5
0
2
4</p>
      <p>6
t
8
10</p>
      <sec id="sec-5-1">
        <title>X::Vector{Float64} "Winer process increments dX ~ N(0, dt)" dX::Vector{Float64} end</title>
        <sec id="sec-5-1-1">
          <title>With following contractors</title>
        </sec>
      </sec>
      <sec id="sec-5-2">
        <title>WienerProcess()</title>
      </sec>
      <sec id="sec-5-3">
        <title>WienerProcess(N::Int64) WienerProcess(N::Int64, dt::Float64) WienerProcess(N::Int64, t_0::Float64, t_N::Float64)</title>
        <p>Calculation and approximation of multiple Ito integrals of special form
the following form:</p>
        <p>
          Here we will not go into the general theory of multiple stochastic Ito integrals, a
reader can refer to the book [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] for additional information. Here we will consider multiple
special integrals, which are included in the stochastic numerical schemes.
        </p>
        <p>In general, for the construction of numerical schemes with order of convergence
greater than  = 12 , it is necessary to calculate single, double and triple Ito integrals of
 (, +1) =  (ℎ) =</p>
        <p>d  ( ),
+1
∫︁

∫︁
+1  1</p>
        <p>∫︁
 
+1  1  2
∫︁</p>
        <p>∫︁ ∫︁
  
 (, +1) =  (ℎ) =</p>
        <p>d  ( 2)d  ( 1),

(, +1) =</p>
        <p>In the case of a double integral  (ℎ), the exact formula takes place only at  =  :
00(ℎ) =</p>
        <p>=
1
2</p>
        <p>
          For the mixed case 0 and  0 in [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], simple formulas of the following form are
 (ℎ) in
given:
0 (ℎ) =
        </p>
        <p>ℎ  (ℎ) −
1</p>
        <p>︂)
1  (ℎ) ,
where   ∼</p>
        <p>(0, ℎ) are multidimensional normal distributed random variables.</p>
        <sec id="sec-5-3-1">
          <title>For the general case ,</title>
          <p>
            = 1, . . . , , the book [
            <xref ref-type="bibr" rid="ref4">4</xref>
            ] provides the following formulas for
approximating the double Ito integral  :
 (ℎ) =
          </p>
          <p>(ℎ) =
ℎ ∑∞︁ 1 [︃
2 =1 

︃(</p>
          <p>− ℎ 
  +
√︃ 2
2
ℎ</p>
          <p>+  (ℎ),
)︃</p>
          <p>− 
︃(
  +
√︃ 2
ℎ
 
)︃]︃
,
where
variables:
where  
 ∼ 
(0, 1),  
 ∼</p>
          <p>(0, 1),  = 1, . . . , ;  = 1, . . . , ∞;  = 1, . . . ,  is the
numerical schema number. From the formulas it is seen that in the case of 
=  , we
may get the final expression for the
 ̸=  , one has to sum the infinite series


, which we mentioned above. In the case of
. This algorithm gives the approximation
error of order (ℎ2/), where  is number of left terms of an infinite series
 .</p>
          <p>
            In the article [
            <xref ref-type="bibr" rid="ref11">11</xref>
            ] the matrix form of approximating formulas is introduced. Let
1× , 0×  be the unit and zero matrices  × , then
          </p>
          <p>I(ℎ) =</p>
          <p>W</p>
          <p>W − ℎ1×  + A(ℎ),


2
A(ℎ) =
2 =1 
ℎ ∑∞︁ 1 (︁ V(U + √︀2/ℎ</p>
          <p>W) − (U + √︀2/ℎ</p>
          <p>W)V )︁ ,
W, V, U are independent normally distributed multidimensional random
W = ( 1, 2, . . . , ) ∼  (0× , ℎ1× ),</p>
          <p>V = (1, 2, . . . , ) ∼  (0× , 1× ),
U = (1 , 2 , . . . , ) ∼  (0× , 1× ).
1
6
If the programming language supports vectored operations with multidimensional arrays,
these formulas can provide a benefit to the performance of the program.</p>
          <p>
            Finally, consider a triple integral. In the only numerical scheme in which it occurs, it
is necessary to be able to calculate only the case of identical indexes 
= 
=  . For
this case, [
            <xref ref-type="bibr" rid="ref10">10</xref>
            ] gives the following formula:


functional space L2( ) with the norm ‖ · ‖ . We assume that the random process x() is
x() = f (, x())d + G(, x())dW,
where W = ( 1, . . . ,  ) is the multidimensional Wiener process, known as the
driving process for SDE. The function f : [0,  ] × R
→ R is called as the drift vector,
and the matrix-valued function G : [0,  ] ×
matrix. The same equation can be rewritten in the indexed form
R ×
          </p>
          <p>1 and the maximum grid step ℎ = max {ℎ− 1}1 .</p>
          <p>Next, we assume that the grid is uniform, then ℎ = ℎ = const. x is grid function,
which approximate the stochastic process x(), so x0 = x(0), x ≈
x() ∀ = 1, . . . ,  .
4.1.</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Euler–Maruyama numerical method</title>
      <p>The simplest numerical method for solving scalar equations and systems of SDEs is
the Euler–Maruyama method.</p>
      <p>0 =  (0), +1 =  +   (, )ℎ + ∑︁  (, )

  .

terministic accuracy order, and value  denotes the stochastic part approximation
4.2.</p>
      <p>Weak stochastic Runge–Kutta-like method with order 1.5 for a scalar
1 =  + ∑︁ 1   ( + 0 ℎ, 0 )ℎ + ∑︁ 1 ( + 1 ℎ, 1 )√︀ℎ,
+1 =  + ∑︁  ( + 0 ℎ, 0 )ℎ+
+ ∑︁
 (︂
=1
1 1(ℎ) + 
2 11(ℎ)
√
ℎ
+ 3 10(ℎ)
+ 4 111(ℎ) )︂
ℎ
( + 1 ℎ, 1 ),
inside the stochastic Ito integrals: 10(ℎ), 1(ℎ), 11(ℎ), 111(ℎ).
where ,  = 1, . . . ,  ( is the number of method’s stages). In the above numerical
scheme, the Wiener stochastic process may be present in implicit way. It is "hidden"
4.3.</p>
      <p>
        Stochastic Runge–Kutta method with strong order  = 1.0 for vector
bution characteristics of stochastic process  (). The weak numerical method does
not need information about the trajectory of driving Wiener process   and random
increments for these methods can be generated on another probability space [
        <xref ref-type="bibr" rid="ref19 ref20 ref21 ref4">4, 19–21</xref>
        ].
0 =  + ∑︁ 0
      </p>
      <p>( + 0 ℎ, 0 )ℎ + ∑︁ ∑︁ 0  ( + 1 ℎ,  )^,
 =  + ∑︁ 1</p>
      <p>( + 0 ℎ, 0 )ℎ + ∑︁ 1  ( + 1 ℎ,  )√︀ℎ,
 =  + ∑︁ 2  
̂︀
 ( + 0 ℎ, 0 )ℎ + ∑︁
2  ( + 1 ℎ,  ) √
+1 =  + ∑︁ 

 ( + 0 , 0 )ℎ + ∑︁ ∑︁
 ( + 1 ℎ,  )+
In the weak numerical schema ^ are
^ =</p>
      <p>(^^ +
⎧ 1 (^^ −
⎪
⎪
⎪⎪⎪ 2
⎪⎨ 1
⎪ 2
⎪⎪⎪⎪ 1
⎪
,
Here ^ denotes three point distributed random variable. It means, that ^ may have
three values {− √3ℎ, 0, √3ℎ} with probabilities 1/6, 2/3 and 1/6 respectively. ~
denotes two point distributed random variable {− √ℎ, √ℎ} with probabilities 1/2 and
1/2 respectively.</p>
      <p>4.5. Automatic code generation for stochastic numerical methods of</p>
    </sec>
    <sec id="sec-7">
      <title>Runge–Kutta type</title>
      <p>To study the calculation errors and the eficiency of diferent stochastic numerical
methods, it is necessary to have a universal implementation of such methods. The
universality means the possibility to use any stochastic method with a desired strong or
weak error by setting its coeficient table. With direct transfer of mathematical formulas
to the program code, one need to use about five nested cycles, which extremely reduces
performance, since such code does not take into account a large number of zeros in
the coeficient tables and arithmetic operations on zero components are still performed,
although this is an extra waste of processor time.</p>
      <p>One way to achieve versatility and acceptable performance is to generate code for a
numerical method step. This approach minimizes the number of arithmetic operations
and saves memory, since the zero coeficients of the method do not have to be stored.</p>
      <p>We implemented a code generator for the three stochastic numerical methods
mentioned above:
– scalar method with strong convergence  = 1.5,
– vector method with strong convergence  = 1.0,
– vector method with weak convergence of  = 2.0.</p>
      <p>
        We use Python to implement the code generator and Jinja2 [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] template engine. This
template engine was originally created to generate HTML code, but its syntax is universal
and allows you to generate text of any kind without reference to any programming or
markup language.
      </p>
      <p>Information about the coeficients of each particular method is stored as a JSON file
of the following structure:
{
"name": "method’s name (the future name of the function)",
"description": "method’s short description",
"stage": 4,
"det_order": "2.0",
"stoch_order": "1.5",
"A0": [...],
"B0": [...],
"A1": [...],
"B1": [
["0", "0", "0", "0"],
["1/2", "0", "0", "0"],
["-1", "0", "0", "0"],
["-5", "3", "1/2", "0"]
],
"c0": ["0", "3/4", "0", "0"],
"c1": ["0", "1/4", "1", "1/4"],
"a": ["1/3", "2/3", "0", "0"],
"b1": ["-1", "4/3", "2/3", "0"],
"b2": ["-1", "4/3", "-1/3", "0"],
"b3": ["2", "-4/3", "-2/3", "0"],
"b4": ["-2", "5/3", "-2/3", "1"]
}</p>
      <p>The parameter stage is the number of method’s stages, det_order is the error order
of the deterministic part (), stoch_order is the error order of the stochastic part
(), name is the name of the method, which will then be used to create the name of
the generated function, so it should be written in one word without spaces. All other
parameters are the coeficients of the method. In this case, we give the coeficients of
the scalar method with strong convergence  = 1.5, omitting the coeficients
B0 to save text space. It is necessary to note that the values of the coeficients can be
specified in the form of rational fractions, for which they should be presented as JSON
a0, a1 and
strings and enclosed in double quotes.</p>
      <p>For internal representation of stochastic numerical methods we created three Python
classes: ScalarMethod, StrongVectorMethod and WeakVectorMethod. The
implementation of these classes is contained in the file</p>
      <p>coefficients_table.py. The constructors of
these classes read the JSON file and, based on them, create objects, which can later be
used for code generation. The Fraction class from the Python standard library is used
to represent rational coeficients. Each class has a method that generates a coeficient
check the correctness of the generator. For example, we give below the formula generated
automatically based on the data from JSON file for Runge–Kutta method
strong_srk1w2
with stages  = 3, and 2 dimensioned Wiener process. Nonzero coeficients of the method
are as follows:</p>
      <p>021 = 1, 121 = 1, 131 = 1, 121 = 1, 131 = − 1,
1 = 1/2, 2 = 1/2, 02 = 1, 12 = 1, 13 = 1, 11 = 1, 22 = 1/2, 32 = − 1/2.</p>
      <p>The numerical scheme formulas are quite cumbersome, despite the large number of
zeros in the coeficient table:
01 = , 11 = , 21 = ,
02 =  + ℎ[︁021  (, 01 )]︁,
12 =  + ℎ[︁121  (, 01 )]︁
22 =  + ℎ[︁121  (, 01 )]︁
13 =  + ℎ[︁131  (, 01 )]︁
+ 1211 (, 11 ) 11(ℎ)
√
+ 1212 (, 21 ) 21(ℎ) ,
√
+ 1211 (, 11 ) 12(ℎ)
√
+ 1212 (, 21 ) 22(ℎ) ,
√
+ 1311 (, 11 ) 11(ℎ)
√
+ 1312 (, 21 ) 21(ℎ) ,
√
23 =  + ℎ[︁131  (, 01 )]︁
+ +1311 (, 11 ) 12(ℎ)
√
+ 1312 (, 21 ) 22(ℎ) ,
√
ℎ
ℎ
ℎ
ℎ
ℎ
ℎ
ℎ
ℎ
[︁
+1 =  + ℎ 1

 (, 01 ) + 2
 ( + 0ℎ, 02 )]︁ + 111(ℎ)1 (, 11 )</p>
      <p>2
+ 22√︀ℎ1 ( + 1ℎ, 12 ) + 32√︀ℎ1 ( + 1ℎ, 13 )
2 3</p>
    </sec>
    <sec id="sec-8">
      <title>5. Conclusion</title>
      <p>We present the details of the software implementation of the Wiener process generation
in Julia and Python, the algorithm of approximation of multiple Ito integrals and the
details of the software implementation of the code generator for stochastic numerical
methods of Runge–Kutta type. The code generator allows one to get an efective
implementation of the methods and making it possible to use any table of coeficients.
The source code of the described programs is open and available at the link https:
//bitbucket.org/mngev/sde_num_generation.</p>
    </sec>
    <sec id="sec-9">
      <title>Acknowledgments</title>
      <p>The work is partially supported by Russian Foundation for Basic Research (RFBR)
grants No 16-07-00556. Also the publication was prepared with the support of the
“RUDN University Program 5-100”.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>M. N.</given-names>
            <surname>Gevorkyan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. V.</given-names>
            <surname>Demidova</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T. R.</given-names>
            <surname>Velieva</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. V.</given-names>
            <surname>Korol'kova</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. S.</given-names>
            <surname>Kulyabov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L. A.</given-names>
            <surname>Sevast</surname>
          </string-name>
          <article-title>'yanov, Implementing a Method for Stochastization of One-Step Processes in a Computer Algebra System, Programming</article-title>
          and
          <source>Computer Software</source>
          <volume>44</volume>
          (
          <issue>2</issue>
          ) (
          <year>2018</year>
          )
          <fpage>86</fpage>
          -
          <lpage>93</lpage>
          . arXiv:
          <year>1805</year>
          .03190, doi:10.1134/S0361768818020044.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>A. V.</given-names>
            <surname>Demidova</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. N.</given-names>
            <surname>Gevorkyan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. S.</given-names>
            <surname>Kulyabov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. V.</given-names>
            <surname>Korolkova</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L. A.</given-names>
            <surname>Sevastianov</surname>
          </string-name>
          ,
          <article-title>The Automation of Stochastization Algorithm with Use of SymPy Computer Algebra Library</article-title>
          ,
          <source>EPJ Web of Conferences</source>
          <volume>173</volume>
          (
          <year>2018</year>
          )
          <volume>05006</volume>
          _
          <fpage>1</fpage>
          -
          <lpage>4</lpage>
          . doi:
          <volume>10</volume>
          .1051/epjconf/201817305006.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>B.</given-names>
            <surname>Øksendal</surname>
          </string-name>
          ,
          <article-title>Stochastic diferential equations. An introduction with applications</article-title>
          ,
          <source>6th Edition</source>
          , Springer, Berlin Heidelberg New York,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>P. E.</given-names>
            <surname>Kloeden</surname>
          </string-name>
          , E. Platen,
          <source>Numerical Solution of Stochastic Diferential Equations, 2nd Edition</source>
          , Springer, Berlin Heidelberg New York,
          <year>1995</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5. G. Rossum, Python reference manual,
          <source>Tech. rep., Amsterdam</source>
          , The Netherlands, The
          <string-name>
            <surname>Netherlands</surname>
          </string-name>
          (
          <year>1995</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>J.</given-names>
            <surname>Bezanson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Edelman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Karpinski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V. B.</given-names>
            <surname>Shah</surname>
          </string-name>
          ,
          <article-title>Julia: A Fresh Approach to Numerical Computing, SIAM Review 59 (</article-title>
          <year>2017</year>
          )
          <fpage>65</fpage>
          -
          <lpage>98</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>E.</given-names>
            <surname>Jones</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Oliphant</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Peterson</surname>
          </string-name>
          , et al.,
          <article-title>SciPy: Open source scientific tools for Python, [</article-title>
          <source>Online; accessed 08.10</source>
          .
          <year>2017</year>
          ]
          <article-title>(2001-)</article-title>
          . URL http://www.scipy.org/
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>M.</given-names>
            <surname>Matsumoto</surname>
          </string-name>
          , T. Nishimura,
          <article-title>Mersenne twister: A 623-dimensionally Equidistributed Uniform Pseudo-random Number Generator</article-title>
          ,
          <source>ACM Trans. Model. Comput. Simul</source>
          .
          <volume>8</volume>
          (
          <issue>1</issue>
          ) (
          <year>1998</year>
          )
          <fpage>3</fpage>
          -
          <lpage>30</lpage>
          . doi:
          <volume>10</volume>
          .1145/272991.272995.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>G. E. P.</given-names>
            <surname>Box</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. E.</given-names>
            <surname>Muller</surname>
          </string-name>
          ,
          <article-title>A note on the generation of random normal deviates</article-title>
          ,
          <source>The Annals of Mathematical Statistics</source>
          <volume>29</volume>
          (
          <issue>2</issue>
          ) (
          <year>1958</year>
          )
          <fpage>610</fpage>
          -
          <lpage>611</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <given-names>A.</given-names>
            <surname>Rößler</surname>
          </string-name>
          ,
          <article-title>Runge-Kutta Methods for the Numerical Solution of Stochastic Differential Equations</article-title>
          ,
          <source>Ph.D. thesis</source>
          , Technischen Universität Darmstadt, Darmstadt (februar
          <year>2003</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>M. Wiktorsson</surname>
          </string-name>
          ,
          <article-title>Joint characteristic function and simultaneous simulation of iterated Itô integrals for multiple independent Brownian motions</article-title>
          ,
          <source>The Annals of Applied Probability</source>
          <volume>11</volume>
          (
          <issue>2</issue>
          ) (
          <year>2001</year>
          )
          <fpage>470</fpage>
          -
          <lpage>487</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <given-names>K.</given-names>
            <surname>Burrage</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. M.</given-names>
            <surname>Burrage</surname>
          </string-name>
          ,
          <article-title>High strong order explicit Runge-Kutta methods for stochastic ordinary diferential equations</article-title>
          ,
          <source>Appl. Numer. Math. (22)</source>
          (
          <year>1996</year>
          )
          <fpage>81</fpage>
          -
          <lpage>101</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <given-names>K.</given-names>
            <surname>Burrage</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. M.</given-names>
            <surname>Burrage</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. A.</given-names>
            <surname>Belward</surname>
          </string-name>
          ,
          <article-title>A bound on the maximum strong order of stochastic Runge-Kutta methods for stochastic ordinary diferential equations</article-title>
          .,
          <source>BIT (37)</source>
          (
          <year>1997</year>
          )
          <fpage>771</fpage>
          -
          <lpage>780</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <given-names>K.</given-names>
            <surname>Burrage</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. M.</given-names>
            <surname>Burrage</surname>
          </string-name>
          ,
          <article-title>General order conditions for stochastic Runge-Kutta methods for both commuting and non-commuting stochastic ordinary diferential equation systems</article-title>
          ,
          <source>Appl. Numer. Math. (28)</source>
          (
          <year>1998</year>
          )
          <fpage>161</fpage>
          -
          <lpage>177</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>P. M. Burrage</surname>
          </string-name>
          ,
          <article-title>Runge-Kutta Methods for Stochastic Diferential Equations</article-title>
          ,
          <source>Ph.D. thesis</source>
          , University of Qeensland, Australia (
          <year>1999</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <given-names>K.</given-names>
            <surname>Burrage</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. M.</given-names>
            <surname>Burrage</surname>
          </string-name>
          ,
          <article-title>Order conditions of stochastic Runge-Kutta methods by B-series</article-title>
          ,
          <source>SIAM J. Numer. Anal. (38)</source>
          (
          <year>2000</year>
          )
          <fpage>1626</fpage>
          -
          <lpage>1646</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>A. R. Soheili</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Namjoo</surname>
          </string-name>
          ,
          <article-title>Strong approximation of stochastic diferential equations with Runge-Kutta methods</article-title>
          ,
          <source>World Journal of Modelling and Simulation</source>
          <volume>4</volume>
          (
          <issue>2</issue>
          ) (
          <year>2008</year>
          )
          <fpage>83</fpage>
          -
          <lpage>93</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <given-names>A.</given-names>
            <surname>Rößler</surname>
          </string-name>
          , Strong and
          <string-name>
            <given-names>Weak</given-names>
            <surname>Approximation Methods for Stochastic Diferential Equations - Some Recent Developments</surname>
          </string-name>
          (
          <year>2010</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <given-names>Y.</given-names>
            <surname>Komori</surname>
          </string-name>
          , T. Mitsuri,
          <article-title>Stable ROW-Type Weak Scheme for Stochastic Diferential Equations</article-title>
          ,
          <source>RIMS Kokyuroku (932)</source>
          (
          <year>1995</year>
          )
          <fpage>29</fpage>
          -
          <lpage>45</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20. V. Mackevičius,
          <article-title>Second-order weak approximations for stratonovich stochastic diferential equations</article-title>
          ,
          <source>Lithuanian Mathematical Journal</source>
          <volume>34</volume>
          (
          <issue>2</issue>
          ) (
          <year>1994</year>
          )
          <fpage>183</fpage>
          -
          <lpage>200</lpage>
          . doi:
          <volume>10</volume>
          .1007/BF02333416. URL http://dx.doi.org/10.1007/BF02333416
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <given-names>A.</given-names>
            <surname>Tocino</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Ardanuy</surname>
          </string-name>
          ,
          <article-title>Runge-Kutta methods for numerical solution of stochastic diferential equations</article-title>
          ,
          <source>Journal of Computational and Applied Mathematics</source>
          (
          <volume>138</volume>
          ) (
          <year>2002</year>
          )
          <fpage>219</fpage>
          -
          <lpage>241</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <article-title>Jinja2 oficial site</article-title>
          . URL http://http://jinja.pocoo.org
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>