From: Christian Bauer Date: Wed, 7 Aug 2002 21:47:18 +0000 (+0000) Subject: implemented the case in pseries::derivative() where s!=var X-Git-Tag: release_1-0-11~9 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=commitdiff_plain;h=578d8d5233b2f9054ce0dfd3248c6c140079ec6b implemented the case in pseries::derivative() where s!=var --- diff --git a/ginac/pseries.cpp b/ginac/pseries.cpp index 9a9045da..7f77cc66 100644 --- a/ginac/pseries.cpp +++ b/ginac/pseries.cpp @@ -445,14 +445,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) { @@ -465,10 +465,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