Documentation

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

mkpp

Make piecewise polynomial

Syntax

pp = mkpp(breaks,coefs)
pp = mkpp(breaks,coefs,d)

Description

example

pp = mkpp(breaks,coefs) builds a piecewise polynomial pp from its breaks and coefficients. Use ppval to evaluate the piecewise polynomial at specific points, or unmkpp to extract details about the piecewise polynomial.

pp = mkpp(breaks,coefs,d) specifies that the piecewise polynomial is vector-valued, such that the value of each of its coefficients is a vector of length d.

Examples

collapse all

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 two quadratic polynomials, evaluate them at several query points, and plot the results. Then create a single piecewise polynomial with four intervals that alternate between the two quadratic polynomials.

The first two plots show a quadratic polynomial and its negation shifted to the intervals [-8,-4] and [-4,0]. The polynomial is

The last plot shows a piecewise polynomial constructed by alternating these two quadratic pieces over four intervals. It also shows its first derivative, which was constructed after breaking the piecewise polynomial apart using unmkpp.

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-')
[breaks,coefs,l,k,d] = unmkpp(pp);
dpp = mkpp(breaks,repmat(k-1:-1:1,d*l,1).*coefs(:,1:k-1),d);
hold on
plot(xx,ppval(dpp,xx),'r-')
hold off

Input Arguments

collapse all

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

Polynomial 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

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

collapse all

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.

FieldDescription
form

'pp' for piecewise polynomial

breaks

Vector of length L+1 with strictly increasing elements that represent the start and end of each of L intervals

coefs

L-by-k matrix with each row coefs(i,:) containing the local coefficients of an order k polynomial on the ith interval, [breaks(i),breaks(i+1)]

pieces

Number of pieces, L

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(x)=a(xx1)3+b(xx1)2+c(xx1)+d.

Extended Capabilities

See Also

| | |

Introduced before R2006a

Was this topic helpful?