Maxima中的cspline给出了一个结果,表示Maxima中的错误

问题描述 投票:2回答:1

我有以下三次多项式f(x)=x³ - 3x²+ 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³-3x²+ 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)

这与原始多项式不一致。

进而更。这是对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。

谢谢。

maxima
1个回答
2
投票

你似乎误解了d1dncspline的论点。正如cspline所描述的那样,d1dn指定了端点处样条的一阶导数,而不是二阶导数。

当我使用f的一阶导数来指定d1dn的值时,我得到了预期的结果:

(%i2) f(x) := x^3 - 3* x^2 + x - 5$

(%i3) [x0, x1, x2]: [-1, 0, 1] $

(%i4) [y0, y1, y2]: map (f, %);
(%o4)                   [- 10, - 5, - 6]
(%i5) p: [[x0, y0], [x1, y1], [x2, y2]];
(%o5)           [[- 1, - 10], [0, - 5], [1, - 6]]
(%i6) load (interpol) $

(%i7) cspline (p, d1 = at(diff(f(x), x), x=x0), dn = at(diff(f(x), x), x=x2));
        3      2
(%o7) (x  - 3 x  + x - 5) charfun2(x, minf, 0)
                            3      2
                        + (x  - 3 x  + x - 5) charfun2(x, 0, inf)
© www.soinside.com 2019 - 2024. All rights reserved.