Make piecewise polynomial
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 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
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
breaks
— Break pointsBreak 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 coefficientsPolynomial coefficients, specified as an L
-by-k
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)*(X-breaks(i))^(k-1) + coefs(i,2)*(X-breaks(i))^(k-2)
+ ... + coefs(i,k-1)*(X-breaks(i)) + coefs(i,k)
.
Data Types: single
| double
d
— DimensionDimension, 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
pp
— Piecewise polynomialPiecewise 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
Usage notes and limitations:
The output structure pp
differs
from the pp
structure in MATLAB®. In MATLAB, ppval
cannot
use the pp
structure from the code generator. For
code generation, ppval
cannot use a pp
structure
created by MATLAB. unmkpp
can use a MATLAB pp
structure
for code generation.
To create a MATLAB pp
structure from
a pp
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
the pp
structure.
If you do not provide d
, then coefs
must
be two-dimensional 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 or d
must have at least two
elements.
If you provide d
and d
is 1
,
then d
must be a constant. Otherwise, if the input
to ppval
is nonscalar, then the shape of the
output of ppval
can differ from ppval
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)
and npieces
= length(breaks) - 1
.
size(coefs,j) = d(j) size(coefs,m+1) = npieces size(coefs,m+2) = order
j
= 1,2,...,m.
The dimension m+2
must be fixed length.Suppose that m = length(d)
and npieces
= length(breaks) - 1
.
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)
and npieces
= length(breaks) - 1
.
size(coefs,1) = prod(d)*npieces size(coefs,2) = order
You have a modified version of this example. Do you want to open this example with your edits?