# factorize symbolic expression

(ax+bx).factor()=x(a+b) but (2a+2b).factor()=(2a+2b) how to obtain 2(a+b) ?

edit retag close merge delete

1

There exists the collect_common_factors method that should do the trick, I think. But it seems a bit buggy. This works as expected:

sage: a, b = var("a, b")
sage: (2*pi*a + 2*pi*b).collect_common_factors()
2*pi*(a + b)
sage: (2*a^2 + 2*a*b).collect_common_factors()
2*(a + b)*a


However, this fails:

sage: (2*a + 2*b).collect_common_factors()
2*a + 2*b
sage: (SR(2)*a + SR(2)*b).collect_common_factors()
2*a + 2*b

( 2019-12-16 01:16:07 +0100 )edit

Looks like a bug to me, since (2*a*x + 2*b*x).factor() returns 2*(a + b)*x.

( 2019-12-18 18:44:28 +0100 )edit

Sort by ยป oldest newest most voted

You can work with elements of a polynomial ring instead of with symbolic expressions:

sage: R.<a,b,c> = ZZ[] # polynomials with integer coefficients, variables a, b, c
sage: (a*2+b*2).factor()
2 * (a + b)
sage: (a*c+b*c).factor()
c * (a + b)

more

Thanks for the replay. A little bit heavy for a simple factorization of an expression... Any particular reason for this restriction of the format method? Big thanks anyway

( 2019-12-18 10:33:25 +0100 )edit

The notion of factorization is algebraic and depends on the ring in which you are working. For example x^2+1 factors over the complex numbers but not the reals, and x^2-2 factors over the reals but not the rationals. So when you're dealing with factorization, it's a good idea to precisely specify the ring.

( 2019-12-18 18:43:43 +0100 )edit

ok I undersatnd....

( 2019-12-19 09:42:52 +0100 )edit