Main Content

mkpp

生成分段多项式

说明

示例

pp = mkpp(breaks,coefs) 根据其间断数和系数生成分段多项式 pp。使用 ppval 计算特定点处的分段多项式,或使用 unmkpp 提取有关分段多项式的详细信息。

pp = mkpp(breaks,coefs,d) 指定分段多项式为向量值,以使其每个系数的值都是长度为 d 的向量。

示例

全部折叠

创建一个分段多项式,它在区间 [0,4] 内具有三次多项式,在区间 [4,10] 内具有二次多项式,在区间 [10,15] 内具有四次多项式。

breaks = [0 4 10 15];
coefs = [0 1 -1 1 1; 0 0 1 -2 53; -1 6 1 4 77];
pp = mkpp(breaks,coefs)
pp = struct with fields:
      form: 'pp'
    breaks: [0 4 10 15]
     coefs: [3x5 double]
    pieces: 3
     order: 5
       dim: 1

计算区间 [0,15] 内多个点处的分段多项式,并绘制结果图。在多项式汇合的断点处绘制垂直虚线。

xq = 0:0.01:15;
plot(xq,ppval(pp,xq))
line([4 4],ylim,'LineStyle','--','Color','k')
line([10 10],ylim,'LineStyle','--','Color','k')

创建并绘制一个具有四个区间的分段多项式,这四个区间中,两个二次多项式交替出现。

前两个子图显示了一个二次多项式在 [-8,-4] 区间上的结果以及它在 [-4,0] 区间上的求反。多项式为

1-(x2-1)2=-x24+x.

第三个子图显示将这两个二次多项式扩展到四个区间形成的分段多项式。添加垂直线是为了显示多项式汇合的点。

subplot(2,2,1)
cc = [-1/4 1 0]; 
pp1 = mkpp([-8 -4],cc);
xx1 = -8:0.1:-4; 
plot(xx1,ppval(pp1,xx1),'k-')

subplot(2,2,2)
pp2 = mkpp([-4 0],-cc);
xx2 = -4:0.1:0; 
plot(xx2,ppval(pp2,xx2),'k-')

subplot(2,1,2)
pp = mkpp([-8 -4 0 4 8],[cc;-cc;cc;-cc]);
xx = -8:0.1:8;
plot(xx,ppval(pp,xx),'k-')
hold on
line([-4 -4],ylim,'LineStyle','--')
line([0 0],ylim,'LineStyle','--')
line([4 4],ylim,'LineStyle','--')
hold off

输入参数

全部折叠

断点,指定为包含严格递增元素的长度为 L+1 的向量,这些元素代表 L 个区间中每个区间的开始点和结束点。

数据类型: single | double

多项式系数,指定为 L×k 矩阵,其中第 i 行 coefs(i,:) 包含第 i 个区间 [breaks(i), breaks(i+1)]k 次多项式的局部系数。换言之,多项式为 coefs(i,1)*(X-breaks(i))^(k-1) + coefs(i,2)*(X-breaks(i))^(k-2) + ... + coefs(i,k-1)*(X-breaks(i)) + coefs(i,k)

数据类型: single | double

维度,指定为标量或由整数组成的向量。指定 d 以表示分段多项式具有大小为 d 的系数值。

数据类型: single | double

输出参量

全部折叠

分段多项式,以结构体形式返回。将此结构体与 ppval 函数结合使用可计算一个或多个查询点处的分段多项式。该结构体包含以下字段。

字段描述
form

'pp'分段多项式

breaks

包含严格递增元素的长度为 L+1 的向量,这些元素代表 L 个区间中每个区间的开始点和结束点

coefs

L×k 矩阵,其中行 coefs(i,:) 包含第 i 个区间 [breaks(i),breaks(i+1)]k 次多项式的局部系数

pieces

段数 L

order

多项式的阶

dim

目标的维度

由于 coefs 中的多项式系数是每个区间的本地系数,因此您必须减去对应节点区间的较低端点,以使用传统多项式方程中的系数。换言之,对于区间 [x1,x2] 上的系数 [a,b,c,d],对应的多项式为

f(x)=a(xx1)3+b(xx1)2+c(xx1)+d.

扩展功能

版本历史记录

在 R2006a 之前推出

另请参阅

| | |