QuantLib icon indicating copy to clipboard operation
QuantLib copied to clipboard

Cubic Interpolation Spline

Open tony21248772 opened this issue 7 months ago • 2 comments

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,

tony21248772 avatar Jul 03 '24 06:07 tony21248772