Pulling out common factors Was: "Some usage questions



James Frye asks about simplifying things like
>               2 A + 2 %I B
>               ------------
>                   2

The attached code will pull out common factors in things like the above.
It is in a way a very simple case of factorization, except that unlike
factorization, it never makes radical changes to the form of the
expression (e.g. expanding out (a+b)^100+1).  Usually, you'll want to
use it as scanmap(pullout,...), so I've included convenience functions
scan_pullout etc.

There are three variants: pullout pulls out any common factor;
pullout_num only numeric factors (not including radicals); pullout_const
pulls out any constant factors (including arbitrary expressions
involving only numbers and symbolic constants like %pi).  There is also
pullout_using_content, which I don't generally recommend.

I am including a table of example results for the three functions as an
attachment.

Though pullout seems like the "most powerful", it is not necessarily
what you want.  For example:

    pullout(x*(a^7-1)+(y+1)^5*(a-1)) =

                                   7
                             5   (a  - 1) x
             (a - 1) ((y + 1)  + ----------)
                                   a - 1

Notice that the division hasn't been carried out.  Though that is
probably a *good* thing in this case, it does look peculiar.  On the
other hand, pullout_using_content *does* divide out, so you have:

    pullout_using_content(x*(z^7-1)+(y+1)^5*(z-1)) =

    7     5      4       3       2                 5      4
 x z  + (y  + 5 y  + 10 y  + 10 y  + 5 y + 1) z - y  - 5 y

                                        3       2
                                  - 10 y  - 10 y  - 5 y - x - 1

Is that better?  Just to confuse matters, since content is a CRE
function, the result depends on the variable ordering:

    pullout_using_content(x*(a^7-1)+(y+1)^5*(a-1)) =

           5      4       3       2
 (a - 1) (y  + 5 y  + 10 y  + 10 y  + 5 y

                          6    5    4    3    2
                      + (a  + a  + a  + a  + a  + a + 1) x + 1)

Good luck!

      -s

Attached file: pullout.txt
Attached file: pullout.mac