我一直在使用QuantLib 1.6.2从CDS引导危险率
曲线。我的代码类似于随附的示例“function getId (val) {
return val.id;
}
function notMatchId (val) {
return arrayOfIDs.indexOf(val) === -1;
}
var result = response.map(getId).filter(notMatchId);
”
QuantLib分布,即
CDS.cpp
我尝试尝试使用不同的非线性插值方法(而不是上面列出的boost::shared_ptr<PiecewiseDefaultCurve<HazardRate, BackwardFlat> >
hazardRateStructure(new PiecewiseDefaultCurve<HazardRate, BackwardFlat>
(todaysDate, instruments, Actual365Fixed()));
),例如:
BackwardFlat
但我收到错误“ CubicNaturalSpline
KrugerCubic
Parabolic
FritschButlandCubic
MonotonicParabolic
”。将这些插值器中的一个传递到的唯一方法是什么?
no appropriate default constructor available
上课?
谢谢,
克里斯
答案 0 :(得分:0)
[注意:如果有人在这个问题上遇到麻烦,我在这里复制我在QuantLib邮件列表上给你的答案。]
您列出的类是实际的插值类,但曲线需要相应的工厂类(例如,示例中的BackwardFlat
是BackwardFlatInterpolation
类的工厂)。在三次插值的情况下,您必须使用Cubic
类。默认情况下,它构建Kruger插值(我不知道选择的原因)所以如果你写:
PiecewiseDefaultCurve<HazardRate, Cubic>(todaysDate, instruments, Actual365Fixed())
您将使用KrugerCubic
类获得曲线。要获得其他插值,您可以传递带有相应参数的Cubic
实例(您可以在插值类的构造函数中查找它们);例如,
PiecewiseDefaultCurve<HazardRate, Cubic>(todaysDate, instruments, Actual365Fixed(),
1e-12, Cubic(CubicInterpolation::Spline, false))
将使用CubicNaturalSpline
类和
PiecewiseDefaultCurve<HazardRate, Cubic>(todaysDate, instruments, Actual365Fixed(),
1e-12, Cubic(CubicInterpolation::Parabolic, true))
将使用MonotonicParabolic
类。