祝大家节日快乐!
我正在尝试使用 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 模拟随机过程时要使用的关键函数是 Evolution(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 解释构造函数的最后一部分。
我很高兴听到任何建议和提示,并感谢您花时间阅读我的问题!
此致 :)