У меня есть следующий кубический полином f (x) = x³ - 3 x² + x -5, для которого кубический сплайн должен предоставить точно такой же полином, предполагая следующие данные: (-1, -10), (0, -5), (1, -6) со второй производной в крайних значениях f '' (- 1) = - 12, f '' (1) = 0 (обратите внимание, что f '' (x) = 6x-6.)
Вот фрагмент кода, который я попробовал:
/* polynomial to interpolate and data */
f(x) := x^3 - 3* x^2 + x - 5$
x0:-1$
x1:0$
x2:1$
y0:f(x0)$
y1:f(x1)$
y2:f(x2)$
p:[[x0,y0],[x1,y1],[x2,y2]]$
fpp(x) := diff(f(x),x,2);
fpp0 : at( fpp(x), [x=x0]);
fpp2 : at( fpp(x), [x=x2]);
/* here I call cspline with d1=fpp0 and dn=fpp2 */
load(interpol)$
cspline(p, d1=fpp0, dn=fpp2);
Я ожидал исходный многочлен (f (x) = x³ -3 x² + x -5), но получил результат:
(% o40) (-16 * x ^ 3-15 * x ^ 2 + 6 * x-5) * charfun2 (x, -inf, 0) + (8 * x ^ 3-15 *x ^ 2 + 6 * x-5) * charfun2 (x, 0, inf)
, который не согласуется с исходным полиномом.
Evenmore.Вот тест на результаты, предоставленные Maxima.Код:
/* verification */
h11(x) := -16*x^3 - 15* x^2 + 6* x - 5;
h22(x) := 8* x^3 - 15*x^2 + 6* x - 5;
h11pp(x) := diff(h11(x), x, 2);
h11pp0: at( h11pp(x), [x=x0]);
h22pp(x) := diff(h22(x), x, 2);
h22pp2 : at(h22pp(x), [x=x2]);
, который выбрасывает 66 и 18 в качестве граничных условий, которые должны быть вместо -12 и 0.
Спасибо.