This file records noteworthy changes.
0.8.1 ()
* degree(), ldegree(), coeff(), lcoeff(), tcoeff() and collect() can now
be used with constants and indexed expressions as well, so you can use
it to collect by powers of Pi or find the coefficient of gamma~0.
Limitations:
- it only works with symbols, constants and indexed expressions;
trying to find the coefficient of, e.g., "x^2" or "x+y" won't work
- it does not know about dummy index summations; the coefficient of
gamma~0 in p.mu*gamma~mu should be p.0 but is returned as 0
- using the functions on elements of noncommutative products might
return wrong or surprising results
* Added preliminary (re)implementations of color and clifford classes.
* simplify_indexed(): contraction of symmetric and antisymmetric tensors
is zero.
* Some bugfixes (indexed objects, archive writing).
0.8.0 (24 March 2001)
* Complete revamp of indexed objects. Instead of multiple classes for
indexed things and their indices there is now only one "indexed" class
and two types of indices: "idx" for simple indices and "varidx" for
indices with variance. There are predefined delta, epsilon and metric
tensors, and a function simplify_indexed() that performs canonicalization
and dummy index summations. Matrix objects can be indexed for doing simple
linear algebra.
* Added an option "expand_indexed" to expand() to perform expansion of
indexed objects like (a+b).i -> a.i + b.i
* Renamed get_indices() to get_free_indices(), which no longer returns
dummy indices and checks the consistency of indices in sums.
* sqrfree() factorization fixed and improved syntactically.
* subs() works on matrices.
* Matrices can be constructed from flat list of elements; diagonal matrices
can be constructed from list of diagonal elements with diag_matrix().
* Fixed memory leak in expand().
* Operator% for objects of class ncmul has gone. Use operator* now for that
case too, which is much more natural.
0.7.3 (28 February 2001)
* Several bugfixes and minor performance tunings.
* Added a section to the tutorial about adding new algebraic classes to GiNaC.
* Closed many in-source documentation gaps.
0.7.2 (17 February 2001)
* Several bugfixes in power series expansion, one of them critical.
0.7.1 (7 February 2001)
* Fix problems with Cint that were caused by CLN's overloaded operator new.
* Fix compilation errors with GCC3.
* normal() handles large sums of fractions better and normalizes the exponent
of power expressions.
* expand() always expands the exponent and transforms x^(a+b) -> x^a*x^b.
* Some bugfixes of series expansion around branch cuts of special functions.
0.7.0 (15 December 2000)
* Requires CLN 1.1 now. Class numeric doesn't use an indirect pointer to the
actual representation any more. This is a speedup.
* mul::expand() was reengineered to not allocate excess temporary memory.
* Non-integer powers of a symbol are treated as constants by (l)degree() and
coeff(). Using these functions on an expression containing such powers used
to fail with an internal error message. The side-effect is that collect()
can be used on expressions which are not polynomials.
* Added a man page for the ginac-config script.
* Ctor of numeric from char* honors Digits.
0.6.4 (10 August 2000)
* Complete revamp of methods in class matrix. Some redundant (and poor)
implementations of elimination schemes were thrown out. The code is now
highly orthogonal, more flexible and much more efficient.
* Some long standing and quite nasty bugs were discovered and fixed in the
following functions: add::normal(), heur_gcd(), sr_gcd() and Order_eval().
0.6.3 (25 July 2000)
* Derivatives are now assembled in a slightly different manner (i.e. they
might 'look' different on first sight). Under certain circumstances this
can result in a dramatic speedup because it gives hashing a better chance,
especially when computing higher derivatives.
* Some series expansions of built-in functions have been reengineered.
* The algorithm for computing determinants can be chosen by the user. See
ginac/flags.h and ginac/matrix.h.
* The Dilogarithm (Li2) now has floating point evaluation, derivative and a
proper series expansion.
* Namespace 'std' cleanly disentangled, as demanded by ISO/EIC 14882-1998(E).
* Some minor bugfixes, one major lsolve()-bugfix and documentation updates.
0.6.2 (21 June 2000)
* ginaccint.bin is now launched by a binary program instead of by a scripts.
This allows us to write #!-scripts. A small test suite for GiNaC-cint was
added.
* Several minor bugfixes.
0.6.1 (18 May 2000)
* Cleanup in the interface to Cint. The required version is now Cint 5.14.38.
* Several bugfixes in target install.
0.6.0 (11 May 2000)
* IMPORTANT: Several interface changes make programs written with GiNaC
much clearer but break compatibility with older versions:
- f(x).series(x,p[,o]) -> f(x).series(x==p,o)
- series(f(x),x,p[,o]) -> series(f(x),x==p,o)
- gamma() -> tgamma() (The true Gamma function, there is now also
log(tgamma()), called lgamma(), in accord with ISO/IEC 9899:1999.)
- EulerGamma -> Euler
* #include'ing ginac.h defines the preprocessor symbols GINACLIB_MAJOR_VERSION,
GINACLIB_MINOR_VERSION, and GINACLIB_MICRO_VERSION with the respective GiNaC
library version numbers.
* Expressions can be constructed from strings like this:
ex e("2*x+y", lst(x, y));
* ex::to_rational() provides a way to extend the domain of functions like
gcd() and divide() that only work on polynomials or rational functions (the
good old ex::subs() method reverses this process)
* Calling diff() on a function that has no derivative defined returns the
inert derivative function "Derivative".
* Several new timings in the check target. Some of them may be rather rude
at your machine, feel free to interrupt them.
0.5.4 (15 March 2000)
* Some algorithms in class matrix (notably determinant) were replaced by
less brain-dead ones and should now have much better performance.
* Checks were completely reorganized and split up into three parts:
a) exams (small regression tests with predefined input)
b) checks (lenghty coherence checks with random input)
c) timings (for coherence and crude benchmarking)
* Behaviour of .evalf() was changed: it doesn't .evalf() any exponents.
* Expanded expressions now remember they are expanded to prevent
superfluous expansions.
* Small bugfixes and improvements in the series expansion.
0.5.3 (23 February 2000)
* A more flexible scheme for registering functions was implemented,
allowing for remembering, too.
* Some Bugfixes.
0.5.2 (16 February 2000)
* Mainly fixes a bug in the packaging of release 0.5.1.
0.5.1 (14 February 2000)
* Fixes a small number of bugs.
0.5.0 (7 February 2000)
* Expressions can be written ("archived") to files and read therefrom.
* Addition of GiNaC-cint, which lets you write complete programs in
an interactive shell-like manner in your favoured programming
language (i.e. C++).
0.4.1 (13 December 1999)
* Series Expansion of Gamma function and some other trigonometric
functions at their poles works now.
* Many more evaluations of special functions at points where
exact results exist.
* info_flags::rational doesn't return true for complex extensions
any more---use info_flags::crational for the old behaviour.
info_flags::integer and -::cinteger work similarly, the same
holds for types like info_flags::rational_polynomial.
0.4.0 (26 November 1999)
* First public release.