lballabio / QuantLib

The QuantLib C++ library
http://quantlib.org
Other
5k stars 1.73k forks source link

Cubic Interpolation Spline #2008

Open tony21248772 opened 3 days ago

tony21248772 commented 3 days ago

Hi,

I have a question on the setup of the tridiagonal system in the cubic interpolation (under the choice 'Spline' for derivative approximation. The tridiagonal system looks a bit different from the one suggested in the literature. In particular, the middle components of the vector tmp_, the right hand side vector of tridiagonal system, are caculated as:

            std::vector<Real> dx(n_-1), S(n_-1);

            for (Size

<http://quantlib.sourcearchive.com/documentation/1.1-1/namespaceQuantLib_af4cc4ef40b52c17cc455ead2a97aedb3.html#af4cc4ef40b52c17cc455ead2a97aedb3> i=0; i<n-1; ++i) { dx[i] = this->xBegin[i+1] - this->xBegin[i]; S[i] = (this->yBegin[i+1] - this->yBegin_[i])/dx[i]; }

            // first derivative approximation
            if (da_==CubicInterpolation::Spline

{ TridiagonalOperator for (Size =1; i<n_-1; ++i) { L.setMidRow(i, dx[i], 2.0(dx[i]+dx[i-1]), dx[i-1]); tmp[i] = 3.0(dx[i]S[i-1] + dx[i-1]S[i]); }

Following the literature L.setMidRow(i, dx[i-1], 2.0(dx[i]+dx[i-1]), dx[i]); tmp[i] = 3.0(S[i] - S[i-1]);

Am I missing something here? Or any reference you can point me to which derive what Quantlib implements?

Thanks,