## `polylib::decompose` -- functional decomposition of a polynomial

#### Introduction

`polylib::decompose``(p,x)` returns a sequence of polynomials q1, ..., qn such that p(x) = q1(...qn(x) ...).

#### Call(s)

`polylib::decompose(p)`
`polylib::decompose(p, x)`

#### Parameters

`p` | - | polynomial or polynomial expression
`x` | - | one of the indeterminates of the polynomial `p`

#### Returns

If a decomposition is possible, `polylib::decompose` returns it as an expression sequence, each element being of the same type as the input. If no decomposition is possible, the input is returned.

### Overloadable:

`p`

#### Related Functions

`factor`

#### Details

- The second argument may be left out if the polynomial is univariate, as in Example 1.
- If a polynomial has several decompositions, it is not specified which of them is returned.

#### Example 1

In the simplest case, an univariate polynomial is decomposed with respect to its only variable:

    >> polylib::decompose(x^4+x^2+1)

                                       2       2
                                  x + x  + 1, x

#### Example 2

If there are several variables, a main variable must be specified:

    >> polylib::decompose(y*x^4+y,y);

                                          4
                                     y + x  y

#### Background

- A description of the algorithm behind `polylib::decompose` can be found in Barton and Zippel, Polynomial decomposition algorithms, Journal of Symbolic Computation, 1 (1985), pp. 159-168.

#### Changes

- used to be called `decompose`

Do you have questions or comments?
Copyright © SciFace Software GmbH & Co. KG 2000