ハッピーホリデー、みんな!boost :: shared_ptr/QuantLib/stochastic process/path generation
私は、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(新しいEulerDiscretization); boost :: shared_ptr squareRootProcess(新しいSquareRootProcess(b、a、sigma、miu0、d)); '残念ながら、私はまだ一定の結果を得ています。 –
sunshine
物事をより明確にするために、いくつかの質問をしてみましょう。1.どのようにdの価値を読んでいますか? (あなたはそれが変わっていないことをどのように知っていますか)。実際にはdの値を読み取ることはできません(アドレス)。例えば。あなたは 'd.get()'で値にアクセスすることができます。私は実際にあなたが変更を期待する正確な値とそれをチェックする方法を得られません。 2.この機能に関する文書はありますか?それとも実装がありますか? – Toby
コード全体を実行すると、miuの10種類の異なる値(つまり、0.1から1までの10の異なる時刻の値)が必要です。しかし、私はそれぞれの時間ステップごとに同じ値を得ています。これはプロセスが一定であることを意味します。したがって、私はそれを正しく定義していないと信じています。 dの値は、私が知る限り、 - EulerDiscretizationまたはEndEulerDiscretizationのいずれかになります。私はそれが変わるとは期待しませんが、それは最初に設定したプロセスのシミュレーションのための条件にすぎず、パス生成全体を通して同じままでなければなりません。それとも間違っているのですか? – sunshine