Computes a recursive series involving products. Can be used to compute cumulative products, to evaluate polynomials using Horner’s rule, and to convert from base b representations of numbers to decimal representations among other things.


y = recsercp(x, z)
  • x (NxK or 1xK matrix) – data

  • z (NxK or 1xK matrix) – data


y (NxK matrix) –

Each column is a series generated by a recursion of the form:

y(1) = x(1) + z(1)
y(t) = y(t - 1) * x(t) + z(t), t=2,...N


// Scalar x
x = 4;

// C
c = { 3, 4, -2, 6, 4, 2 } ;

// Used to normalize first element in c
c1 = c[1, .];

// Compute a recursive series
y = recsercp(x, trimr(c ./ c1, 1, 0));

// Last element in p
// transformed for normalization
n = rows(c) - 1;
p = c1 .* y[n, .];

If x is a scalar and c is an (N+1)x1 vector, the result p will contain the value of the polynomial whose coefficients are given in c. That is:

p = c[1,.].*x^n + c[2,.].*x^(n-1) + ... + c[n+1,.];

Note that both x and c could contain more than 1 column, and then this code would evaluate the entire set of polynomials at the same time. Note also that if x = 2, and if c contains the digits of the binary representation of a number, then p will be the decimal representation of that number.


The following GAUSS code could be used to emulate recsercp() when the number of rows in x and z is the same:

/* assume here that rows(z) is also n */
n = rows(x);
y = zeros(n, 1);
y[1,.] = x[1,.] + z[1,.];

i = 2;
do until i > n;
    y[i, .] = y[i-1, .] .* x[i, .] + z[i, .];
    i = i + 1;

Note that \(K\) series can be computed simultaneously, since x and z can have \(K\) columns (they must both have the same number of columns).

recsercp() allows either x or z to have only 1 row.

recsercp(x, 0) will produce the cumulative products of the elements in x.

See also

Functions recserar(), recserrc(), recserVAR()