# [Maxima] rearranging and collecting terms

Valery Pipin pip at iszf.irk.ru
Mon Aug 10 00:02:19 CDT 2009

```В сообщении от Воскресенье 09 августа 2009 13:23:27 автор Mario Maio написал:
> > understanding why the question is non trivial, without confusing you too
> > much.
> >
> > Eric Reyssat
>
> Thank you Eric for helping me in focusing the issue, you were very clear
> indeed. Trying to express my needs more precisely i would say that, given
> an expression, - i don't want to factor or expand or reduce it;
> - i want to simplify it by collecting terms, if possible;
>
> So i would "just" need a somewhat increased functionality of "collectterms"
> function. In my humble opinion "collectterms", when called without
> variables, should: - parse the given expression for sums, starting from the
> most internal layer and going up; - for each sum found, check if there are
> one or more common terms, as in the following examples (taken from yours);
>
> (%i4) collectterms((3*a*b1-3*a*b2)*x,a);
> (%o4) (3*a*b1-3*a*b2)*x
> (%i4) collecttermsNEW((3*a*b1-3*a*b2)*x,a);
> (%o4) 3*a*(b1-b2)*x
>
> (%i10) collectterms(3*u^3-3*v^3);
> (%o10) 3*u^3-3*v^3
> (%i10) collecttermsNEW(3*u^3-3*v^3);
> (%o10) 3*(u^3-v^3)
>
> (%i11) collectterms((x+2)*(x^2+x+1));
> (%o11) (x+2)*(x^2+x+1)
> (%i11) collecttermsNEW((x+2)*(x^2+x+1));
> same output, in this case the x in the second factor is not collected
> because collecttermsNEW should look for "collectables" among ALL terms of
> the sum
>
> (%i15) collectterms(3*(u-v)*u+3*(u-v)*v);
> (%o15) 3*(u-v)*v+3*u*(u-v)
> (%i15) collecttermsNEW(3*(u-v)*u+3*(u-v)*v);
> (%o15) 3*(u-v)*(v+u)                                         (terms  3  and
>  u-v  collected)
>
> (%i17) collectterms((2+1)*(u^2-v^2));
> (%o17) 3*(u^2-v^2)
> (%i17) collecttermsNEW((2+1)*(u^2-v^2));
> (%o17) (2+1)*(u^2-v^2)
> (collecttermsNEW should do only what it says, collect)
>
> (%i18) collectterms((1-x)+x*(1-x));
> (%o18) (1-x)*x-x+1
> (%i18) collecttermsNEW((1-x)+x*(1-x));
> (%o18) (1-x)*(1+x)                                             (term  1-x
> collected)
>
> (%i20) collectterms((3*cos(d1)^3-3*cos(d2)^3)*x);
> (%o20) (3*cos(d1)^3-3*cos(d2)^3)*x
> (%i20) collecttermsNEW((3*cos(d1)^3-3*cos(d2)^3)*x);
> (%o20) 3*(cos(d1)^3-cos(d2)^3)*x
>
> Thanks again for your attention.
>
> Mario
>
> P.S. where can i find information about function "collecttermsl", which, as
> you already noticed, is not documented ?
It is in share/simplification/facexp.mac. There you can find a demo as well.
Just type demo(facexp);
```