# 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


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

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

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.