mkpp
生成分段多项式
说明
示例
创建包含多阶多项式的分段多项式
创建一个分段多项式,它在区间 [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] 区间上的求反。多项式为
第三个子图显示将这两个二次多项式扩展到四个区间形成的分段多项式。添加垂直线是为了显示多项式汇合的点。
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
输入参数
breaks
— 断点
向量
断点,指定为包含严格递增元素的长度为 L+1
的向量,这些元素代表 L
个区间中每个区间的开始点和结束点。
数据类型: single
| double
coefs
— 多项式系数
矩阵
多项式系数,指定为 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
以表示分段多项式具有大小为 d
的系数值。
数据类型: single
| double
输出参量
pp
— 分段多项式
结构体
分段多项式,以结构体形式返回。将此结构体与 ppval
函数结合使用可计算一个或多个查询点处的分段多项式。该结构体包含以下字段。
字段 | 描述 |
---|---|
form |
|
breaks | 包含严格递增元素的长度为 |
coefs |
|
pieces | 段数 |
order | 多项式的阶 |
dim | 目标的维度 |
由于 coefs
中的多项式系数是每个区间的本地系数,因此您必须减去对应节点区间的较低端点,以使用传统多项式方程中的系数。换言之,对于区间 [x1,x2]
上的系数 [a,b,c,d]
,对应的多项式为
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
输出结构体
pp
不同于 MATLAB® 中的pp
结构体。在 MATLAB 中,ppval
不能使用来自代码生成器的pp
结构体。进行代码生成时,ppval
不能使用 MATLAB 创建的pp
结构体。unmkpp
可以使用 MATLABpp
结构体进行代码生成。要从代码生成器创建的
pp
结构体中创建一个 MATLABpp
结构体:在代码生成中,使用
unmkpp
将分段多项式详细信息返回给 MATLAB。在 MATLAB 中,使用
mkpp
创建pp
结构体。
如果不提供
d
,则coefs
必须为二维且具有固定的列数。这种情况下,列数即为阶数。要定义分段常量多项式,
coefs
必须为列向量,或者d
必须包含至少两个元素。如果提供
d
且d
为1
,则d
必须为常量。否则,如果ppval
的输入为非标量,则ppval
的输出形状可能不同于 MATLAB 中的ppval
。如果提供
d
,则它必须具有固定长度。以下两组语句之一必须为 true:假定
m = length(d)
,npieces = length(breaks) - 1
。size(coefs,j) = d(j) size(coefs,m+1) = npieces size(coefs,m+2) = order
j
= 1,2,...,m。维度m+2
必须为固定长度。假定
m = length(d)
,npieces = length(breaks) - 1
。第二个维度必须为固定长度。size(coefs,1) = prod(d)*npieces size(coefs,2) = order
如果不提供
d
,以下语句必须为 true:假定
m = length(d)
,npieces = length(breaks) - 1
。第二个维度必须为固定长度。size(coefs,1) = prod(d)*npieces size(coefs,2) = order
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)