如果我在MATLAB中执行以下操作:
ppval(mkpp(1:2, [1 0 0 0]),1.5)
ans = 0.12500
这应该构造一个多项式f(x) = x^3
并在x = 1.5
进行评估。那为什么它会给我结果1.5^3 = .125
?现在,如果我将第一个参数中定义的域更改为mkpp
,我会得到:
> ppval(mkpp([1 1.5 2], [[1 0 0 0]; [1 0 0 0]]), 1.5)
ans = 0
所以在不改变功能的情况下,我改变了答案。真棒。
有谁可以解释这里发生了什么?如何将第一个参数更改为mkpp
会改变我得到的结果?
答案 0 :(得分:2)
函数MKPP将移位多项式,以便x = 0
将从您给出的相应范围的开头开始。在您的第一个示例中,多项式x^3
将移至范围[1 2]
,因此,如果您要评估未移位范围[0 1]
的多项式,则必须做以下事情:
>> 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