This is an old revision of the document!


Collect


Description

  • Collect[var1, var2] collects together terms involving the same powers of specified vars.
  • Collect[var1, var2, …, transformations] or Collect[var1, var2, ..., [Simplifications: transformations]] additionally applies specified transformations to the expression that forms the coefficient of each term obtained.
  • In the case of tensorial vars, Collect will insert Kronecker deltas or metric tensors in order to “uncontract” indices and factor out tensorial parts.
  • In the case of scalar vars, the behaviour of Collect is similar to other CASs.
  • To prevent expand of symbolic terms when collecting tensors one can use option Collect[[var1, var2, ..., [ExpandSymbolic: true]]

Examples


Collect terms involving x:

println Collect['x'] >> 'a*x + b*x + с*x**2 + d*x**2 + f*e'.t
   > (a + b)*x + (c + d)*x**2 + f*e


Collect powers of x and factor coefficients:

println Collect['x', Factor] >> '(1 + a + x)**4'.t
   > x**4 + 4*x**3*(a+1) + 6*x**2*(a+1)**2 + 4*(a+1)**3*x + (a+1)**4


Collect terms involving tensor A_i:

println Collect['A_i'] >> 'A_m*B_n + A_n*C_m + B_n*C_m'.t
   > A_{a}*(C_{m}*d_{n}^{a} + B_{n}*d_{m}^{a}) + B_{n}*C_{m}


Collect terms involving same tensorial function F_ij[x_ab]:

def t = 'F_ij[t_ab]*t^ij + F_ab[t_pq]*f^ba + F_ij[f_ij]*t^ij + F_ij[f_ij]*f^ji'.t
println Collect['F_ij[a_ij]'] >> t
   > (t^{ij}+f^{ji})*F_{ij}[t_{ab}]+(t^{ij}+f^{ji})*F_{ij}[f_{ij}]


Collect with respect to two variables:

def t = 'A_a * B^b + A^b * B_a + A_a * C^b + A^b * D_a'.t
println Collect['A_m', 'B_m'] >> t
   > A_c*B^d*(d_a^c*d^b_d+g_ad*g^bc)+(C^b*d_a^c+g^bc*D_a)*A_c


By default Collect will expand all expressions:

def t = '(a+b)**2 * A_a * B^b + A^b * B_a'.t
println Collect['B_m'] >> t
   > B_{c}*((b**2+a**2+2*b*a)*A_{a}*g^{bc}+A^{b}*d_{a}^{c})
To prevent this overhead one can use:
println Collect['B_m', [ExpandSymbolic: false]] >> t
   > B_{c}*((a+b)**2*A_{a}*g^{bc}+A^{b}*d_{a}^{c})


See also