量化庫

Quantlib 插值問題

  • April 27, 2018

我正在嘗試使用 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 範圍。只要您使用它們,您就必須確保這些向量保持活動狀態。您可以編寫一個儲存向量的小函式對象,而不是函式。

引用自:https://quant.stackexchange.com/questions/39463