大家节日快乐!boost :: shared_ptr/QuantLib /随机过程/路径生成
我正在尝试使用QuantLib/Boost C++库生成平方根进程的路径,并遇到了我认为是一个快速而简单的解决方案令人讨厌的小问题!我很新的节目,所以请不要太苛刻了我:) 这是我知道的: 1.构造是这样的:
SquareRootProcess(Real b, Real a, Volatility sigma, Real x0 = 0.0, const boost::shared_ptr<discretization>& d = boost::shared_ptr<discretization>(new EulerDiscretization))
的关键功能当用QuantLib模拟随机过程时,可以使用evolve(t,x,dt,dw)。
这里是我的代码如下所示:
#include "stdafx.h" #include <ql/quantlib.hpp> #include <ql/stochasticprocess.hpp> #include <ql/processes/squarerootprocess.hpp> #include <ql/Processes/eulerdiscretization.hpp> using namespace QuantLib; void SquareRootProcessSimulation() { Real miu0=0.0; Real miu; Real b=0.3; Real a=5.5; Volatility sigma=2.02; BigInteger seed=12324; MersenneTwisterUniformRng unifMt(seed); BoxMullerGaussianRng<MersenneTwisterUniformRng> bmGauss(unifMt); const boost::shared_ptr<StochasticProcess1D::discretization> &d = boost::shared_ptr<StochasticProcess1D::discretization>( EndEulerDiscretization); boost::shared_ptr<SquareRootProcess> squareRootProcess(new SquareRootProcess(b, a, sigma, miu0, d&)); Time dt=0.1,t=0.0; Real dw; Size numVals=10; for (Size j=1;j<=numVals;++j) { dw=bmGauss.next().value; miu=squareRootProcess->evolve(t,miu0,dt,dw); std::cout << "Time: " << t+dt << ", miu_t: " << miu << std::endl; t+=dt; } }; int _tmain(int argc, _TCHAR* argv[]) { SquareRootProcessSimulation(); std::cin.get(); return 0; }
`
我得到编译时没有错误/运行的代码,但出来的东西是一个恒定值,即有些显然是错误的。我认为问题在于我已经定义了随机过程,我无法弄清楚如何用boost :: shared_ptr解释构造函数的最后部分。
我很高兴听到任何建议和提示,并感谢您花时间阅读我的问题!
问候:)
非常感谢您的快速响应!我尝试了以下内容:'const boost :: shared_ptr d(new EulerDiscretization); boost :: shared_ptr squareRootProcess(new SquareRootProcess(b,a,sigma,miu0,d));'但不幸的是我仍然得到了不变的结果,但仍然不起作用! –
sunshine
2011-12-27 14:24:19
让我问一些问题,使事情更清楚:1.你如何读取d的价值? (你怎么知道它没有改变)。你实际上不能只读出d的值(这是地址)。例如。通过boost共享指针,你可以通过'd.get()来访问这个值'我实际上并没有确切地得到你期望改变的值以及你如何检查它。 2.有这个功能的任何文档吗?或者你有实施? – Toby 2011-12-27 14:37:56
当我运行整个代码时,它应该输出10个不同的miu值(即10个不同时刻的值 - 从0.1到1)。但是,我在每个时间步中都会得到相同的值,这意味着过程是不变的。因此我相信我没有正确定义它。就我所知,d的值可以是 - EulerDiscretization或EndEulerDiscretization。我不希望它改变,它只是模拟我在开始时所阐述的过程的一个条件,在整个路径生成过程中应该保持不变。或者我错了? – sunshine 2011-12-27 14:49:42