Написал формулы сплайнов Акимы (кому надо — могут методичку забрать тут). Решил сверить с кодом с АлгЛиба. Бросилось в глаза:
d[0] = diffthreepoint(x[0], x[0], y[0], x[1], y[1], x[2], y[2]);
d[1] = diffthreepoint(x[1], x[0], y[0], x[1], y[1], x[2], y[2]);
d[n-2] = diffthreepoint(x[n-2], x[n-3], y[n-3], x[n-2], y[n-2], x[n-1], y[n-1]);
d[n-1] = diffthreepoint(x[n-1], x[n-3], y[n-3], x[n-2], y[n-2], x[n-1], y[n-1]);
Лезем в исходники дальше:
/*******************************************
Internal subroutine. Three-point differentiation
********************************************/
private static double diffthreepoint(double t,
double x0,
double f0,
double x1,
double f1,
double x2,
double f2)
{
double result = 0;
double a = 0;
double b = 0;
t = t-x0;
x1 = x1-x0;
x2 = x2-x0;
a = (f2-f0-x2/x1*(f1-f0))/(AP.Math.Sqr(x2)-x1*x2);
b = (f1-f0-a*AP.Math.Sqr(x1))/x1;
result = 2*a*t+b;
return result;
}
Напрягая мозги, вспомнил, что это есть метод вычисления производной функции по 3-м точкам. Пришлось вписывать и его.
Музыка: Gouryella — «Gouryella»
Настроение: arbeiten, arbeiten, arbeiten!
Популярность: 6% [?]