量化庫
Quantlib 插值問題
我正在嘗試使用 QuantLib 創建一些曲線,但我發現這個錯誤我真的不知道如何解決。為簡單起見,這是一個例子:
#include<iostream> #include <ql/quantlib.hpp> using namespace QuantLib; LinearInterpolation e() { std::vector<Time> x = { 0,1 }; std::vector<Real> y = { 0,2 }; return LinearInterpolation(x.begin(), x.end(), y.begin()); } int main() { LinearInterpolation c = e(); std::cout << c(0.5) << std::endl; system("pause"); return 0; }
但它給了我一個錯誤:“調試斷言失敗。向量迭代器 + 偏移超出範圍。”
如果我將程式碼更改為:
Real e(Real t) { std::vector<Time> x = { 0,1 }; std::vector<Real> y = { 0,2 }; LinearInterpolation c(x.begin(), x.end(), y.begin()); return c(t); } int main() { std::cout << e(0.5) << std::endl; system("pause"); return 0; }
但我想多次使用該函式,以便多次執行插值(因此效率不高)。我想知道是否有一種方法可以返回一個 Real 運算符,我只能在整個過程中使用一次插值。
該類
LinearInterpolation
不複製 x 和 y 範圍。只要您使用它們,您就必須確保這些向量保持活動狀態。您可以編寫一個儲存向量的小函式對象,而不是函式。