public SplineInterpolation(MatrixValue samples)
: base(samples)
{
a = new double[Np];
h = new double[Np];
for (int i = 2; i <= Np; i++)
h[i - 1] = samples[i, 1].Re - samples[i - 1, 1].Re;
if (Np > 2)
{
double[] sub = new double[Np - 1];
double[] diag = new double[Np - 1];
double[] sup = new double[Np - 1];
for (int i = 2; i < Np; i++)
{
int j = i - 1;
diag[j] = (h[j] + h[j + 1]) / 3;
sup[j] = h[j + 1] / 6;
sub[j] = h[j] / 6;
a[j] = (samples[i + 1, 2].Re - samples[i, 2].Re) / h[j + 1] - (samples[i, 2].Re - samples[i - 1, 2].Re) / h[j];
}
SolveTridiag(sub, diag, sup, ref a, Np - 2);
}
}