\begingroup
如何收集函数内部的术语(例如)Collect[f[a x + b y + c x], x]
或索引中的术语(例如)Collect[Subscript[f, a x + b y + c x], x]
?
\endgroup
1
最佳答案
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]
或者使用ReplaceAll
和PolynomialQ
:
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
|
如果表达式中要执行多个这样的集合,则
expr /. p_ /; PolynomialQ[p, x] :> Collect[p, x]
。\endgroup
–
|