QuantLib
QuantLib copied to clipboard
FittedBondDiscountCurve: add resetGuess()
Hi,
For FittedBondDiscountCurve, user might want to rerun the optimization with a different guess. This is often required because these non-convex fitting methods can often get stuck in local minima, and multiple random guess starting points may be needed to find a better solution. Currently, the guessSolution_ member is private.
Note that i have poor c++ capabilities and poor OOP design knowledge. Diff below for illustrative purposes only.
diff --git a/src/fittedbonddiscountcurve.cpp b/src/fittedbonddiscountcurve.cpp
index 17270e9..9a14cfa 100644
--- a/src/fittedbonddiscountcurve.cpp
+++ b/src/fittedbonddiscountcurve.cpp
@@ -86,6 +86,11 @@ namespace QuantLibOvrd {
setup();
}
+ void FittedBondDiscountCurve::resetGuess(const Array& guess) {
+ QL_REQUIRE(fittingMethod_->size() == guess.size(), "guess is of wrong size");
+ guessSolution_ = guess;
+ update();
+ }
void FittedBondDiscountCurve::performCalculations() const {
diff --git a/src/fittedbonddiscountcurve.hpp b/src/fittedbonddiscountcurve.hpp
index db919a9..6d0eb7c 100644
--- a/src/fittedbonddiscountcurve.hpp
+++ b/src/fittedbonddiscountcurve.hpp
@@ -119,6 +119,8 @@ namespace QuantLibOvrd {
const FittingMethod& fitResults() const;
//@}
+ void resetGuess(const Array& guess);
+
//! \name Observer interface
//@{
void update() override;