Erable
to perform
this tasks.
Let's begin by recalling some mathematicals facts:
This means that you can not root a multivariate polynomial of order
(for such polynomials, systems like Maple, Reduce, Axiom
Mathematica or Mupad use algebraic extension), and that you can only root
numerically a univariate
polynomial of order
5. Note that the generic solution
of a polynomial of order 3 is still complicated and of order 4 very
complicated. I think that it is not possible to handle the generic
solution of polynomials of order 3 or 4 on the HP48 in a reasonable
amount of time.
Hence, only polynomial of order 2 are generically solved by Erable
.
However, in some situations, you can root exactly
polynomials of order
3,
by searching multiple roots and by finding obvious roots (or obvious factor).
The rooting algorithm of Erable
search first multiple roots by computing
the gcd of the polynomial and his first derivative (this is
the SQFFext
algorithm in the source of Erable
). Of course
flag 12 must be set for this step to be done.
If a univariate
polynomial has only integer (or rational) coefficients, you can find all
rational solutions of this polynomial by testing a finite set of rationals
(of the form numerator/denominator where numerator is a divisor of
the constant coefficient and denominator a divisor of the leading
coefficient). This is implemented in Erable
by the nullnamed
XLIB EVIDENText
which is called if flag 14 is set.
Hence, Erable
detects all 1st order factors of a symbolic.
If exact solving fails, Erable
calls the numeric solver for
univariate polynomials (which is the HP48GX PROOT
function
in ERABLEG.LIB
or the Bairstow or Laguerre algorithm in
erable.lib
) and tries to find second order polynomial with integer
coefficients by coupling 2 approximate solutions (this was an idea of
Mika Heiskanen implemented in POLYLIB
).
Hence Erable
should find all rational and quadratic irrationals roots
of a univariate polynomial (unless the polynomial is badly conditionned).
For multivariate polynomials, the two first steps are achieved
(EVIDENText
and SQFFext
). Erable
should find
all rational multivariate roots of a polynomial (1st order factors).
Unfortunately, Erable
does not implement the exhaustive search of
all 2nd order (or greater) multivariate rational factors. This can be
performed using the FCTR
function of the ALG48
library.
Abstract of the Sysrpl XLIB
s (include erextdec.h
and
erhash.h
in your source code to use them) to factorize:
EVIDENText
: finds rational roots
SQFFext
: finds square-free factorization of a polynomial
SOLVext
: roots a univariate polynomial numerically and tries to
rebuild quadratic irrationals roots
Abstract of the user commands to factorize:
COLC
:
SQFFext
, then EVIDENText
, does not call SOLVext
,
SQFFext
FROOTS
: calls SQFFext
then EVIDENText
then
SOLVext
,
FACTO
: calls SQFFext
then EVIDENText
, does not
call SOLVext
SQFFext
and
EVIDENText
.