\begingroup

如何收集函数内部的术语(例如)Collect[f[a x + b y + c x], x] 或索引中的术语(例如)Collect[Subscript[f, a x + b y + c x], x]

\endgroup

1

  • \begingroup
    如果表达式中要执行多个这样的集合,则expr /. p_ /; PolynomialQ[p, x] :> Collect[p, x]
    \endgroup


    – 


最佳答案
4

\begingroup

您可以使用

Collect[#, x] & /@ f[a x + b y + c x]
(* f[(a + c) x + b y] *)

Collect[#, x] & /@ Subscript[f, a x + b y + c x]
(* Subscript[f, (a + c) x + b y] *)

如果你的表达式有更多级别,你应该映射到所有级别:

Map[Collect[#, x] &, f[a x + b y + c x, g[d x + e x, f x + g x]], All]
(* f[(a + c) x + b y, g[(d + e) x, (f + g) x]] *)

\endgroup

\begingroup

仅供说明之用,您可以随时使用/.这样的模式

expr = f[a  x + b  y + c  x]
expr /. f[any_] :> f[Collect[any, x]]

expr = Subscript[f, a  x + b  y + c  x]
expr /. Subscript[f, any_] :> Subscript[f, Collect[any, x]]

可能还有其他 8 种方法可以做到这一点 Mathematica 😉

\endgroup

\begingroup

使用ReplaceRepeated

f[a  x + b  y + c  x] //. a_.  x + b_.  x :> (a + b)  x

f[(a + c) x + b y]

f[a  x + b  y + c  x, g[d  x + e  x, f  x + g  x]] //. a_.  x + b_.  x :> (a + b)  x

f[(a + c) x + b y, g[(d + e) x, (f + g) x]]

Subscript[f, a  x + b  y + c  x + d  x] //. a_.  x + b_.  x :> (a + b)  x

Subscript[f, (a + c + d) x + b y]

或者使用ReplaceAllPolynomialQ

f[a  x + b  y + c  x, g[d  x + e  x, f  x + g  x]] /. 
p_ /; PolynomialQ[p, x] :> Collect[p, x]

f[(a + c) x + b y, g[(d + e) x, (f + g) x]]

\endgroup

\begingroup

f[a x + b y + c x] // Query[{1 -> (Collect[#, x] &)}]

(* f[(a + c) x + b y] *)

Query[{1 -> (Collect[#, x] &)}] // Normal

(* MapAt[Collect[#1, x] &, 1] *)

\endgroup