ppmak
Put together spline in ppform
Syntax
ppmak(breaks,coefs) 
ppmak 
ppmak(breaks,coefs,d) 
ppmak(breaks,coefs,sizec)  
Description
The command ppmak(...) puts together a spline in ppform from minimal information, with the rest inferred from that
                information. fnbrk provides any or all of the
                parts of the completed description. In this way, the actual data structure used for
                the storage of the ppform is easily modified without any effect on the various
                    fn... commands that use this construct. However, the casual
                user is not likely to use ppmak explicitly, relying instead on
                the various spline construction commands in the toolbox to construct particular
                splines.
ppmak(breaks,coefs)  returns the ppform of
                the spline specified by the break information in breaks and the
                coefficient information in coefs. How that information is
                interpreted depends on whether the function is univariate or multivariate, as
                indicated by breaks being a sequence or a cell array.
If breaks is a sequence, it must be nondecreasing, with its
                first entry different from its last. Then the function is assumed to be univariate,
                and the various parts of its ppform are determined as follows:
The number
lof polynomial pieces is computed aslength(breaks)-1, and the basic interval is, correspondingly, the interval[breaks(1)..breaks(l+1)].The dimension
dof the function's target is taken to be the number of rows incoefs. In other words, each column ofcoefsis taken to be one coefficient. More explicitly,coefs(:,i*k+j)is assumed to contain thejth coefficient of the(i+1)st polynomial piece (with the first coefficient the highest and thekth coefficient the lowest, or constant, coefficient). Thus, withklthe number of columns ofcoefs, the orderkof the piecewise-polynomial is computed asfix(kl/l).
After that, the entries of coefs are reordered, by the
                command
coefs = reshape(permute(reshape(coefs,[d,k,l]),[1 3 2]),[d*l,k])
in order to conform with the internal interpretation of the coefficient array in
                the ppform for a univariate spline. This only applies when you use the syntax
                    ppmak(breaks,coefs) where breaks is a
                sequence (row vector), not when it is a cell-array. The permutation is not made when
                you use the three-argument forms of ppmak. For the three-argument
                forms only a reshape is done, not a permute.
If breaks is a cell array, of length m, then
                the function is assumed to be m-variate (tensor product), and the
                various parts of its ppform are determined from the input as follows:
The
m-vector l haslength(breaks{i})-1as itsith entry and, correspondingly, them-cell array of its basic intervals has the interval[breaks{i}(1) .. breaks{i}(end)]as itsith entry.The dimension
dof the function's target and them-vectorkof (coordinate-wise polynomial) orders of its pieces are obtained directly from the size ofcoefs, as follows.If
coefsis anm-dimensional array, then the function is taken to be scalar-valued, i.e.,dis 1, and them-vectorkis computed assize(coefs)./l. After that,coefsis reshaped by the commandcoefs = reshape(coefs,[1,size(coefs)]).If
coefsis an (r+m)-dimensional array, withsizec = size(c)say, thendis set tosizec(1:r), and thevectorkis computed assizec(r+(1:m))./l. After that,coefsis reshaped by the commandcoefs = reshape(coefs,[prod(d),sizec(r+(1:m))]).
Then, coefs is interpreted as an equivalent array of size
                    [d,l(1),k(1),l(2),k(2),...,l(m),k(m)], with its
                    (:,i(1),r(1),i(2),r(2),...,i(m),r(m))th entry the coefficient
                of
in the local polynomial representation of the function on the (hyper)rectangle with sides
This is, in fact, the internal interpretation of the coefficient array in the ppform of a multivariate spline.
ppmak  prompts you for
                    breaks and coefs.
ppmak(breaks,coefs,d)  with
                    d a positive integer, also puts together the ppform of a
                spline from the information supplied, but expects the function to be univariate. In
                that case, coefs is taken to be of size
                    [d*l,k], with l obtained as
                    length(breaks)-1, and this determines the order,
                    k, of the spline. With this,
                    coefs(i*d+j,:) is taken to be the jth
                components of the coefficient vector for the (i+1)st polynomial
                piece. 
ppmak(breaks,coefs,sizec)   with
                    sizec a row vector of positive integers, also puts together
                the ppform of a spline from the information supplied, but interprets
                    coefs to be of size sizec (and returns an
                error when prod(size(coefs)) differs from
                    prod(sizec)). This option is important only in the rare case
                that the input argument coefs is an array with one or more
                trailing singleton dimensions. For, MATLAB® suppresses trailing singleton dimensions, hence, without this explicit
                specification of the intended size of coefs,
                    ppmak would interpret coefs
                incorrectly.
Examples
The two splines
p1 = ppmak([1 3 4],[1 2 5 6;3 4 7 8]); p2 = ppmak([1 3 4],[1 2;3 4;5 6;7 8],2);
have exactly the same ppform (2-vector-valued, of order 2). But the second command provides the coefficients in the arrangement used internally.
ppmak([0:2],[1:6]) constructs a piecewise-polynomial function
                with basic interval [0..2] and consisting of
                two pieces of order 3, with the sole interior break 1. The resulting function is
                scalar, i.e., the dimension d of its target is 1. The function
                happens to be continuous at that break since the first piece is
                    x|→x2 +
                    2x + 3, while the second piece is
                    x|→4(x – 1)2 + 5(x–1) + 6.
When the function is univariate and the dimension d is not
                explicitly specified, then it is taken to be the row number of
                    coefs. The column number should be an integer multiple of the
                number l of pieces specified by breaks. For
                example, the statement ppmak([0:2],[1:3;4:6]) leads to an error,
                since the break sequence [0:2] indicates two polynomial pieces,
                hence an even number of columns are expected in the coefficient matrix. The modified
                statement ppmak([0:1],[1:3;4:6]) specifies the parabolic curve
                    x|→(1,4)x2 +
                    (2,5)x + (3,6). In particular, the dimension
                    d of its target is 2. The differently modified statement
                    ppmak([0:2],[1:4;5:8]) also specifies a planar curve (i.e.,
                    d is 2), but this one is piecewise linear;
                its first polynomial piece
                is x|→(1,5)x + (2,6).
Explicit specification of the dimension d leads, in the
                univariate case, to a different interpretation of the entries of
                    coefs. Now the column number indicates the polynomial order
                of the pieces, and the row number should equal d times the number
                of pieces. Thus, the statement ppmak([0:2],[1:4;5:8],2) is in
                error, while the statement ppmak([0:2],[1:4;5:8],1) specifies a
                scalar piecewise cubic whose first piece is
                    x|→x3 +
                    2x2 + 3x +
                4.
If you wanted to make up the constant polynomial, with basic interval [0..1] say, whose value is the matrix eye(2), then you would have to use the full optional third argument, i.e., use the command
pp = ppmak(0:1,eye(2),[2,2,1,1]);
Finally, if you want to construct a 2-vector-valued bivariate polynomial on the rectangle [–1 .. 1] x [0 .. 1], linear in the first variable and constant in the second, say
coefs = zeros(2,2,1); coefs(:,:,1) = [1 0; 0 1];
then the straightforward
   pp = ppmak({[-1 1],[0 1]},coefs);
will fail, producing a scalar-valued function of order 2 in each variable, as will
   pp = ppmak({[-1 1],[0 1]},coefs,size(coefs));
while the following command will succeed:
   pp = ppmak({[-1 1],[0 1]},coefs,[2 2 1]);
See the example “Intro to ppform” for other examples.