From: Christian Bauer Date: Wed, 7 Aug 2002 21:47:49 +0000 (+0000) Subject: synced to 1.0 X-Git-Tag: release_1-1-0~79 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?a=commitdiff_plain;h=5395ddfcf70e885d397f5629bc10d2149ca2d992;p=ginac.git synced to 1.0 --- diff --git a/ginac/pseries.cpp b/ginac/pseries.cpp index 8479735c..b32953f4 100644 --- a/ginac/pseries.cpp +++ b/ginac/pseries.cpp @@ -446,14 +446,14 @@ ex pseries::expand(unsigned options) const ->setflag(status_flags::dynallocated | (options == 0 ? status_flags::expanded : 0)); } -/** Implementation of ex::diff() for a power series. It treats the series as a - * polynomial. +/** Implementation of ex::diff() for a power series. * @see ex::diff */ ex pseries::derivative(const symbol & s) const { + epvector new_seq; + epvector::const_iterator it = seq.begin(), itend = seq.end(); + if (s == var) { - epvector new_seq; - epvector::const_iterator it = seq.begin(), itend = seq.end(); // FIXME: coeff might depend on var while (it != itend) { @@ -466,10 +466,22 @@ ex pseries::derivative(const symbol & s) const } ++it; } - return pseries(relational(var,point), new_seq); + } else { - return *this; + + while (it != itend) { + if (is_order_function(it->rest)) { + new_seq.push_back(*it); + } else { + ex c = it->rest.diff(s); + if (!c.is_zero()) + new_seq.push_back(expair(c, it->coeff)); + } + ++it; + } } + + return pseries(relational(var,point), new_seq); } ex pseries::convert_to_poly(bool no_order) const