mkpp
Make piecewise polynomial
Description
Examples
Create Piecewise Polynomial with Polynomials of Several Degrees
Create a piecewise polynomial that has a cubic polynomial in the interval [0,4], a quadratic polynomial in the interval [4,10], and a quartic polynomial in the interval [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
Evaluate the piecewise polynomial at many points in the interval [0,15] and plot the results. Plot vertical dashed lines at the break points where the polynomials meet.
xq = 0:0.01:15; plot(xq,ppval(pp,xq)) line([4 4],ylim,'LineStyle','','Color','k') line([10 10],ylim,'LineStyle','','Color','k')
Create Piecewise Polynomial with Repeated Pieces
Create and plot a piecewise polynomial with four intervals that alternate between two quadratic polynomials.
The first two subplots show a quadratic polynomial and its negation shifted to the intervals [8,4] and [4,0]. The polynomial is
$$1{(\frac{x}{2}1)}^{2}=\frac{{x}^{2}}{4}+x.$$
The third subplot shows a piecewise polynomial constructed by alternating these two quadratic pieces over four intervals. Vertical lines are added to show the points where the polynomials meet.
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
Input Arguments
breaks
— Break points
vector
Break points, specified as a vector of length L+1
with
strictly increasing elements that represent the start and end of each
of L
intervals.
Data Types: single
 double
coefs
— Polynomial coefficients
matrix
Polynomial coefficients, specified as an L
byk
matrix
with the ith row coefs(i,:)
containing the local
coefficients of an order k
polynomial on the ith
interval, [breaks(i), breaks(i+1)]
. In other words,
the polynomial is coefs(i,1)*(Xbreaks(i))^(k1) + coefs(i,2)*(Xbreaks(i))^(k2)
+ ... + coefs(i,k1)*(Xbreaks(i)) + coefs(i,k)
.
Data Types: single
 double
d
— Dimension
scalar  vector
Dimension, specified as a scalar or vector of integers. Specify d
to
signify that the piecewise polynomial has coefficient values of size d
.
Data Types: single
 double
Output Arguments
pp
— Piecewise polynomial
structure
Piecewise polynomial, returned as a structure. Use this structure
with the ppval
function to
evaluate the piecewise polynomial at one or more query points. The
structure has these fields.
Field  Description 

form 

breaks  Vector of length 
coefs 

pieces  Number of pieces, 
order  Order of the polynomials 
dim  Dimensionality of target 
Since the polynomial coefficients in coefs
are
local coefficients for each interval, you must subtract the lower
endpoint of the corresponding knot interval to use the coefficients
in a conventional polynomial equation. In other words, for the coefficients [a,b,c,d]
on
the interval [x1,x2]
, the corresponding polynomial
is
$$f\left(x\right)=a{\left(x{x}_{1}\right)}^{3}+b{\left(x{x}_{1}\right)}^{2}+c\left(x{x}_{1}\right)+d\text{\hspace{0.17em}}.$$
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
The output structure
pp
differs from thepp
structure in MATLAB^{®}. In MATLAB,ppval
cannot use thepp
structure from the code generator. For code generation,ppval
cannot use app
structure created by MATLAB.unmkpp
can use a MATLABpp
structure for code generation.To create a MATLAB
pp
structure from app
structure created by the code generator:In code generation, use
unmkpp
to return the piecewise polynomial details to MATLAB.In MATLAB, use
mkpp
to create thepp
structure.
If you do not provide
d
, thencoefs
must be twodimensional and have a fixed number of columns. In this case, the number of columns is the order.To define a piecewise constant polynomial,
coefs
must be a column vector ord
must have at least two elements.If you provide
d
andd
is1
, thend
must be a constant. Otherwise, if the input toppval
is nonscalar, then the shape of the output ofppval
can differ fromppval
in MATLAB.If you provide
d
, then it must have a fixed length. One of the following sets of statements must be true:Suppose that
m = length(d)
andnpieces = length(breaks)  1
.size(coefs,j) = d(j) size(coefs,m+1) = npieces size(coefs,m+2) = order
j
= 1,2,...,m. The dimensionm+2
must be fixed length.Suppose that
m = length(d)
andnpieces = length(breaks)  1
.The second dimension must be fixed length.size(coefs,1) = prod(d)*npieces size(coefs,2) = order
If you do not provide
d
, then the following statements must be true:Suppose that
m = length(d)
andnpieces = length(breaks)  1
.The second dimension must be fixed length.size(coefs,1) = prod(d)*npieces size(coefs,2) = order
ThreadBased Environment
Run code in the background using MATLAB® backgroundPool
or accelerate code with Parallel Computing Toolbox™ ThreadPool
.
This function fully supports threadbased environments. For more information, see Run MATLAB Functions in ThreadBased Environment.
Version History
Introduced before R2006a
Open Example
You have a modified version of this example. Do you want to open this example with your edits?
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
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)