Functions for symbolic operations on polynomials by Wayne H. Scott.

As described below, the functions assume the polynomial as an array of coefficients.

You can convert this into a polynomial expression by using peval (PEVAL).

For example,

[1 2 3] 'x' PEVAL will yield 'x^2+2*x+3'

See http://www.hpcalc.org/details.php?id=1393 for distribution information.

From POLY.DOC contained in the distribution:

TRIM Strip leading zeros from polynomial object.

IRT Invert root program. Given n roots it return a nth degree polynomial.

PDER Derivative of a polynomial.

RDER Derivative of a rational function.

PF Partial Fractions. (Handles multiple roots!)

FCTP Factor polynomial

RT Find roots of any polynomial

L2A Convert a list to an array and back.

PADD Add two polynomials

PMUL Multiply two polynomials.

PDIV Divide two polynomials.

EVPLY Evaluate a polynomial at a point.

COEF Given an equation return a polynomial list.

These programs all work on polynomials in the following form: 3*X^3-7*X^2+5 is entered as { 3 -7 0 5 }

FCTP (FaCTor Polynomial)

When it is passed the cooeficients of a polynomial in a list it returns the

factor of that polynomial. Example:

1: { 1 -17.8 99.41 -261.218 352.611 -134.106 }

FCTP

3: { 1 -4.2 2.1 }

2: { 1 -3.3 6.2 }

1: { 1 -10.3 }

This tells us that X^5-17.8*X^4+99.41*X^3-261.218*X^2+352.611*X-134.106

factors to (X^2-4.2*X+2.1)*(X^2-3.3*X+6.2)*(X-10.3)

RT (RooTs)

If given a polynomial it return its roots. Example:

1: { 1 -17.8 99.41 -261.218 352.611 -134.106 }

RT

5: 3.61986841536

4: .58013158464

3: (1.65, 1.8648056199)

2: (1.65, -1.8648056199)

1: 10.3

RT will work with complex cooeffients in the polynomial.

These programs use the BAIRS program which performs Bairstow's method of

quadratic factors and QUD which does the quadratic equation.

TRIM used to strip the leading zeros from a polynomial list.

Example: { 0 0 3 0 7 } TRIM => { 3 0 7 }

RDER will give the DERivative of a Rational function. Example:

d x + 4 -X^2 - 8*x + 31

-- ------------- = --------------------------------

dx x^2 - 7*x + 3 x^4 - 14*x^3 + 55*x^2 - 42*x + 9

2: { 1 4 }

1: { 1 -7 3 }

RDER

2: { -1 -8 31 }

1: { 1 -14 55 -42 9 }

IRT (Inverse RT) will return a polynomial whose roots you specify.

Example: If a transfer function has zeros at -1, 1 and 5 the function is

x^3 - 5*x^2 - x + 5

1: { -1 1 5 }

IRT

1: { 1 -5 -1 5 }

PDER will return the DERivative of a Polynomial. Example:

The d/dx (x^3 - 5*x^2 - x + 5) = 3*x^2 - 10*x - 1

1: { 1 -5 -1 5 }

PDER

1: { 3 -10 -1 }

PF will do a Partial Fraction expansion on a transfer function.

Example:

s + 5 1/18 5/270 2/3 1/9 2/27

----------------- = ----- + ----- - ------- - ------- - -----

(s-4)(s+2)(s-1)^3 (s-4) (s+2) (s-1)^3 (s-1)^2 (s-1)

2: { 1 5 }

1: { 4 -2 1 1 1 }

PF

1: { 5.5555e-2 1.85185e-2 -.6666 -.11111 -.074074 }

This program expects the polynomial of the numerator to be on level 2 and

a list with the poles to be on level 1. Repeated poles are supported but

they must be listed in order. The output is a list of the values of the

fraction in the same order as the poles were entered.

PADD, PMUL, PDIV are all obvious, they take two polynomial lists off

the stack and perform the operation on them.

PDIV returns the quotient polynomial and the remainder polynomial.

L2A converts a list to an array. (and back) [No-op in MorphEngine as lists and arrays are identical]

1: { 1 2 3 }

L2A

1: [ 1 2 3 ]

L2A

1: { 1 2 3 }

EVPLY evaluates any polynomial at a point. [PEVAL has the same ability and more]

x^3 - 3*x^2 +10*x - 5 | x=2.5 = 16.875

2: { 1 -3 10 -5 }

1: 2.5

EVPLY

1: 16.875