函数MKPP 将移动多项式,以便x = 0 将从您给它的相应范围的开头开始。在您的第一个示例中,多项式 x^3 移动到范围 [1 2],因此如果您想在 [0 1] 的 unshifted 范围内评估多项式,您必须执行以下操作:
>> pp = mkpp(1:2,[1 0 0 0]); %# Your polynomial
>> ppval(pp,1.5+pp.breaks(1)) %# Shift evaluation point by the range start
ans =
3.3750 %# The answer you expect
在您的第二个示例中,您将一个多项式 x^3 转移到 [1 1.5] 范围内,另一个多项式 x^3 转移到 [1.5 2] 范围内。在x = 1.5 处计算分段多项式会得到一个零值,出现在第二个多项式的开头。
如下所示可视化您正在制作的多项式可能会有所帮助:
x = linspace(0,3,100); %# A vector of x values
pp1 = mkpp([1 2],[1 0 0 0]); %# Your first piecewise polynomial
pp2 = mkpp([1 1.5 2],[1 0 0 0; 1 0 0 0]); %# Your second piecewise polynomial
subplot(1,2,1); %# Make a subplot
plot(x,ppval(pp1,x)); %# Evaluate and plot pp1 at all x
title('First Example'); %# Add a title
subplot(1,2,2); %# Make another subplot
plot(x,ppval(pp2,x)); %# Evaluate and plot pp2 at all x
axis([0 3 -1 8]) %# Adjust the axes ranges
title('Second Example'); %# Add a title