朋友你好
我正在尝试对MATLAB中给出的数据进行分段立方Hermite插值,然后我想得到x轴多项式所覆盖的区域。我想,我误解了pchip命令返回的系数的含义,但不确定。难道不知道会出现什么问题吗?
x = [5.8808 6.5137 7.1828 7.8953];
y = [31.2472 33.9977 36.7661 39.3567];
pp = pchip(x,y)
如果我看到pp,它会给出pp作为
form: 'pp'
breaks: [5.8808 6.5137 7.1828 7.8953]
coefs: [3x4 double]
pieces: 3
order: 4
dim: 1
和pp.coefs
-0.0112 -0.1529 4.4472 31.2472
-0.3613 0.0884 4.2401 33.9977
-0.0422 -0.3028 3.8731 36.7661
我认为这些是代表三个区间的多项式
[5.8808:6.5137],
[6.5137:7.1828],
[7.1828:7.8953]
但是当我使用这些多项式找到对应于x值的y值时,它会给出错误的值。
它给出第二个多项式的负y值。甚至第三个多项式似乎也不满足这些要点。
我使用这些命令来获取值
例如: - (对于第二个多项式)
xs = linspace(6.5137, 7.1828, 200);
y = polyval(pp.coefs(2,:),xs);
plot(xs,y)
我想找到该图所覆盖的曲线下面积,这就是我试图找到多项式的原因。有没有其他方法可以做到这一点,或者如果有人能在我使用的命令中找到问题,请告诉我。
感谢
Bhomik Luthra
答案 0 :(得分:2)
正如Schorsch的评论中暗示的那样,您应该使用函数ppval
而不是polyval
。实际上,即使它们是相关的,这两个函数也有不同的目标:
polyval
可用于将向量解释为多项式,其中向量中的每个条目是多项式中的系数。使用此功能,无法分段定义多项式。ppval
可让您评估分段多项式。多项式的片段在中断之间定义(正如您猜测的那样)。然后,在两个中断之间,多项式的系数是针对(x-left)
中的多项式给出的(左边是考虑区间的左侧),而不是x
。为实现目标,您将拥有两个等效的解决方案:
在命令中使用ppval
代替polyval
(我建议使用该解决方案):
xs = linspace(6.5137, 7.1828, 200);
y = ppval(pp,xs);
plot(xs,y)
正确使用多边形函数:
xs = linspace(6.5137, 7.1828, 200);
y = polyval(pp.coefs(2,:),xs-6.5137);
plot(xs,y)
希望这有帮助!