QuantLib: a free/open-source library for quantitative finance
Fully annotated sources - version 1.32
Loading...
Searching...
No Matches
stochasticprocess.hpp
1/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3/*
4 Copyright (C) 2003 Ferdinando Ametrano
5 Copyright (C) 2001, 2002, 2003 Sadruddin Rejeb
6 Copyright (C) 2004, 2005 StatPro Italia srl
7
8 This file is part of QuantLib, a free-software/open-source library
9 for financial quantitative analysts and developers - http://quantlib.org/
10
11 QuantLib is free software: you can redistribute it and/or modify it
12 under the terms of the QuantLib license. You should have received a
13 copy of the license along with this program; if not, please email
14 <quantlib-dev@lists.sf.net>. The license is also available online at
15 <http://quantlib.org/license.shtml>.
16
17 This program is distributed in the hope that it will be useful, but WITHOUT
18 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
19 FOR A PARTICULAR PURPOSE. See the license for more details.
20*/
21
26#ifndef quantlib_stochastic_process_hpp
27#define quantlib_stochastic_process_hpp
28
29#include <ql/time/date.hpp>
30#include <ql/patterns/observable.hpp>
31#include <ql/math/matrix.hpp>
32
33namespace QuantLib {
34
36
42 class StochasticProcess : public Observer, public Observable {
43 public:
46 public:
47 virtual ~discretization() = default;
49 Time t0,
50 const Array& x0,
51 Time dt) const = 0;
53 Time t0,
54 const Array& x0,
55 Time dt) const = 0;
57 Time t0,
58 const Array& x0,
59 Time dt) const = 0;
60 };
61 ~StochasticProcess() override = default;
63
64
65 virtual Size size() const = 0;
67 virtual Size factors() const;
69 virtual Array initialValues() const = 0;
73 virtual Array drift(Time t,
74 const Array& x) const = 0;
79 const Array& x) const = 0;
88 virtual Array expectation(Time t0,
89 const Array& x0,
90 Time dt) const;
99 virtual Matrix stdDeviation(Time t0,
100 const Array& x0,
101 Time dt) const;
110 virtual Matrix covariance(Time t0,
111 const Array& x0,
112 Time dt) const;
123 virtual Array evolve(Time t0,
124 const Array& x0,
125 Time dt,
126 const Array& dw) const;
130 virtual Array apply(const Array& x0,
131 const Array& dx) const;
133
135
136
143 virtual Time time(const Date&) const;
145
147
148 void update() override;
150 protected:
151 StochasticProcess() = default;
152 explicit StochasticProcess(ext::shared_ptr<discretization>);
153 ext::shared_ptr<discretization> discretization_;
154 };
155
156
158
164 public:
167 public:
168 virtual ~discretization() = default;
170 Time t0, Real x0, Time dt) const = 0;
172 Time t0, Real x0, Time dt) const = 0;
174 Time t0, Real x0, Time dt) const = 0;
175 };
177
178
179 virtual Real x0() const = 0;
181 virtual Real drift(Time t, Real x) const = 0;
185 virtual Real diffusion(Time t, Real x) const = 0;
193 virtual Real expectation(Time t0, Real x0, Time dt) const;
201 virtual Real stdDeviation(Time t0, Real x0, Time dt) const;
209 virtual Real variance(Time t0, Real x0, Time dt) const;
219 virtual Real evolve(Time t0, Real x0, Time dt, Real dw) const;
223 virtual Real apply(Real x0, Real dx) const;
225 protected:
227 explicit StochasticProcess1D(ext::shared_ptr<discretization>);
228 ext::shared_ptr<discretization> discretization_;
229 private:
230 // StochasticProcess interface implementation
231 Size size() const override;
232 Array initialValues() const override;
233 Array drift(Time t, const Array& x) const override;
234 Matrix diffusion(Time t, const Array& x) const override;
235 Array expectation(Time t0, const Array& x0, Time dt) const override;
236 Matrix stdDeviation(Time t0, const Array& x0, Time dt) const override;
237 Matrix covariance(Time t0, const Array& x0, Time dt) const override;
238 Array evolve(Time t0, const Array& x0, Time dt, const Array& dw) const override;
239 Array apply(const Array& x0, const Array& dx) const override;
240 };
241
242
243 // inline definitions
244
246 return 1;
247 }
248
250 Array a(1, x0());
251 return a;
252 }
253
254 inline Array StochasticProcess1D::drift(Time t, const Array& x) const {
255 #if defined(QL_EXTRA_SAFETY_CHECKS)
256 QL_REQUIRE(x.size() == 1, "1-D array required");
257 #endif
258 Array a(1, drift(t, x[0]));
259 return a;
260 }
261
263 #if defined(QL_EXTRA_SAFETY_CHECKS)
264 QL_REQUIRE(x.size() == 1, "1-D array required");
265 #endif
266 Matrix m(1, 1, diffusion(t, x[0]));
267 return m;
268 }
269
271 Time t0, const Array& x0, Time dt) const {
272 #if defined(QL_EXTRA_SAFETY_CHECKS)
273 QL_REQUIRE(x0.size() == 1, "1-D array required");
274 #endif
275 Array a(1, expectation(t0, x0[0], dt));
276 return a;
277 }
278
280 Time t0, const Array& x0, Time dt) const {
281 #if defined(QL_EXTRA_SAFETY_CHECKS)
282 QL_REQUIRE(x0.size() == 1, "1-D array required");
283 #endif
284 Matrix m(1, 1, stdDeviation(t0, x0[0], dt));
285 return m;
286 }
287
289 Time t0, const Array& x0, Time dt) const {
290 #if defined(QL_EXTRA_SAFETY_CHECKS)
291 QL_REQUIRE(x0.size() == 1, "1-D array required");
292 #endif
293 Matrix m(1, 1, variance(t0, x0[0], dt));
294 return m;
295 }
296
298 Time dt, const Array& dw) const {
299 #if defined(QL_EXTRA_SAFETY_CHECKS)
300 QL_REQUIRE(x0.size() == 1, "1-D array required");
301 QL_REQUIRE(dw.size() == 1, "1-D array required");
302 #endif
303 Array a(1, evolve(t0,x0[0],dt,dw[0]));
304 return a;
305 }
306
308 const Array& dx) const {
309 #if defined(QL_EXTRA_SAFETY_CHECKS)
310 QL_REQUIRE(x0.size() == 1, "1-D array required");
311 QL_REQUIRE(dx.size() == 1, "1-D array required");
312 #endif
313 Array a(1, apply(x0[0],dx[0]));
314 return a;
315 }
316
317}
318
319
320#endif
1-D array used in linear algebra.
Definition: array.hpp:52
Size size() const
dimension of the array
Definition: array.hpp:495
Concrete date class.
Definition: date.hpp:125
Matrix used in linear algebra.
Definition: matrix.hpp:41
Object that notifies its changes to a set of observers.
Definition: observable.hpp:62
Object that gets notified when a given observable changes.
Definition: observable.hpp:116
discretization of a 1-D stochastic process
virtual Real diffusion(const StochasticProcess1D &, Time t0, Real x0, Time dt) const =0
virtual Real variance(const StochasticProcess1D &, Time t0, Real x0, Time dt) const =0
virtual Real drift(const StochasticProcess1D &, Time t0, Real x0, Time dt) const =0
1-dimensional stochastic process
virtual Real apply(Real x0, Real dx) const
Size size() const override
returns the number of dimensions of the stochastic process
ext::shared_ptr< discretization > discretization_
virtual Real variance(Time t0, Real x0, Time dt) const
virtual Real drift(Time t, Real x) const =0
returns the drift part of the equation, i.e.
Matrix covariance(Time t0, const Array &x0, Time dt) const override
virtual Real evolve(Time t0, Real x0, Time dt, Real dw) const
Array initialValues() const override
returns the initial values of the state variables
virtual Real x0() const =0
returns the initial value of the state variable
virtual Real stdDeviation(Time t0, Real x0, Time dt) const
virtual Real expectation(Time t0, Real x0, Time dt) const
virtual Real diffusion(Time t, Real x) const =0
returns the diffusion part of the equation, i.e.
discretization of a stochastic process over a given time interval
virtual Matrix covariance(const StochasticProcess &, Time t0, const Array &x0, Time dt) const =0
virtual Matrix diffusion(const StochasticProcess &, Time t0, const Array &x0, Time dt) const =0
virtual Array drift(const StochasticProcess &, Time t0, const Array &x0, Time dt) const =0
multi-dimensional stochastic process class.
virtual Size size() const =0
returns the number of dimensions of the stochastic process
~StochasticProcess() override=default
virtual Matrix stdDeviation(Time t0, const Array &x0, Time dt) const
virtual Array drift(Time t, const Array &x) const =0
returns the drift part of the equation, i.e.,
virtual Array evolve(Time t0, const Array &x0, Time dt, const Array &dw) const
virtual Matrix covariance(Time t0, const Array &x0, Time dt) const
ext::shared_ptr< discretization > discretization_
virtual Array apply(const Array &x0, const Array &dx) const
virtual Array expectation(Time t0, const Array &x0, Time dt) const
virtual Size factors() const
returns the number of independent factors of the process
virtual Matrix diffusion(Time t, const Array &x) const =0
returns the diffusion part of the equation, i.e.
virtual Time time(const Date &) const
virtual Array initialValues() const =0
returns the initial values of the state variables
Real Time
continuous quantity with 1-year units
Definition: types.hpp:62
QL_REAL Real
real number
Definition: types.hpp:50
std::size_t Size
size of a container
Definition: types.hpp:58
Definition: any.hpp:35