【问题标题】:Can someone explain the behavior of the functions mkpp and ppval?有人可以解释函数 mkpp 和 ppval 的行为吗?
【发布时间】:2010-11-16 16:28: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 会如何改变我得到的结果?

【问题讨论】:

    标签: function matlab arguments octave polynomial-math


    【解决方案1】:

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

    【讨论】:

    • 我已经盯着这个很久了...谢谢!如果我想在某个向量点上评估它,我会怎么做?有没有比 ppval 更好的函数?
    • @Xodarap:您可以将点向量传递给PPVAL,如我上面的示例绘图代码所示。
    猜你喜欢
    • 2020-11-12
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2016-09-18
    • 2013-11-30
    相关资源
    最近更新 更多