皆さん、ハッピーホリデー!
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 を使用してコンストラクターの最後の部分をどのように解釈するかがよくわかりません。
提案やヒントを聞いてうれしいです。私の質問を読んでくれてありがとう!
よろしくお願いします :)