代码之家  ›  专栏  ›  技术社区  ›  Xodarap

有人能解释一下mkpp和ppval函数的行为吗?

  •  2
  • Xodarap  · 技术社区  · 14 年前

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   gnovice    14 年前

    功能 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 给你一个0的值,出现在第二个多项式的开始处。

    它可能有助于形象化你正在做的多项式如下:

    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
    

    alt text