% Copyright The Numerical Algorithms Group Limited 1991.
% Certain derivative-work portions Copyright (C) 1988 by Leslie Lamport.
% All rights reserved

% Polynomial page
% @(#)poly.ht   1.1 90/07/12 18:32:24
% added PolynomialNumberFieldFactorizationPage: 90/12/05 J. Grabmeier

\begin{page}{PolynomialPage}{Polynomials}
\beginscroll
\beginmenu
\menulink{Basic Functions}{PolynomialBasicPage} \tab{18}
Create and manipulate polynomials.
\menulink{Substitutions}{PolynomialSubstitutionPage} \tab{18}
Evaluate polynomials.
\menulink{Factorization}{ugProblemFactorPage} \tab{18}
Factor in different contexts.
\menulink{GCDs and Friends}{PolynomialGCDPage} \tab{18}
Greatest common divisors etc..
\menulink{Roots}{PolynomialRootPage}\tab{18}
Work with and solve for roots.
\menulink{Specific Types}{PolynomialTypesPage}\tab{18}
More specific information.
\endmenu
\endscroll
\autobuttons
\end{page}

\begin{page}{PolynomialTypesPage}{The Specific Polynomial Types}
\beginscroll
\beginmenu
\menulink{Polynomial}{PolynomialXmpPage} \newline
The general type.
\menulink{UnivariatePolynomial}{UnivariatePolynomialXmpPage} \newline
One variable polynomials.
\menulink{MultivariatePolynomial}{MultivariatePolynomialXmpPage} \newline
Multiple variable polynomials, recursive structure.
\menulink{DistributedMultivariatePolynomial}{DistributedMultivariatePolynomialXmpPage}
\newline
Multiple variable polynomials, non-recursive structure.
\endmenu
\endscroll
\autobuttons
\end{page}

\begin{page}{PolynomialBasicPage}{Basic Operations On Polynomials}

\beginscroll
You create
polynomials using the usual operations of \spadopFrom{+}{Polynomial},
\spadopFrom{-}{Polynomial}, \spadopFrom{*}{Polynomial}
(for multiplication), and \spadopFrom{**}{Polynomial} (for exponentiation).
Here are two examples: \newline
\spadpaste{p := a*x**2 + b*x*y + c*y**2 \bound{p}} 
\spadpaste{q := 13*x**2 + 3*z \bound{q}} 
These operations can also be used to combine polynomials.
Try the following:
\spadpaste{p + q \free{p q}} 
\spadpaste{p - 3*q \free{p q}} 
\spadpaste{p**2 + p*q \free{p q}} 
\spadpaste{r := (p + q)**2 \bound{r} \free{p q}}
As you can see from the above examples, the variables are ordered
by defaults \spad{z > y > x > c > b > a},
that is, \spad{z} is the main variable, then
\spad{y} and so on in reverse alphabetical order.
You can redefine this
ordering (for display purposes only) with the \spadfun{setVariableOrder}
command.
For example, the following
makes \spad{a} the main variable, then \spad{b}, and so on:
\spadpaste{setVariableOrder [a,b,c,x,y,z] \bound{vord}}
Now compare the way polynomials are displayed:
\spadpaste{p \free{p vord}}
\spadpaste{q \free{q vord}}
\spadpaste{r \free{r vord}}
To return to the system's default ordering,
use \spadfun{resetVariableOrder}.
\spadpaste{resetVariableOrder() \bound{rvord}}
\spadpaste{p \free{p rvord}}
Polynomial coefficients can be pulled out
using the function \spadfun{coefficient}. \newline
For example:
\spadpaste{coefficient(q,x,2) \free{q}} 
will give you the coefficient of \spad{x**2} in the polynomial \spad{q}.
\newline
Try these commands:
\spadpaste{coefficient(r,x,3) \free{r}} 
\spadpaste{c := coefficient(r,z,1) \free{r} \bound{c}} 
\spadpaste{coefficient(c,x,2) \free{c}}
Coefficients of monomials can be obtained as follows:
\spadpaste{coefficient(q**2, [x,z], [2,1]) \free{q}}
This will return the coefficient of x**2 * z in the polynomial q**2.
Also,
\spadpaste{coefficient(r, [x,y], [2,2]) \free{r}}
will return the coefficient of \spad{x**2 * y**2}
in the polynomial \spad{r(x,y)}.
\endscroll
\autobuttons
\end{page}

\begin{page}{PolynomialSubstitutionPage}{Polynomial Evaluation and Substitution}
\beginscroll
The function \spadfun{eval} is used to substitute values into polynomials.
Here's an example of how to use it:
\spadpaste{p := x**2 + y**2 \bound{p}}
\spadpaste{eval(p,x=5) \free{p}}
\newline
This example would give you the value of the polynomial \spad{p} at 5.
You can also substitute into polynomials with
several variables.  First, specify the polynomial, then give
a list of bindings of the form \spad{variable = value}. For example:
\spadpaste{eval(p,[x = a + b,y = c + d]) \free{p}}
Here \spad{x} was replaced by \spad{a + b},
and \spad{y} was replaced by \spad{c + d}.
Here's another example:
\spadpaste{q := x**3 + 5*x - y**4 \bound{q}}
\spadpaste{eval(q,[x=y,y=x]) \free{q}}
Substitution is done ``in parallel.''
That is, \Language{} takes
\spad{q(x,y)} and returns \spad{q(y,x)}.
\newline
You can also substitute numerical values for some or all of the
variables:
\spadpaste{px := eval(p, y = sin(2.0)) \bound{px} \free{p}}
\spadpaste{eval(px, x = cos(2.0)) \free{px}}
\endscroll
\autobuttons
\end{page}

\begin{page}{PolynomialGCDPage}{Greatest Common Divisors, Resultants, and Discriminants}
\beginscroll
You can compute the greatest common divisor of two polynomials using the
function \spadfun{gcd}.
Here's an example:
\spadpaste{p := 3*x**8 + 2*x**7 + 6*x**2 + 7*x + 2 \bound{p}}
\spadpaste{q := 2*x**13 + 9*x**7 + 2*x**6 + 10*x + 5 \bound{q}}
\spadpaste{gcd(p,q) \free{p q}}
You could
also see that \spad{p} and \spad{q} have a factor in common by using the
function \spadfun{resultant}:
\spadpaste{resultant(p,q,x) \free{p q}}
The resultant of two polynomials vanishes precisely when they have a
factor in common.
(In the example above
we specified the variable with
which we wanted to compute the resultant because the
polynomials could have involved variables other than x.)
\endscroll
\autobuttons
\end{page}

\begin{page}{PolynomialRootPage}{Roots of Polynomials}
\beginscroll
\beginmenu
\menulink{Using a Single Root of a Polynomial}{ugxProblemSymRootOnePage}
\newline
Working with a single root of a polynomial.
\menulink{Using All Roots of a Polynomial}{ugxProblemSymRootAllPage}
\newline
Working with all the roots of a polynomial.
\menulink{Solution of a Single Polynomial Equation}{ugxProblemOnePolPage}
\newline
Finding the roots of one polynomial.
\menulink{Solution of Systems of Polynomial Equations}{ugxProblemPolSysPage}
\newline
Finding the roots of a system of polynomials.
\endmenu
\endscroll
\autobuttons
\end{page}
