---
name: "polynomials"
section: "3tcl"
platform: "linux"
package: "tcllib"
version: "2.0+dfsg-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/polynomials"
---

# polynomials(3tcl)

Polynomial functions

```

```

## NAME

math::polynomials - Polynomial functions

## SYNOPSIS

package require **Tcl ?8.5?**

package require **math::polynomials ?1.0.2?**

**::math::polynomials::polynomial** *coeffs*

**::math::polynomials::polynCmd** *coeffs*

**::math::polynomials::evalPolyn** *polynomial* *x*

**::math::polynomials::addPolyn** *polyn1* *polyn2*

**::math::polynomials::subPolyn** *polyn1* *polyn2*

**::math::polynomials::multPolyn** *polyn1* *polyn2*

**::math::polynomials::divPolyn** *polyn1* *polyn2*

**::math::polynomials::remainderPolyn** *polyn1* *polyn2*

**::math::polynomials::derivPolyn** *polyn*

**::math::polynomials::primitivePolyn** *polyn*

**::math::polynomials::degreePolyn** *polyn*

**::math::polynomials::coeffPolyn** *polyn* *index*

**::math::polynomials::allCoeffsPolyn** *polyn*

```

```

## DESCRIPTION

This package deals with polynomial functions of one variable:

- •

  the basic arithmetic operations are extended to polynomials

- •

  computing the derivatives and primitives of these functions

- •

  evaluation through a general procedure or via specific procedures)

## PROCEDURES

The package defines the following public procedures:

- **::math::polynomials::polynomial** *coeffs*

  Return an (encoded) list that defines the polynomial. A polynomial

  ```
     f(x) = a + b.x + c.x**2 + d.x**3
  ```

-

  can be defined via:

  ```
     set f [::math::polynomials::polynomial [list $a $b $c $d]
  ```

  - list *coeffs*

    Coefficients of the polynomial (in ascending order)

- **::math::polynomials::polynCmd** *coeffs*

  Create a new procedure that evaluates the polynomial. The name of the polynomial is automatically generated. Useful if you need to evualuate the polynomial many times, as the procedure consists of a single \[expr\] command.

  - list *coeffs*

    Coefficients of the polynomial (in ascending order) or the polynomial definition returned by the *polynomial* command.

- **::math::polynomials::evalPolyn** *polynomial* *x*

  Evaluate the polynomial at x.

  - list *polynomial*

    The polynomial's definition (as returned by the polynomial command). order)

  - float *x*

    The coordinate at which to evaluate the polynomial

- **::math::polynomials::addPolyn** *polyn1* *polyn2*

  Return a new polynomial which is the sum of the two others.

  - list *polyn1*

    The first polynomial operand

  - list *polyn2*

    The second polynomial operand

- **::math::polynomials::subPolyn** *polyn1* *polyn2*

  Return a new polynomial which is the difference of the two others.

  - list *polyn1*

    The first polynomial operand

  - list *polyn2*

    The second polynomial operand

- **::math::polynomials::multPolyn** *polyn1* *polyn2*

  Return a new polynomial which is the product of the two others. If one of the arguments is a scalar value, the other polynomial is simply scaled.

  - list *polyn1*

    The first polynomial operand or a scalar

  - list *polyn2*

    The second polynomial operand or a scalar

- **::math::polynomials::divPolyn** *polyn1* *polyn2*

  Divide the first polynomial by the second polynomial and return the result. The remainder is dropped

  - list *polyn1*

    The first polynomial operand

  - list *polyn2*

    The second polynomial operand

- **::math::polynomials::remainderPolyn** *polyn1* *polyn2*

  Divide the first polynomial by the second polynomial and return the remainder.

  - list *polyn1*

    The first polynomial operand

  - list *polyn2*

    The second polynomial operand

- **::math::polynomials::derivPolyn** *polyn*

  Differentiate the polynomial and return the result.

  - list *polyn*

    The polynomial to be differentiated

- **::math::polynomials::primitivePolyn** *polyn*

  Integrate the polynomial and return the result. The integration constant is set to zero.

  - list *polyn*

    The polynomial to be integrated

- **::math::polynomials::degreePolyn** *polyn*

  Return the degree of the polynomial.

  - list *polyn*

    The polynomial to be examined

- **::math::polynomials::coeffPolyn** *polyn* *index*

  Return the coefficient of the term of the index'th degree of the polynomial.

  - list *polyn*

    The polynomial to be examined

  - int *index*

    The degree of the term

- **::math::polynomials::allCoeffsPolyn** *polyn*

  Return the coefficients of the polynomial (in ascending order).

  - list *polyn*

    The polynomial in question

## REMARKS ON THE IMPLEMENTATION

The implementation for evaluating the polynomials at some point uses Horn's rule, which guarantees numerical stability and a minimum of arithmetic operations. To recognise that a polynomial definition is indeed a correct definition, it consists of a list of two elements: the keyword "POLYNOMIAL" and the list of coefficients in descending order. The latter makes it easier to implement Horner's rule.

## BUGS, IDEAS, FEEDBACK

This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category *math :: polynomials* of the *Tcllib Trackers* \[http://core.tcl.tk/tcllib/reportlist\]. Please also report any ideas for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of **diff -u**.

Note further that *attachments* are strongly preferred over inlined patches. Attachments can be made by going to the **Edit** form of the ticket immediately after its creation, and then using the left-most button in the secondary navigation bar.

## KEYWORDS

math, polynomial functions

## CATEGORY

Mathematics

## COPYRIGHT

```
Copyright (c) 2004 Arjen Markus <arjenmarkus@users.sourceforge.net>
```
