degree(), ldegree(), coeff(), tcoeff(), lcoeff() and collect() work with
authorChristian Bauer <Christian.Bauer@uni-mainz.de>
Thu, 5 Apr 2001 00:37:46 +0000 (00:37 +0000)
committerChristian Bauer <Christian.Bauer@uni-mainz.de>
Thu, 5 Apr 2001 00:37:46 +0000 (00:37 +0000)
functions (you can collect by powers of sin(x) etc.)

ginac/function.pl

index ae9c832f358b9189679c3284974f876a893e9dbd..b36df872337b225da8534ed867741009e6d92347 100755 (executable)
@@ -337,6 +337,9 @@ public:
        void print(std::ostream & os, unsigned upper_precedence=0) const;
        void printtree(std::ostream & os, unsigned indent) const;
        void printcsrc(std::ostream & os, unsigned type, unsigned upper_precedence=0) const;
+       int degree(const ex & s) const;
+       int ldegree(const ex & s) const;
+       ex coeff(const ex & s, int n = 1) const;
        ex expand(unsigned options=0) const;
        ex eval(int level=0) const;
        ex evalf(int level=0) const;
@@ -708,6 +711,24 @@ ex function::expand(unsigned options) const
        return this->setflag(status_flags::expanded);
 }
 
+int function::degree(const ex & s) const
+{
+       return is_equal(*s.bp) ? 1 : 0;
+}
+
+int function::ldegree(const ex & s) const
+{
+       return is_equal(*s.bp) ? 1 : 0;
+}
+
+ex function::coeff(const ex & s, int n) const
+{
+       if (is_equal(*s.bp))
+               return n==1 ? _ex1() : _ex0();
+       else
+               return n==0 ? ex(*this) : _ex0();
+}
+
 ex function::eval(int level) const
 {
        GINAC_ASSERT(serial<registered_functions().size());