[GiNaC-devel] Factoring, again (Factory)

Ralf Stephan ralf at ark.in-berlin.de
Tue Aug 10 18:05:04 CEST 2004


Hello,

my current work on partial fraction decomposition ultimately demands
a working implementation of multivariate factoring and, therefore,
I would like to refresh discussions about factoring in GiNaC, as there
have been some developments since the last thread on it which was years
ago[0].

 "Singular is a Computer Algebra system for polynomial computations with
  emphasize on the special needs of commutative algebra, algebraic
  geometry, and singularity theory. [...]"

That's the blurb about Singular[1], from their Readme and, guess,
they even have multivar. factoring. Even better, the factoring module
(named 'Factory') is independent from the rest, and can so be downloaded
as C++ source[2]. From the Readme:

 "Factory is a C++ class library that implements a recursive representation
  of multivariate polynomial data.  It is being developed by Ruediger Stobbe
  and Jens Schmidt at the University of Kaiserslautern as an independent and
  self-contained part of the computer algebra system Singular (developed by
  G.-M. Greuel, G. Pfister and H. Schoenemann).

  Factory handles sparse multivariate polynomials over different
  coefficient domains, such as Z, Q and GF(q), as well as algebraic
  extensions over Q and GF(q) in an efficient way.  Factory includes
  algorithms for computing univariate and multivariate gcds, resultants,
  chinese remainders, and several algorithms to factorize univariate
  polynomials over the integers and over finite fields.  Factorization of
  multivariate polynomials over the integers is in beta test stage.

  The interface to the polynomial system of Factory is provided by a single
  class `CanonicalForm' which can deal with elements of the coefficient
  domain as well as polynomials.  Using operator overloading, you can handle
  polynomial data similarly to built-in types such as the machine integers.
  [...]"
	
Factory optionally uses NTL for univariate factoring and GCD computation. 
Factory itself is used by another package within Singular that implements 
factoring over algebraic extensions and other algorithms, the name is 
libfac[3] by Michael Messollen. Both use the same recursive CanonicalForm.

It immediately comes to mind that it should now be easy to get multivariate
factoring for ginac. Just use NTL and those parts of Factory that are not
already in ginac. Although there is another possibility (add Factory only)
the Factory source says itself that NTL is faster. However, I see a third
plan: if you already accept including another library then why not libpari?
Univariate factoring in Pari is as fast as NTL, both use van Hoeij, and
Pari has much more for the work, starting with a mature integer factoring
package etc. All three mentioned packages are distributed under GPL.

So, assuming I have summarized the situation correctly, which way?

My other question is a plea: does anyone of you have a good overview over
what is to do algorithmically to get multivariate factoring, given an existing
univariate implementation? I'm not at a university but I'd shell out the EUR 8 
at Subito for a copy of a good introductory or review article. 
So, please send refs/results to me or to the list.


Thanks for your time. Sincerely,
ralf

[0] http://thep.physik.uni-mainz.de/pipermail/ginac-devel/2001-July/000270.html
[1] http://www.singular.uni-kl.de
[2] ftp://www.mathematik.uni-kl.de/pub/Math/Singular/SOURCES/Singular-factory-2-0-5.tar.gz
[3] ftp://www.mathematik.uni-kl.de/pub/Math/Singular/SOURCES/Singular-libfac-2-0-5.tar.gz





More information about the GiNaC-devel mailing list