From eaaf0b45634f43e67de7dcfe2a2245c7a9300bb1 Mon Sep 17 00:00:00 2001 From: Jens Vollinga Date: Mon, 16 Feb 2004 22:41:49 +0000 Subject: [PATCH] New series expansion scheme --- ginac/pseries.cpp | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/ginac/pseries.cpp b/ginac/pseries.cpp index dd4f51ab..8330d4db 100644 --- a/ginac/pseries.cpp +++ b/ginac/pseries.cpp @@ -520,7 +520,7 @@ ex basic::series(const relational & r, int order, unsigned options) const seq.push_back(expair(coeff, _ex0)); int n; - for (n=1; n loop until next coefficient is found + for (;; ++n) { + deriv = deriv.diff(s).expand(); + if (deriv.is_zero()) { + break; + } + if (!deriv.subs(r, subs_options::no_pattern).is_zero()) { + seq.push_back(expair(Order(_ex1), n)); + break; + } + } + } + return pseries(r, seq); } @@ -774,7 +799,7 @@ ex mul::series(const relational & r, int order, unsigned options) const acc = ex_to(acc.mul_series(ex_to(op))); } - if (negldegree && (seq.size() > 1)) { + if (seq.size() > 1) { // re-calculation of series @@ -857,7 +882,7 @@ ex pseries::power_const(const numeric &p, int deg) const co.reserve(deg); co.push_back(power(coeff(var, ldeg), p)); bool all_sums_zero = true; - for (int i=1; i