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. Collect
will insert Kronecker deltas or metric tensors in order to “uncontract” indices and factor out tensorial parts.Collect
is similar to other CASs. Collect[[var1, var2, ..., [ExpandSymbolic: false]]
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})