2

如果我在 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改变我得到的结果?

4

1 回答 1

3

函数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

替代文字

于 2010-11-16T16:46:58.710 回答