Collect
Description
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.
To prevent expand of symbolic terms when collecting tensors one can use option Collect[[var1, var2, ..., [ExpandSymbolic: false]]
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:
1 2 | 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:
3 | println Collect[ 'B_m' , [ExpandSymbolic : false]] > > t
|
> B_{c}*((a+b)**2*A_{a}*g^{bc}+A^{b}*d_{a}^{c})
|
See also