### 28.1 Evaluating Polynomials ¶

The value of a polynomial represented by the vector c can be evaluated at the point x very easily, as the following example shows:

```N = length (c) - 1;
val = dot (x.^(N:-1:0), c);
```

While the above example shows how easy it is to compute the value of a polynomial, it isn’t the most stable algorithm. With larger polynomials you should use more elegant algorithms, such as Horner’s Method, which is exactly what the Octave function `polyval` does.

In the case where x is a square matrix, the polynomial given by c is still well-defined. As when x is a scalar the obvious implementation is easily expressed in Octave, but also in this case more elegant algorithms perform better. The `polyvalm` function provides such an algorithm.

: `y =` polyval `(p, x)`
: `y =` polyval `(p, x, [], mu)`
: `[y, dy] =` polyval `(p, x, s)`
: `[y, dy] =` polyval `(p, x, s, mu)`

Evaluate the polynomial p at the specified values of x.

If x is a vector or matrix, the polynomial is evaluated for each of the elements of x.

When mu is present, evaluate the polynomial for (x - mu(1)) / mu(2).

In addition to evaluating the polynomial, the second output represents the prediction interval, y +/- dy, which contains at least 50% of the future predictions. To calculate the prediction interval, the structured variable s, originating from `polyfit`, must be supplied.

: `y =` polyvalm `(c, x)`
`polyvalm (c, x)` will evaluate the polynomial in the matrix sense, i.e., matrix multiplication is used instead of element by element multiplication as used in `polyval`.