Documentation

# `coeff`

Coefficients of a polynomial

MuPAD® notebooks will be removed in a future release. Use MATLAB® live scripts instead.

MATLAB live scripts support most MuPAD functionality, though there are some differences. For more information, see Convert MuPAD Notebooks to MATLAB Live Scripts.

## Syntax

```coeff(`p`, <All>)
coeff(`p`, <`x`>, `n`, <All>)
coeff(`p`, <`[x, …]`>, `[n, …]`, <All>)
coeff(`f`, <`vars`>, <All>)
coeff(`f`, <`vars`>, <`x`>, `n`, <All>)
coeff(`f`, <`vars`>, <`[x, …]`>, `[n, …]`, <All>)
```

## Description

`coeff(p)` returns a sequence of all nonzero coefficients of the polynomial `p`.

`coeff(p, x, n)` regards `p` as a univariate polynomial in `x` and returns the coefficient of the term `x^n`.

`coeff(p, [x,...], [n,...])` regards `p` as a multivariate polynomial in `x,...` and returns the coefficient of the term `x^n,...`.

If the first argument `f` is not element of a polynomial domain, then `coeff` converts the expression internally to a polynomial of type `DOM_POLY` via `poly``(f)`. If a list of indeterminates is specified, the polynomial `poly``(f, vars)` is considered.

Coefficients of polynomial expressions `f` are returned as arithmetical expressions.

There are various ways to call `coeff` with a polynomial `p` of type `DOM_POLY`:

• `coeff(p)` returns a sequence of all nonzero coefficients of `p`. They are ordered according to the lexicographical term ordering. The order in descending.

The returned coefficients are elements of the coefficient ring of `p`.

• `coeff(p, x, n)` regards `p` as a univariate polynomial in the variable `x` and returns the coefficient of the term `x^n`.

For univariate polynomials, the returned coefficients are elements of the coefficient ring of `p`.

For multivariate polynomials, the coefficients are returned as polynomials of type `DOM_POLY` in the “remaining” variables.

• `coeff(p, n)` is equivalent to ```coeff(p, x, n)```, where `x` is the “main variable” of `p`. This variable is the first element of the list of indeterminates `op(p, 2)`.

• `coeff(p, [x1,x2,...], [n1,n2,...])` regards `p` as a multivariate polynomial in the variables `x1,x2,...` and returns the coefficient of the term `x1^n1*x2^n2...`. Variable and exponent lists must have the same length.

The returned coefficients are either elements of the coefficient ring of `p` or polynomials of type `DOM_POLY` in the “remaining” variables.

• `coeff(p, [n1,n2,...])` is equivalent to `coeff(p, [x1,x2,...], [n1,n2,...])`, where the variables `x1,x2,...` are the “main variables” of `p`, i.e., the leading elements of the list of indeterminates `op(p, 2)`.

• `coeff(p, All)` returns a sequence of coefficients of `p` including those equal to zero. The function returns the result in ascending lexicographical order. For univariate polynomial `p`, the call ```coeff(p, All)``` is equivalent to `coeff(p, i) \$ i = 0 .. degree(p)`.

`coeff` returns 0 or a zero polynomial if the polynomial does not contain a term corresponding to the specified powers. In particular, this happens for a univariate polynomial if `n` is larger than the degree of the polynomial.

`coeff` returns `FAIL` if an expression cannot be regarded as a polynomial.

The result of `coeff` is not fully evaluated. Evaluation can be enforced by the function `eval`. See Example 5.

## Examples

### Example 1

`coeff(f)` returns a sequence of all non-zero coefficients:

`f := 10*x^10 + 5*x^5 + 2*x^2: coeff(f)`
` `

`coeff(f, i)` returns a single coefficient:

`coeff(f, i) \$ i = 0..15`
` `
`delete f:`

### Example 2

We demonstrate how the indeterminates influence the result:

`f := 3*x^3 + x^2*y^2 + 17*x + 23*y + 2`
` `
`coeff(f); coeff(f, [x, y]); coeff(f, [y, x])`
` `
` `
` `
`delete f:`

### Example 3

The coefficients of `f` are selected with respect to the main variable `x` which is the first entry of the list of indeterminates:

`f := 3*x^3 + x^2*y^2 + 2: coeff(f, [x, y], i) \$ i = 0..3`
` `

The coefficients of `f` can be selected with respect to another main variable (in this case, `y`):

`coeff(f, [y, x], i) \$ i = 0..2`
` `

Alternatively:

`coeff(f, y, i) \$ i = 0..2`
` `

The coefficients of `f` can also be selected with respect to a multivariate term:

```coeff(f, [x,y], [3,0]), coeff(f, [x,y], [2,2]), coeff(f, [x,y], [0,0])```
` `
`delete f:`

### Example 4

In the same way, `coeff` can be applied to polynomials of type `DOM_POLY`:

```p := poly(3*x^3 + x, [x], Dom::IntegerMod(7)): coeff(p)```
` `
`coeff(p, i) \$ i = 0..3`
` `

For multivariate polynomials, the coefficients with respect to an indeterminate are polynomials in the other indeterminates:

`p := poly(3*x^3 + x^2*y^2 + 2, [x, y]):`
`coeff(p, y, 0), coeff(p, y, 1), coeff(p, y, 2);`
` `
`coeff(p, x, 0), coeff(p, x, 1), coeff(p, x, 2)`
` `

Note that the indeterminates passed to `coeff` will be used, even if the polynomial provides different indeterminates :

`coeff(p, z, 0), coeff(p, z, 1), coeff(p, z, 2)`
` `
`delete p:`

### Example 5

The result of `coeff` is not fully evaluated:

```p := poly(27*x^2 + a*x, [x]): a := 5: coeff(p, x, 1), eval(coeff(p, x, 1))```
` `
`delete p, a:`

### Example 6

To return all coefficients of a polynomial, use the `All` option:

```p := poly(a*x^3 + b*x^2 + c*x + d, [x, y]): coefficients := coeff(p, All)```
` `

To revert the order of the resulting sequence, use the `revert` function. This function does not operate on sequences. To convert a sequence to a list, call `revert` for this list, and convert the result back to a sequence:

`op(revert([coefficients]))`
` `

The `All` option also works for polynomial expressions:

```p_expr := 2*x^5 + 5*x^2 + 10*x + 3: coeff(p_expr, All)```
` `

You can use the `coeff` function with the `All` option to compute scalar products of polynomials. For example, the following procedure computes a scalar product of two polynomials in an orthonormal basis. The `coeff` function extracts the coefficients of the polynomials and returns two lists of coefficients. The `zip` function multiplies the entries of these lists pairwise and returns a list. The `op` function accesses the entries of that list. Finally, the `_plus` function computes the sum of all products:

```scalarProduct := proc(p, q) local lp, lq; begin lp := [coeff(p, All)]; lq := [coeff(conjugate(q), All)]; _plus(op(zip(lp, lq, _mult))); end_proc:```

The following polynomials are orthogonal:

`scalarProduct(poly(x^2 + 2), poly(x^3 + 2*x^2 - 1))`
` `

### Example 7

`coeff(p, All)` also works for multivariate polynomials and polynomial expressions:

```p := poly(2*x^2*y + PI*x + y^2 - 2, [x, y]): coeff(p, All)```
` `

For a multivariate polynomial or polynomial expression, the order in which `coeff` returns the coefficients is such that the coefficient of the exponent vector [e1, e2, …] appears at position e1d1 + e2d2 + … + 1. For example, represent the coefficients returned for bivariate polynomial as a matrix:

`A := matrix(degree(p, x) + 1, degree(p, y) + 1, [coeff(p, All)])`
` `

## Parameters

 `p` A polynomial of type `DOM_POLY` `x` An indeterminate `n` A power: a nonnegative integer `f` `vars` A list of indeterminates of the polynomial: typically, identifiers or indexed identifiers

## Options

 `All` The `coeff` function with this option returns all the coefficients of a polynomial or a polynomial expression including those equal to zero. The function returns the result in ascending lexicographical order. See Example 6 and Example 7.

## Return Values

One or more coefficients of the coefficient ring of the polynomial, or a polynomial, or `FAIL`.

` f`, `p`