Hi, here is a very odd performance behaviour of ginac/series: The operation ex e = 1/(a+sqrt(b*b+x*x)); e = e.series(x==1, 21); is more than a factor of 10^4(!) faster then outputting the result using cout << e << endl; I have measured these times using clocks(). You find the source of the program at the end of this email. What does this mean? This means, that series is very efficient (both time- and space-wise), because it reuses intermediate results heavily. On the other hand the result is nearly useless, because it is actually _very_ complicated, which shows up in any subsequent usage. In this specific example, a hand-written taylor-series using derivatives was 2 orders of magnitude slower (for 60th order) to compute the series, but the series (20th order) still was printed 1000 times faster than the standard series. In the light of this finding, something needs to be done. I suggest to essentially revert the logic of series, namely to compute series by differentiation and to fall back to an explicit composition if it does not work. Mathematica does it that way according to its documentation. At least ginac should provide this mode as an option, either by an additional taylor() method for ex or by means of series_options. Do You agree with this analysis and my conclusions? Are there any other ways to solve this problem? Regards Frieder Kalisch #include <ginac/ginac.h> #include <iostream> #include <ctime> using namespace GiNaC; using namespace std; int main(int argc, char **argv) { time_t t0, t1, t2; t0 = clock(); symbol x("x"), a("a"), b("b"); ex e = 1/(a+sqrt(b*b+x*x)); e = e.series(x==1, 21); t1 = clock(); cout << e << endl; t2 = clock(); double res = CLOCKS_PER_SEC; cerr << (t1-t0)/res << endl << (t2-t1)/res << endl; return 0; } // int main(int argc, char **argv) -- Frieder Kalisch Institut für theoretische Physik kalisch@tphys.uni-heidelberg.de Philosophenweg 19 +49-6221-549-433 D-69120 Heidelberg