|
Symbolic computation is usually associated with computer algebra systems
such as
Though these softwares are equipped with high level programming
languages, their interpreters suffer from efficiency, especially when it
comes to dedicated and optimized computations. For this reason, several
special purpose C/C++ libraries have been developed, which have become
increasingly powerful for solving the tasks they were designed for
(
Another approach to tackle the efficiency problem while implementing new
functionalities, adopted by
In the recent years, we observed a new phenomena, with the appearance of
general purpose open source software such as
The main goals of the
to provide a coherent framework for the development and publication of efficient and stand-alone packages;
to provide packages, which implement in a very efficient way the basic operations needed in algebraic and numeric computation;
to provide tools for the connection of these packages to other
interpreters, in particular to the
to provide a high-level programming language, adapted to mathematical computation, an interpreter and a compiler;
to provide high level user interfaces, based on external tools such
as TeXmacs and
These goals are motivated by the will to develop implementations that can be freely reused by the community, the need to build efficient software based on stable and strong algorithmic foundations, the variety of environments in which this implementation can be used, but also the lack of sufficiently general compiled computer algebra languages and the increasing request for using free computer algebra systems in our scientific activities.
To achieve modularity and scalability,
A package is a library in the usual sense. It is devoted to a domain of computation. To fit with the global architecture, its structure should follow a certain template: The header files of a package (say pkg) are found in include/pkg; the source files are found in src, the macros for the configuration step are found in macros, the files for the connection with the interpreter are in glue, the files for the interpreter in mmx, the file used for the construction steps are in build, and so on. The interpreter and compiler of the language are provided by the packages mmxlight and mathemagix, following this structure. They can be built and used independently of most of the other packages.
To manage the collection of packages, we use a tool called automagix.
For each package, it can generate the list of headers files, or source
files needed to construct the different libraries and produce the
corresponding makefiles (build/Makefile.am). It can also
generate the configuration files (configure.ac) taking
into account the dependency with other packages following the
To generate automatically the glue for the interpreter, the tool autoglue (also written in the
Most of the code of the packages is written in C++, the other part
behind mainly written in the
This package contains the basics, that is data structures for symbols, lists, arrays, hash tables, etc. It also provides a system for generic objects. Parsers and pretty printers, together with a system for keeping track of locations in the source code and generating error messages are also available there. Important operators for systematic use throughout the project and the glue facility, both for interpreters and functionality can also be found in this package.
It provides a C++ interface for extended arithmetic over integer,
rational numbers based
This package aims to provide basic routines on univariate polynomials, series and matrices with state-of-the-art asymptotic time complexities.
| Mmx] | bit_precision := 128; z: Series Floating == series (0, 1); |
| Mmx] |
|
This package is dedicated to transseries and optimize computation on dense multivariate polynomials and series.
This package contains tools for effective analytic computation, including analytic continuation and manipulation of effective analytic functions.
Visualization tool for analytic functions. Below, we have displayed the solutions to two numerically unstable differential equations (Chazy and Blasius). Each pixel in the image corresponds to a point in the complex plane and the real and imaginary parts of the function are indicated by intensities of two different colours. In particular, the structure of the singularities of the function becomes apparent.

This package provides basic linear algebra tools on dense
matrices, with approximate coefficients. An interface on
Different representations of multivariate polynomials are available in this package. The sparse representation as an ordered sequence of terms (or monomials) is parametrized by the monomial ordering. The dense representations as tensor products either in the monomial or in the Bernstein basis are also provided by this package.
Subdivision solvers for univariate polynomials using Bernstein or Monomial basis representation. It includes a very efficient univariate solver, which computes the continued fraction expansion of the real roots of a polynomial. Subdivision solvers for multivariate polynomials using Bernstein basis representation, sleeve approximation and preconditioner are also available in this package.
In this package, tools for the manipulation of polytopes are
available (representation by inequalities or by generators) and
connection with multivariate polynomial supports. The polytope
manipulations are based on the library
This package provides data structures to manipulate algebraic curves and surfaces which are given by equations or by a parametrization. It also contains tools to compute, in a certified way, the topology of these algebraic sets or to compute arrangements, (self-) intersection curves of parametrized surfaces, singularities … Here is an example of a 3D curve obtained from the intersection of the real part and imaginary part of associated with a planar curve in the complex plane nearby a singular point.
This package is for the manipulation of symbolic expressions. It provides basic calculus: differentiation, substitution, … on these expressions.
The long term aim of the
It is strongly typed, with support for overloading, implicit conversions, generic objects, compile-time type checking and, possibly, built-in support for expression types which interact with the type system.
High level control structures, like coroutines, generators, exceptions, continuations, etc.
Besides achieving runtime efficiency of
Currently, we provide a rather slow interpreter of only a part of the
full language (the
It can be used within GNU TeXmacs as a primary graphical
interface. This offers a unified and user friendly framework for
editing structured documents with different types of content
(text, graphics, mathematics, etc.), including
interactive content such as
The program is connected to the algebraic-geometric modeler