Instead of introducing a formal expansion parameter via `Series`, the first–order truncation can be obtained directly at the structural level. The idea is simple: expand the expression into a sum of monomials, and then discard every term that contains nonlinear symbolic interactions:
FirstOrderApproximation[expr_] := ReplaceAll[Expand @ expr,
{
Times[s1_Symbol, s2_Symbol, rest___] :> 0,
Power[s_Symbol, n_ /; Greater[n, 1]] :> 0
}
];
Map[FirstOrderApproximation,
{3 a + c (d - a b d) + e c (a + b) f + 2 b - 1,
a + b a c d,
b a c d + b c,
a^4 + b a c d + b^8}]
(*{-1 + 3 a + 2 b, a, 0, 0}*)
**Why this works?**
- Expand brings the expression to a canonical polynomial form, a flat sum of products.
- After expansion, each term is an explicit `Times` expression. Since `Times` is `Orderless`, any product involving two or more symbolic factors matches
`s1_Symbol * s2_Symbol * rest___` and is removed, regardless of ordering or numeric coefficients.
- Powers such as `a^2` are eliminated by the second rule.
The result is precisely the collection of constant and linear terms, i.e. the first–order approximation in the symbolic variables.