大家假期快乐!
我正在尝试使用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))
我在编译/运行代码时没有出现错误,但是得到的是一个常量值,即某些东西显然是错误的。我认为问题在于我定义随机过程的方式,我不太清楚如何用boost::shared_ptr解释构造函数的最后一部分。
我很高兴听到任何建议和提示,并感谢您抽出时间阅读我的问题!
最诚挚的问候:)
发布于 2011-12-27 13:05:56
我不太确定这是否能解决这个问题,但至少我想帮忙:
首先,让我们看看SquareRootProcess的构造函数:
SquareRootProcess( Real b,
Real a,
Volatility sigma,
Real x0 = 0.0,
const boost::shared_ptr<discretization>& d = boost::shared_ptr<discretization>(new EulerDiscretization))如您所见,最后两个参数都有默认值。这意味着您可以像这样调用这个函数
SquareRoot(b,a,sigma);这意味着用b、a和西格玛的值调用函数。x0和d(最后两个参数)将获得它们在构造函数中写入的默认值。在这种情况下,对于x0和一个新的类型为离散化的共享指针对象,这个值为0.0。但是,由于您需要最后一个参数的值,所以默认值对您来说不是正确的选择。
据我所知,SquareRootProcess将计算一些内容,然后将数据存储在指针地址。这里我们来讨论构造器的第二部分& &。
参数列表中的&表示将函数传递给共享指针的引用。这意味着,如果调用函数,则指针(很可能)将被更改,并指向所需的值。如果函数具有引用调用,则实际上不需要在函数调用中添加任何符号。为了说明清楚,一些整数的处理过程是相同的:
void add(int a,int b,int& sum)
{
sum = a + b;
}
int main()
{
int sum;
add(5,12,sum);
// Now sum has the value 17
return 0;
}长话短说:如果一个函数需要对一个对象的引用,那么您只需在函数调用中传递对象本身。
现在回到你的案子:
您只需要使用类型离散创建一个共享指针,然后在函数调用中传递它。
const boost::shared_ptr<StochasticProcess1D::discretization> d(new StochasticProcess1D::discretizitation(/*Whatever constructor is needed for this type*/));
boost::shared_ptr<SquareRootProcess> squareRootProcess(new SquareRootProcess(b, a, sigma, miu0, d));这应该能做成这笔交易。如果成功了或者你还有什么问题就告诉我。诚挚的问候
发布于 2011-12-27 16:13:09
如前所述,如果不想自定义离散化对象,则不需要传递它,所以
boost::shared_ptr<SquareRootProcess> squareRootProcess(new
SquareRootProcess(b, a, sigma, miu0));会为你服务的。我看到的问题是不断发展的呼吁,你写道
miu=squareRootProcess->evolve(t,miu0,dt,dw);但这将导致每一步始终从miu0开始。这里的想法是,您从t=0和x=miu0开始,然后向您提供t=0.1的新miu。然后从t=0.1和x=miu (而不是miu0)开始,生成另一个步骤。所以你得写些这样的东西
miu = miu0;
for (Size j=1;j<=numVals;++j)
{
...
miu=squareRootProcess->evolve(t,miu,dt,dw); // not miu0
...
}才能得到想要的行为。
至于文档,您可能想看看实现QuantLib的第6章,它描述了Monte框架。它还将使您开始使用路径生成器;您可以使用这些生成器生成路径,而不必自己驱动流程。
哦,顺便问一下:您在sourcearchive.com使用的文档而不是quantlib.org上的“官方”文档有什么特别的原因吗?你觉得我们应该改进他们吗?
https://stackoverflow.com/questions/8644864
复制相似问题