Poly8 Documentation
-------------------

WScott routines - poly8.lib by Wayne H Scott

Here is a version of my polynomial routines that will work on a HP48
My thanks to Craig Cantello who made the necessary changes to the programs.

This package include the following programs.

ZTRIM   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!)
ZPF	Works as PF but works with 2 order polynome instead of complex 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   Evalulate a polynomial at a point.
COEF    Given an equation return a polynomial list.
L->RT	return the roots as a list but it looks more powerfull...
L->	works as PF but also go the inverse Laplace
	eg 2:{1}
	   1:{(0,1) (0,1)}
	should return sin(x)  ... or cos(x)

These programs all work on polynomials in the follows form:

3*X^3-7*X^2+5 is entered as  { 3 -7 0 5 }

so going down the list...

The first program is FCTP. (factor polynomial)
When it is passed the cooeficients of a polynomial in a list it returns the
factor of that polynomal.  ex:
 
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)
 
The next program is RT. (Roots)
If given a polynmoial it return its roots.  ex:

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

Very Useful!

These programs use the BAIRS program which performs Bairstow's method of
quadratic factors and QUD with does the quadratic equation.

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

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

RDER  will give the derivative of a rational function.

ie. 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 }

I don't know about you but I think it's useful.

IRT will return a polynomial whose roots you specify.

ie.  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 derivtive of a polynomial.

.ie   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.

.ie       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 suported 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, and PDIV are all obvious, they take two polynomial lists off
the stack and perform the operation on them.

PDIV returns the polynomial and the remainder polynomial.

L2A converts a list to and array. (and back)

1: { 1 2 3 }
L2A
1: [ 1 2 3 ]
L2A
1: { 1 2 3 }

EVPLY evalutates and polynomial at a point.

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
